Пример #1
0
        public override bool Delete(SampleEventMap map, bool fileOnly)
        {
            if (map != null)
            {
                SampleEventMapItem id = map.Get(KnownDetType.WaterQuality);
                if (id != null)
                {
                    IFileStoreProvider p = FileStore;
                    if (p != null)
                    {
                        IWQDeploymentProvider wqProv = WaterQualityManager.Instance.GetDeploymentProvider(this.Context);
                        if (wqProv != null && wqProv.CanDelete())
                        {
                            if (p.Delete(id.DetId))
                            {
                                if (fileOnly)
                                {
                                    return(true);
                                }
                                return(DeleteData(map));
                            }
                        }
                    }
                }
            }

            return(false);
        }
Пример #2
0
        private IEnumerable <WaterQualityDeployment> GetDeployments(IWQDeploymentProvider provider, HashSet <CompoundIdentity> eventIds, HashSet <CompoundIdentity> deploymentIds, HashSet <CompoundIdentity> siteIds, DateTime?start, DateTime?end)
        {
            IEnumerable <WaterQualityDeployment> deployments = provider.Get();

            if (deploymentIds != null && deploymentIds.Count > 0)
            {
                deployments = deployments.Where(x => deploymentIds.Contains(x.Identity));
            }
            if (eventIds != null && eventIds.Count > 0)
            {
                deployments = deployments.Where(x => eventIds.Contains(x.SampleEventId));
            }
            if (siteIds != null && siteIds.Count > 0)
            {
                deployments = deployments.Where(x => siteIds.Contains(x.SiteId));
            }
            if (start != null)
            {
                //TODO: inclusive date or any overlap?
                deployments = deployments.Where(x => x.Range.EndDate >= start);
            }
            if (end != null)
            {
                deployments = deployments.Where(x => x.Range.StartDate <= end);
            }
            return(deployments);
        }
Пример #3
0
        static void CreateDeps(IWQDeploymentProvider prov)
        {
            Guid sysId = new Guid("{5914629d-dd2d-4f1f-a06f-1b199fe19b37}");
            Guid pnlId = new Guid("{f9e1d49f-0b91-41cc-a88f-a24afa1a669e}");
            Guid aceId = new Guid("{6ca626ef-aab6-4746-8f18-7d97097055df}");

            CompoundIdentity pnnlId  = new CompoundIdentity(sysId, pnlId);
            CompoundIdentity usaceId = new CompoundIdentity(sysId, aceId);
        }
Пример #4
0
        private bool DeleteData(SampleEventMap map)
        {
            IWQDeploymentProvider wqProv = WaterQualityManager.Instance.GetDeploymentProvider(this.Context);

            if (wqProv != null && wqProv.CanDelete())
            {
                IEnumerable <WaterQualityDeployment> deploys = wqProv.GetForSampleEvent(map.SampleEventId);
                foreach (WaterQualityDeployment cur in deploys)
                {
                    wqProv.Delete(cur);
                }
                return(true);
            }
            return(false);
        }
Пример #5
0
        static void Main(string[] args)
        {
            ConfigurationManager.Instance.Bootstrap();
            ConfigurationManager.Instance.Initialize();
            ConfigurationManager.Instance.Start();
            Console.WriteLine("Config state: " + ConfigurationManager.Instance.State);

            LogManager.Instance.Bootstrap();
            LogManager.Instance.Initialize();
            LogManager.Instance.Start();
            Console.WriteLine("Log state: " + LogManager.Instance.State);

            AuthorizationManager.Instance.Bootstrap();
            AuthorizationManager.Instance.Initialize();
            AuthorizationManager.Instance.Start();
            Console.WriteLine("Auth state: " + AuthorizationManager.Instance.State);

            LocalSystemUser     usr     = new LocalSystemUser(SecurityUtils.AdminIdentity, "Admin", UserState.Active);
            UserSecurityContext context = new UserSecurityContext(usr);

            if (AuthorizationManager.Instance.State == Osrs.Runtime.RunState.Running)
            {
                //RegisterPermissions(context);
                //Grant(context);
            }

            WaterQualityManager.Instance.Initialize();
            Console.WriteLine("WaterQuality state: " + WaterQualityManager.Instance.State);
            WaterQualityManager.Instance.Start();
            Console.WriteLine("WaterQuality state: " + WaterQualityManager.Instance.State);

            if (WaterQualityManager.Instance.State == Osrs.Runtime.RunState.Running)
            {
                IWQDeploymentProvider depProv = WaterQualityManager.Instance.GetDeploymentProvider(context);
                if (depProv != null)
                {
                }
            }

            Console.WriteLine("ALL COMPLETE - Enter to exit");
            Console.ReadLine();
        }
