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); }
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); }
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); }
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); }
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(); }
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); }
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; }
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)); }
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); }
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); }