Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        public IEnumerable <WaterQualityMeasurement> Create(WaterQualityMeasurementsDTO items)
        {
            if (items != null)
            {
                if (!items.DeploymentId.IsNullOrEmpty() && this.CanCreate())
                {
                    List <WaterQualityMeasurement> results = new List <WaterQualityMeasurement>();
                    if (items.Count > 0)
                    {
                        int           count = 0;
                        StringBuilder sb    = new StringBuilder(Db.InsertMeasurementB);
                        NpgsqlCommand cmd   = Db.GetCmd(Db.ConnectionString);
                        //we could optimize this further by doing a begin / end transaction first - if needed, hope not - DB transactions suck bad - don't use them if you don't have to.
                        foreach (WaterQualityMeasurementDTO cur in items)
                        {
                            //do inserts in batches of 100 items
                            if (count > 99)
                            {
                                cmd.CommandText = sb.ToString();
                                Db.ExecuteNonQuery(cmd);
                                count = 0;
                                sb.Clear();
                                sb.Append(Db.InsertMeasurementB); //this is "INSERT ... VALUES " -- needs the batches as param sets (a,b,c),(a,b,c),...
                            }

                            if (count > 0)
                            {
                                sb.Append(",");
                            }
                            count++; //increment the indicator

                            //\"DeploySystemId\", \"DeployId\", \"SampleDate\", \"SurfElev\", \"Temperature\", \"pH\", \"DissOxy\", \"Cond\", \"Sal\", \"Velocity\"
                            sb.Append("('");
                            sb.Append(items.DeploymentId.DataStoreIdentity);
                            sb.Append("','");
                            sb.Append(items.DeploymentId.Identity);
                            sb.Append("','");
                            sb.Append(Db.FixDate(cur.SampleDate).ToString("u"));
                            sb.Append("',");
                            if (cur.SurfaceElevation.HasValue && !double.IsNaN(cur.SurfaceElevation.Value))
                            {
                                sb.Append(cur.SurfaceElevation.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(',');

                            if (cur.Temperature.HasValue && !double.IsNaN(cur.Temperature.Value))
                            {
                                sb.Append(cur.Temperature.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(',');

                            if (cur.pH.HasValue && !double.IsNaN(cur.pH.Value))
                            {
                                sb.Append(cur.pH.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(',');

                            if (cur.DissolvedOxygen.HasValue && !double.IsNaN(cur.DissolvedOxygen.Value))
                            {
                                sb.Append(cur.DissolvedOxygen.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(',');

                            if (cur.Conductivity.HasValue && !double.IsNaN(cur.Conductivity.Value))
                            {
                                sb.Append(cur.Conductivity.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(',');

                            if (cur.Salinity.HasValue && !double.IsNaN(cur.Salinity.Value))
                            {
                                sb.Append(cur.Salinity.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(',');

                            if (cur.Velocity.HasValue && !double.IsNaN(cur.Velocity.Value))
                            {
                                sb.Append(cur.Velocity.Value);
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(')');
                            results.Add(new WaterQualityMeasurement(items.DeploymentId, Db.FixDate(cur.SampleDate), cur.SurfaceElevation, cur.Temperature, cur.pH, cur.DissolvedOxygen, cur.Conductivity, cur.Salinity, cur.Velocity));
                        }
                        if (count > 0) //commit any leftovers
                        {
                            cmd.CommandText = sb.ToString();
                            Db.ExecuteNonQuery(cmd);
                        }
                    }
                    return(results);
                }
            }
            return(null);
        }