Пример #6
0
        public bool CanDelete(WaterQualityMeasurement item)
        {
            if (item != null && this.CanDelete())
            {
                if (!item.DeploymentId.Equals(lastDeploymentId))
                {
                    if (this.helperProvider == null)
                    {
                        this.helperProvider = PgWaterQualityProviderFactory.Instance.GetDeploymentProvider(this.Context);
                    }

                    if (this.helperProvider != null)
                    {
                        WaterQualityDeployment depl = this.helperProvider.Get(item.DeploymentId);
                        if (depl != null)
                        {
                            CompoundIdentity se = depl.SampleEventId;
                            if (se != this.lastSampleEventId)
                            {
                                UserProvider prov = UserAffilationSecurityManager.Instance.GetProvider(this.Context);
                                if (prov != null)
                                {
                                    this.lastEditPermission = prov.HasAffiliationForSampleEvent(se, true);
                                    this.lastGetPermission  = prov.HasAffiliationForSampleEvent(se, false);
                                    this.lastSampleEventId  = se;
                                    this.lastDeploymentId   = item.DeploymentId;
                                }
                            }
                            else //same sample event, different deployment
                            {
                                this.lastDeploymentId = item.DeploymentId; //don't need to re-check the sampleevent controls permission
                            }
                        }
                    }
                }
            }
            return(false);
        }
