/// <summary>
        /// Gets a dataset by id and checks the access rights
        /// </summary>
        /// <param name="id">dataset id</param>
        /// <param name="userId">userid</param>
        /// <returns>Dataset</returns>
        public DatasetDto GetById(int id, int?userId)
        {
            Dataset dataset = _datasetRepository.GetById(id);

            if (dataset.UserId == userId || dataset.Flags.HasFlag(DataSetFlags.Public))
            {
                return(DatasetMapper.ToDto(dataset));
            }
            else
            {
                throw new Exception("Not Authorized");
            }
        }
        /// <summary>
        /// Gets all editable datasets for the user
        /// </summary>
        /// <param name="userId">userid</param>
        /// <returns>list of datasets</returns>
        public List <DatasetDto> GetAllEditable(int userId)
        {
            List <DatasetDto> dtoList = new List <DatasetDto>();

            foreach (Dataset ds in _datasetRepository.GetAllEditable(userId))
            {
                try
                {
                    dtoList.Add(DatasetMapper.ToDto(ds));
                }
                catch { }// ignore error so other datasets can be loaded correctly
            }
            return(dtoList);
        }
 private Dataset xorDataset = null; //cache
 private DatasetDto GetXorDatasetDto(DataSetFlags flags)
 {
     if (xorDataset == null)
     {
         xorDataset = new Dataset()
         {
             Data   = File.ReadAllText("Resources/xor_ok.json"),
             Flags  = flags,
             UserId = 0,
             Name   = "XOR"
         };
     }
     return(DatasetMapper.ToDto(xorDataset));
 }
        public ESDATChemistryMapperFactory(ODM2DuplicateChecker duplicateChecker, IWQDefaultValueProvider WQDefaultValueProvider, WayToHandleNewData wayToHandleNewData, List<IResult> results)
        {
            this.WQDefaultValueProvider = WQDefaultValueProvider;

            ActionMapper = new ChemistryActionMapper(duplicateChecker, this, WQDefaultValueProvider, wayToHandleNewData, results);
            ActionByMapper = new ActionByMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);

            AffiliationMapper = new AffiliationMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            AffiliationMapper.BackingStore = new List<Affiliation>();

            DatasetMapper = new DatasetMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            DatasetMapper.BackingStore = new List<Dataset>();

            DatasetsResultMapper = new DatasetsResultMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            FeatureActionMapper = new ChemistryFeatureActionMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            
            MeasurementResultMapper = new ChemistryMeasurementResultMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            MeasurementResultValueMapper = new ChemistryMeasurementResultValueMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);

            MethodMapper = new ChemistryMethodMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            MethodMapper.BackingStore = new List<Method>();

            OrganizationMapper = new ChemistryOrganizationMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            OrganizationMapper.BackingStore = new List<Organization>();

            PersonMapper = new PersonMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            PersonMapper.BackingStore = new List<Person>();

            ProcessingLevelMapper = new ProcessingLevelMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            ProcessingLevelMapper.BackingStore = new List<ProcessingLevel>();

            RelatedActionMapper = new RelatedActionMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            ResultMapper = new ChemistryResultMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);

            SamplingFeatureMapper = new ChemistrySamplingFeatureMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            SamplingFeatureMapper.BackingStore = new List<SamplingFeature>();

            UnitMapper = new ChemistryUnitMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            UnitMapper.BackingStore = new List<Unit>();

            VariableMapper = new ChemistryVariableMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            VariableMapper.BackingStore = new List<Variable>();

            ResultExtensionPropertyValueMapper = new ResultExtensionPropertyValueMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);

            ExtensionPropertyMapper = new ExtensionPropertyMapper(duplicateChecker, WQDefaultValueProvider, wayToHandleNewData, results);
            ExtensionPropertyMapper.BackingStore = new List<ExtensionProperty>();
        }
        public void ScaffoldTest()
        {
            var esdatModel = new ESDATModel();

            var mockDb               = new Mock <IDbContext>();
            var mockDbContext        = mockDb.Object;
            var duplicateChecker     = new ODM2DuplicateChecker(mockDbContext);
            var defaultValueProvider = new StaticWQDefaultValueProvider();
            var wayToHandleNewData   = WayToHandleNewData.ThrowExceptionForNewData;
            var results              = new List <IResult>();
            var mapper               = new DatasetMapper(duplicateChecker, defaultValueProvider, wayToHandleNewData, results);

            var datasetsResult = new DatasetsResult();
            var dataSet        = mapper.Draft(esdatModel);

            Assert.AreEqual(defaultValueProvider.DefaultDatasetTypeCV, dataSet.DatasetTypeCV);
            Assert.AreEqual(esdatModel.LabRequestId.ToString(), dataSet.DatasetCode);
            Assert.AreEqual(String.Format("{0}: {1} ({2})", esdatModel.LabName, esdatModel.LabRequestId.ToString(), esdatModel.DateReported), dataSet.DatasetTitle);
            Assert.AreEqual(string.Empty, dataSet.DatasetAbstract);
        }
        public void ScaffoldTest()
        {
            var esdatModel = new ESDATModel();

            var mockDb = new Mock<IDbContext>();
            var mockDbContext = mockDb.Object;
            var duplicateChecker = new ODM2DuplicateChecker(mockDbContext);
            var defaultValueProvider = new StaticWQDefaultValueProvider();
            var wayToHandleNewData = WayToHandleNewData.ThrowExceptionForNewData;
            var results = new List<IResult>();
            var mapper = new DatasetMapper(duplicateChecker, defaultValueProvider, wayToHandleNewData, results);

            var datasetsResult = new DatasetsResult();
            var dataSet = mapper.Draft(esdatModel);

            Assert.AreEqual(defaultValueProvider.DefaultDatasetTypeCV, dataSet.DatasetTypeCV);
            Assert.AreEqual(esdatModel.LabRequestId.ToString(), dataSet.DatasetCode);
            Assert.AreEqual(String.Format("{0}: {1} ({2})", esdatModel.LabName, esdatModel.LabRequestId.ToString(), esdatModel.DateReported), dataSet.DatasetTitle);
            Assert.AreEqual(string.Empty, dataSet.DatasetAbstract);
        }
        /// <summary>
        ///  Checks the right for the update process and updates the dataset and
        /// </summary>
        /// <param name="datasetDto">dataset</param>
        /// <param name="userId">userid</param>
        /// <returns>the updated dataset</returns>
        public DatasetDto Update(DatasetDto datasetDto, int userId)
        {
            ValidateDataset(datasetDto);

            Dataset result = null;

            if (datasetDto.Id > 0)
            {
                Dataset ds = _datasetRepository.GetById(datasetDto.Id);
                ds.Data     = datasetDto.Json;
                ds.Flags    = datasetDto.Flags;
                ds.Name     = datasetDto.Name;
                ds.Modified = DateTime.Now;
                if (ds.UserId != userId)
                {
                    throw new Exception("No permission to update this dataset.");
                }

                _datasetRepository.DataContext.Commit();
                result = ds;
            }
            else
            {
                Dataset ds = new Dataset()
                {
                    Id       = 0,
                    Name     = datasetDto.Name,
                    Flags    = datasetDto.Flags,
                    Data     = datasetDto.Json,
                    UserId   = userId,
                    Created  = DateTime.Now,
                    Modified = DateTime.Now
                };
                _datasetRepository.Add(ds);
                _datasetRepository.DataContext.Commit();
                result = ds;
            }

            return(DatasetMapper.ToDto(result));
        }
        /// <summary>
        /// Gets a dataset by name
        /// </summary>
        /// <param name="name">name of the dataset</param>
        /// <returns>DatasetDto</returns>
        public DatasetDto GetByName(string name)
        {
            Dataset ds = _datasetRepository.GetByName(name);

            return(DatasetMapper.ToDto(ds));
        }