Пример #7
0
        public override void Handle(HttpContext context, CancellationToken cancel)
        {
            if (context != null)
            {
                UserIdentityBase user = Security.Session.GetUser(context);
                if (user != null)
                {
                    UserSecurityContext ctx = new UserSecurityContext(user);
                    string localUrl         = RestUtils.LocalUrl(this, context.Request);
                    string meth             = RestUtils.StripLocal(this.BaseUrl, localUrl);
                    meth = meth.Substring(1);

                    if (!string.IsNullOrEmpty(meth))
                    {
                        if (context.Request.Method == "POST")
                        {
                            if (meth.Equals("deployments", StringComparison.OrdinalIgnoreCase))
                            {
                                try
                                {
                                    HashSet <CompoundIdentity> eventIds      = null;
                                    HashSet <CompoundIdentity> deploymentIds = null;
                                    HashSet <CompoundIdentity> siteIds       = null;
                                    DateTime?start = null;
                                    DateTime?end   = null;

                                    JToken token = JsonUtils.GetDataPayload(context.Request);
                                    if (token != null)
                                    {
                                        if (token["events"] != null)
                                        {
                                            eventIds = JsonUtils.ToIds(token["events"]);
                                        }

                                        if (token["deployments"] != null)
                                        {
                                            deploymentIds = JsonUtils.ToIds(token["deployments"]);
                                        }

                                        if (token["sites"] != null)
                                        {
                                            siteIds = JsonUtils.ToIds(token["sites"]);
                                        }

                                        if (token["start"] != null)
                                        {
                                            start = JsonUtils.ToDate(token["start"]);
                                        }

                                        if (token["end"] != null)
                                        {
                                            end = JsonUtils.ToDate(token["end"]);
                                        }
                                    }

                                    IWQDeploymentProvider provider = WaterQualityManager.Instance.GetDeploymentProvider(ctx);                                     //filters WQ deployments by user context
                                    if (provider != null)
                                    {
                                        IEnumerable <WaterQualityDeployment> deployments = GetDeployments(provider, eventIds, deploymentIds, siteIds, start, end);
                                        JArray jdeployments = Jsonifier.ToJson(deployments);

                                        if (jdeployments != null)
                                        {
                                            RestUtils.Push(context.Response, JsonOpStatus.Ok, jdeployments.ToString());
                                            return;
                                        }
                                        else
                                        {
                                            RestUtils.Push(context.Response, JsonOpStatus.Ok, "[]");
                                            return;
                                        }
                                    }
                                }
                                catch
                                {
                                    RestUtils.Push(context.Response, RestUtils.JsonOpStatus(JsonOpStatus.Failed));
                                    return;
                                }
                            }
                            else if (meth.Equals("measurements", StringComparison.OrdinalIgnoreCase))
                            {
                                try
                                {
                                    //TODO: ask about iterative calls for deployments (each deployment is a separate db call)

                                    IWQMeasurementProvider provider = WaterQualityManager.Instance.GetMeasurementProvider(ctx);
                                    if (provider != null)
                                    {
                                        HashSet <CompoundIdentity> eventIds      = null;
                                        HashSet <CompoundIdentity> deploymentIds = null;
                                        HashSet <CompoundIdentity> siteIds       = null;
                                        DateTime?start = null;
                                        DateTime?end   = null;

                                        JToken token = JsonUtils.GetDataPayload(context.Request);
                                        if (token != null)
                                        {
                                            if (token["events"] != null)
                                            {
                                                eventIds = JsonUtils.ToIds(token["events"]);
                                            }

                                            if (token["deployments"] != null)
                                            {
                                                deploymentIds = JsonUtils.ToIds(token["deployments"]);
                                            }

                                            if (token["sites"] != null)
                                            {
                                                siteIds = JsonUtils.ToIds(token["sites"]);
                                            }

                                            if (token["start"] != null)
                                            {
                                                start = JsonUtils.ToDate(token["start"]);
                                            }

                                            if (token["end"] != null)
                                            {
                                                end = JsonUtils.ToDate(token["end"]);
                                            }
                                        }

                                        IWQDeploymentProvider depProvider = WaterQualityManager.Instance.GetDeploymentProvider(ctx);                                         //provider will autofilter WQ deployments by user context
                                        IEnumerable <WaterQualityDeployment> deployments = GetDeployments(depProvider, eventIds, deploymentIds, siteIds, null, null);

                                        List <WaterQualityMeasurement> measurements = new List <WaterQualityMeasurement>();

                                        if (start != null || end != null)
                                        {
                                            DateTime queryStart;
                                            DateTime queryEnd;
                                            if (start == null)
                                            {
                                                queryStart = WQUtils.GlobalMinDate;
                                            }
                                            else
                                            {
                                                queryStart = start.Value;
                                            }

                                            if (end == null)
                                            {
                                                queryEnd = DateTime.UtcNow;
                                            }
                                            else
                                            {
                                                queryEnd = end.Value;
                                            }

                                            foreach (WaterQualityDeployment dep in deployments)
                                            {
                                                measurements.AddRange(provider.Get(dep.Identity, queryStart, queryEnd));
                                            }
                                        }
                                        else
                                        {
                                            foreach (WaterQualityDeployment dep in deployments)
                                            {
                                                measurements.AddRange(provider.Get(dep.Identity));
                                            }
                                        }

                                        JArray jmeasurements = Jsonifier.ToJson(measurements);

                                        if (jmeasurements != null)
                                        {
                                            RestUtils.Push(context.Response, JsonOpStatus.Ok, jmeasurements.ToString());
                                        }
                                        else
                                        {
                                            RestUtils.Push(context.Response, JsonOpStatus.Ok, "[]");
                                        }
                                        return;
                                    }
                                    RestUtils.Push(context.Response, JsonOpStatus.Failed);
                                }
                                catch
                                {
                                    RestUtils.Push(context.Response, RestUtils.JsonOpStatus(JsonOpStatus.Failed));
                                    return;
                                }
                            }
                            else if (meth.Equals("export", StringComparison.OrdinalIgnoreCase))
                            {
                                try
                                {
                                    HashSet <CompoundIdentity> eventIds      = null;
                                    HashSet <CompoundIdentity> deploymentIds = null;
                                    HashSet <CompoundIdentity> siteIds       = null;
                                    DateTime?start = null;
                                    DateTime?end   = null;

                                    JToken token = JsonUtils.GetDataPayload(context.Request);
                                    if (token != null)
                                    {
                                        if (token["events"] != null)
                                        {
                                            eventIds = JsonUtils.ToIds(token["events"]);
                                        }

                                        if (token["deployments"] != null)
                                        {
                                            deploymentIds = JsonUtils.ToIds(token["deployments"]);
                                        }

                                        if (token["sites"] != null)
                                        {
                                            siteIds = JsonUtils.ToIds(token["sites"]);
                                        }

                                        if (token["start"] != null)
                                        {
                                            start = JsonUtils.ToDate(token["start"]);
                                        }

                                        if (token["end"] != null)
                                        {
                                            end = JsonUtils.ToDate(token["end"]);
                                        }
                                    }

                                    IWQDeploymentProvider  depProvider           = WaterQualityManager.Instance.GetDeploymentProvider(ctx);
                                    IWQMeasurementProvider measProvider          = WaterQualityManager.Instance.GetMeasurementProvider(ctx);
                                    ISiteProvider          siteProvider          = SiteManager.Instance.GetSiteProvider(ctx);
                                    ISampleEventProvider   sampProvider          = FieldActivityManager.Instance.GetSampleEventProvider(ctx);
                                    IOrganizationProvider  orgProvider           = OrganizationManager.Instance.GetOrganizationProvider(ctx);
                                    IFieldTripProvider     fieldTripProvider     = FieldActivityManager.Instance.GetFieldTripProvider(ctx);
                                    IFieldActivityProvider fieldActivityProvider = FieldActivityManager.Instance.GetFieldActivityProvider(ctx);
                                    IProjectProvider       projectProvider       = ProjectManager.Instance.GetProvider(ctx);

                                    if (depProvider != null && measProvider != null && siteProvider != null && sampProvider != null &&
                                        orgProvider != null && fieldTripProvider != null && fieldActivityProvider != null && projectProvider != null)
                                    {
                                        IEnumerable <WaterQualityDeployment>  deployments  = GetDeployments(depProvider, eventIds, deploymentIds, siteIds, null, null);                                       //on export, time filters apply to measurements only
                                        IEnumerable <WaterQualityMeasurement> measurements = GetMeasurements(measProvider, start, end, deployments);

                                        //Get sites and sample events
                                        List <CompoundIdentity>     selected_siteIds  = deployments.Select(x => x.SiteId).ToList();
                                        List <CompoundIdentity>     selected_eventIds = deployments.Select(x => x.SampleEventId).ToList();
                                        IEnumerable <Site>          sitesData         = GetSites(siteProvider, selected_siteIds);
                                        IEnumerable <SamplingEvent> eventsData        = sampProvider.Get(selected_eventIds);

                                        //Get orgs and field trips
                                        List <CompoundIdentity>    selected_orgIds       = eventsData.Select(x => x.PrincipalOrgId).ToList();
                                        List <CompoundIdentity>    selected_fieldTripIds = eventsData.Select(x => x.FieldTripId).ToList();
                                        IEnumerable <Organization> orgData       = orgProvider.Get(selected_orgIds);
                                        IEnumerable <FieldTrip>    fieldTripData = fieldTripProvider.Get(selected_fieldTripIds);

                                        //Get field activities
                                        List <CompoundIdentity>     selected_fieldActivityIds = fieldTripData.Select(x => x.FieldActivityId).ToList();
                                        IEnumerable <FieldActivity> fieldActivityData         = fieldActivityProvider.Get(selected_fieldActivityIds);

                                        //Get projects
                                        List <CompoundIdentity> selected_projectIds = fieldActivityData.Select(x => x.ProjectId).ToList();
                                        IEnumerable <Project>   projectData         = projectProvider.Get(selected_projectIds);

                                        Guid fileId = CreateDeploymentFile(eventsData, deployments, measurements, sitesData,
                                                                           orgData, fieldTripData, fieldActivityData, projectData);

                                        if (fileId != null)
                                        {
                                            JObject o = new JObject();
                                            o.Add("fileid", fileId.ToString());
                                            o.Add("fileext", fileExtension);
                                            RestUtils.Push(context.Response, JsonOpStatus.Ok, o);
                                        }
                                        else
                                        {
                                            RestUtils.Push(context.Response, JsonOpStatus.Failed);
                                        }
                                        return;
                                    }
                                    RestUtils.Push(context.Response, JsonOpStatus.Failed);
                                }
                                catch
                                {
                                    RestUtils.Push(context.Response, RestUtils.JsonOpStatus(JsonOpStatus.Failed));
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            context.Response.StatusCode = HttpStatusCodes.Status400BadRequest;
        }
Пример #8
0
        public override UpdateStatus Update(FilestoreFile tempFileUpload, SampleEventMap map)
        {
            if (tempFileUpload != null)
            {
                FilestoreFile oldFile = this.Get(map);
                if (oldFile != null)
                {
                    if (this.CanModify(map))
                    {
                        WaterQualityDET      curdet   = new WaterQualityDET();
                        ExcelWaterQualityDET curexcel = new ExcelWaterQualityDET(curdet);
                        curexcel.Load(tempFileUpload);
                        curdet.Validate();
                        ValidationIssues curIssues = curdet.ValidationIssues;
                        if (curIssues.Count < 1)
                        {
                            WaterQualityDET      olddet = new WaterQualityDET();
                            ExcelWaterQualityDET excel  = new ExcelWaterQualityDET(olddet);
                            excel.Load(oldFile);
                            olddet.Validate();
                            ValidationIssues issues = olddet.ValidationIssues;
                            if (issues.Count < 1) //should be this is the old file
                            {
                                UpdateStatus status = null;
                                if (olddet.Deployments.Count < 1)     //old file has no data - bare det
                                {
                                    if (curdet.Deployments.Count < 1) //nothing to do really, new file has no data either
                                    {
                                        olddet = null;
                                        excel  = null;
                                        oldFile.Dispose();
                                        curdet   = null;
                                        curexcel = null;
                                        FileStoreManager.Instance.GetProvider().Delete(tempFileUpload);

                                        status = new UpdateStatus(UpdateIssue.AllOk);
                                        status.Add(new IssueNotice("NoDataInEither", "nothing to do"));
                                        return(status);
                                    }

                                    SampleEventMapItem item = map.Get(KnownDetType.WaterQuality);
                                    if (item != null)
                                    {
                                        olddet = null; //release old reference
                                        excel  = null; //release old reference

                                        //ok, no data in old file, but data in new file -- we have work to do -- handle first-time data insertion
                                        IWQDeploymentProvider  depl = WaterQualityManager.Instance.GetDeploymentProvider(this.Context);
                                        IWQMeasurementProvider meas = WaterQualityManager.Instance.GetMeasurementProvider(this.Context);
                                        if (depl != null && meas != null)
                                        {
                                            if (depl.CanCreate() && meas.CanCreate())
                                            {
                                                List <EntityBundle> bundles = this.GetBundles(map, KnownDetType.WaterQuality);
                                                if (bundles != null && bundles.Count == 2)
                                                {
                                                    status = this.InitialLoad(map.SampleEventId, bundles[0], bundles[1], curdet, depl, meas, item.IsPrivate);
                                                    if (status != null && status.Issue == UpdateIssue.AllOk) //success, so we overwrite the file
                                                    {
                                                        curdet   = null;
                                                        curexcel = null;
                                                        olddet   = null;
                                                        excel    = null;
                                                        IFileStoreProvider ip = FileStoreManager.Instance.GetProvider();
                                                        if (ip.Replace(tempFileUpload, oldFile)) //overwrite the existing file with the new one
                                                        {
                                                            tempFileUpload.Dispose();
                                                            oldFile.Dispose();
                                                            return(status); //we're done here
                                                        }
                                                        else
                                                        {
                                                            status = new UpdateStatus(UpdateIssue.DataIssue);
                                                            status.Add(new IssueNotice("File", "Failed to replace file"));
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    status = new UpdateStatus(UpdateIssue.DataIssue);
                                                    status.Add(new IssueNotice("Bundles", "Failed to get bundles"));
                                                }
                                            }
                                            else
                                            {
                                                status = new UpdateStatus(UpdateIssue.Security);
                                                status.Add(new IssueNotice("Permissions", "create denied"));
                                            }
                                        }
                                        else
                                        {
                                            status = new UpdateStatus(UpdateIssue.SystemIssue);
                                            status.Add(new IssueNotice("Failure", "Failed to get provider"));
                                        }
                                    }
                                    else
                                    {
                                        status = new UpdateStatus(UpdateIssue.NoExistingFile);
                                        status.Add(new IssueNotice("NoMapEntry", "Failed to find map reference"));
                                    }
                                    return(status);
                                }
                                else //crap -- this is an update where existing file already had data
                                {
                                    IWQDeploymentProvider  depl = WaterQualityManager.Instance.GetDeploymentProvider(this.Context);
                                    IWQMeasurementProvider meas = WaterQualityManager.Instance.GetMeasurementProvider(this.Context);
                                    if (depl != null && meas != null)
                                    {
                                        if (depl.CanCreate() && meas.CanCreate())
                                        {
                                            SampleEventMapItem  item    = map.Get(KnownDetType.WaterQuality);
                                            List <EntityBundle> bundles = this.GetBundles(map, KnownDetType.WaterQuality);
                                            if (item != null && bundles != null && bundles.Count == 2)
                                            {
                                                status = this.DeltaLoad(map.SampleEventId, bundles[0], bundles[1], curdet, olddet, depl, meas, map);
                                                if (status != null && status.Issue == UpdateIssue.AllOk) //success, so we overwrite the file
                                                {
                                                    curdet   = null;
                                                    curexcel = null;
                                                    olddet   = null;
                                                    excel    = null;
                                                    //NOTE -- making new file the permanent file and removing old file, then updating map for new file
                                                    IFileStoreProvider ip = FileStoreManager.Instance.GetProvider();
                                                    if (ip.Replace(tempFileUpload, oldFile)) //overwrite the existing file with the new one
                                                    {
                                                        tempFileUpload.Dispose();
                                                        oldFile.Dispose();
                                                        //ip.Delete(tempFileUpload); //may still be references so delete can fail
                                                        return(status); //we're done here
                                                    }
                                                    else
                                                    {
                                                        status = new UpdateStatus(UpdateIssue.DataIssue);
                                                        status.Add(new IssueNotice("File", "Failed to replace file"));
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                status = new UpdateStatus(UpdateIssue.DataIssue);
                                                status.Add(new IssueNotice("Bundles", "Failed to get bundles"));
                                            }
                                        }
                                        else
                                        {
                                            status = new UpdateStatus(UpdateIssue.Security);
                                            status.Add(new IssueNotice("Permissions", "create denied"));
                                        }
                                    }
                                    else
                                    {
                                        status = new UpdateStatus(UpdateIssue.SystemIssue);
                                        status.Add(new IssueNotice("Failure", "Failed to get provider"));
                                    }
                                    return(status);
                                }
                            }
                            else
                            {
                                UpdateStatus stat = new UpdateStatus(UpdateIssue.NoExistingFile);
                                foreach (ValidationIssue cur in issues)
                                {
                                    stat.Add(new IssueNotice(cur.IssueCode.ToString(), cur.IssueMessage));
                                }
                                return(stat);
                            }
                        }
                        else
                        {
                            UpdateStatus stat = new UpdateStatus(UpdateIssue.FileValidationIssues);
                            foreach (ValidationIssue cur in curIssues)
                            {
                                stat.Add(new IssueNotice(cur.IssueCode.ToString(), cur.IssueMessage));
                            }
                            return(stat);
                        }
                    }
                    else
                    {
                        UpdateStatus status = new UpdateStatus(UpdateIssue.Security);
                        status.Add(new IssueNotice("Permissions", "create denied"));
                        return(status);
                    }
                }
                return(new UpdateStatus(UpdateIssue.NoExistingFile));
            }
            return(new UpdateStatus(UpdateIssue.NoFilePosted));
        }
Пример #9
0
        private UpdateStatus DeltaLoad(CompoundIdentity seId, EntityBundle sites, EntityBundle instruments, WaterQualityDET curdet, WaterQualityDET olddet, IWQDeploymentProvider depl, IWQMeasurementProvider meas, SampleEventMap map)
        {
            UpdateStatus stat = new UpdateStatus(UpdateIssue.SystemIssue); //Not implemented

            if (curdet.Deployments.Count < 1)                              //ok, old file had data, this file has none
            {
                //what do we want to do? -- could just do a delete all
                stat = new UpdateStatus(UpdateIssue.DataIssue);
                stat.Add(new IssueNotice("NoData", "Delete then create"));
                SampleEventMapItem tmp = map.Get(KnownDetType.WaterQuality); //fetch it back
                if (this.Delete(map, false))
                {
                    stat = new UpdateStatus(UpdateIssue.AllOk);
                    stat.Add(new IssueNotice("NoIssues", "No issues"));
                }
                else
                {
                    this.Add("Failure", "Delete", UpdateIssue.Security, stat);
                }
            }
            else
            {
                //data in both files, this is a change/append situation
                stat = new UpdateStatus(UpdateIssue.DataIssue);
                stat.Add(new IssueNotice("NoData", "Delete then create"));
                SampleEventMapItem tmp = map.Get(KnownDetType.WaterQuality); //fetch it back
                if (this.DeleteData(map))
                {
                    if (this.InitialLoad(seId, sites, instruments, curdet, depl, meas, tmp.IsPrivate) != null)
                    {
                        stat = new UpdateStatus(UpdateIssue.AllOk);
                        stat.Add(new IssueNotice("NoIssues", "No issues"));
                    }
                    else
                    {
                        this.Add("Failure", "Create", UpdateIssue.Security, stat);
                    }
                }
                else
                {
                    this.Add("Failure", "Delete", UpdateIssue.Security, stat);
                }
            }

            return(stat);
        }
Пример #10
0
        private UpdateStatus InitialLoad(CompoundIdentity seId, EntityBundle sites, EntityBundle instruments, WaterQualityDET curdet, IWQDeploymentProvider depl, IWQMeasurementProvider meas, bool isPrivate)
        {
            UpdateStatus stat = null;

            if (sites == null || instruments == null || seId == null || seId.IsEmpty)
            {
                stat = new UpdateStatus(UpdateIssue.DataIssue);
                stat.Add(new IssueNotice("BundlesOrEvent", "Null value"));
            }
            else
            {
                //TODO -- may need to do case insensitive ops or not -- verify how excel part is implemented

                Dictionary <string, CompoundIdentity> deployIds = new Dictionary <string, CompoundIdentity>();
                BundleElement elem;
                foreach (DeploymentDTO cur in curdet.Deployments.Values)
                {
                    if (cur != null && !deployIds.ContainsKey(cur.DeployCode))
                    {
                        elem = sites.Get(cur.SiteId);
                        if (elem != null)
                        {
                            CompoundIdentity siteId = elem.EntityId;
                            elem = instruments.Get(cur.InstrumentId);
                            if (elem != null)
                            {
                                CompoundIdentity       sensorId = elem.EntityId;
                                WaterQualityDeployment dep      = depl.Create(cur.DeployCode, seId, siteId, sensorId, this.GetRange(cur.StartDate, cur.EndDate), cur.Comments, isPrivate);
                                if (dep != null)
                                {
                                    deployIds[dep.Name] = dep.Identity;
                                }
                                else
                                {
                                    stat = Add("Create", "Unable to create deployment " + cur.DeployCode, UpdateIssue.DataIssue, stat);
                                }
                            }
                            else
                            {
                                stat = Add("InstCode", "Empty or invalid Instrument Code on deployment " + cur.DeployCode, UpdateIssue.DataIssue, stat);
                            }
                        }
                        else
                        {
                            stat = Add("SiteCode", "Empty or invalid Site Code on Deployment " + cur.DeployCode, UpdateIssue.DataIssue, stat);
                        }
                    }
                    else
                    {
                        stat = Add("DeployCode", "A deployment is missing a deployment code", UpdateIssue.DataIssue, stat);
                    }
                }

                Dictionary <CompoundIdentity, WaterQualityMeasurementsDTO> items = new Dictionary <CompoundIdentity, WaterQualityMeasurementsDTO>();
                foreach (MeasurementDTO cur in curdet.Measurements.Values)
                {
                    if (cur != null && deployIds.ContainsKey(cur.DeployCode) && cur.MeasureDateTime != null)
                    {
                        CompoundIdentity depId = deployIds[cur.DeployCode];
                        if (depId != null)
                        {
                            if (!items.ContainsKey(depId))
                            {
                                items[depId] = WaterQualityMeasurementsDTO.Create(depId);
                            }

                            WaterQualityMeasurementsDTO elems = items[depId];
                            elems.Add(new WaterQualityMeasurementDTO(cur.MeasureDateTime.Value, cur.SurfaceElevation, cur.Temperature, cur.pH, cur.DO, cur.Conductivity, cur.Salinity, cur.Velocity));
                        }
                    }
                    else
                    {
                        stat = Add("Create", "Unable to create Measurement with key " + cur.DeployCode + ":" + cur.MeasureDateTime, UpdateIssue.DataIssue, stat);
                    }
                }

                foreach (WaterQualityMeasurementsDTO cur in items.Values)
                {
                    if (cur != null)
                    {
                        meas.Create(cur);
                    }
                }

                if (stat == null)
                {
                    stat = new UpdateStatus(UpdateIssue.AllOk);
                    stat.Add(new IssueNotice("NoIssues", "No issues"));
                }
            }
            return(stat);
        }