/// <summary> /// Get the merged Objectparameter for a MappedObject /// </summary> /// <param name="mapObj"></param> /// <returns></returns> public static Objectparameter getMergedObjectParameter(MappedObject mapObj) { // default take everything from original Objectparameter mergedObjParam = (Objectparameter)mapObj.Objectparameter.Clone(); // look for free fill properties if (mapObj.Objectparameter.MotherObjectparameter != null) { mergedObjParam.HasProperties = mapObj.Objectparameter.MotherObjectparameter.HasProperties; mergedObjParam.ProcessParameters = mapObj.Objectparameter.MotherObjectparameter.ProcessParameters; mergedObjParam.FeatureType = mapObj.Objectparameter.MotherObjectparameter.FeatureType; } else { mergedObjParam.HasProperties = mapObj.Objectparameter.HasProperties; mergedObjParam.FeatureType = mapObj.Objectparameter.FeatureType; } // copy all free fill properties to merged parameter, wenn free fill has a value foreach (ObjectparameterHasProperties ohp in mergedObjParam.HasProperties.Where(m => m.isOptional == true)) { if (mapObj.FreeFillParameter != null) { // Get the Property from the Free Fill Object PropertyInfo FreeFillProperty = ohp.Property.Split('.').Select(s => mapObj.FreeFillParameter.GetType().GetProperty(s)).FirstOrDefault(); // Get the Property from the Merged Object PropertyInfo MergedProperty = ohp.Property.Split('.').Select(s => mergedObjParam.GetType().GetProperty(s)).FirstOrDefault(); // Assign FreeFill PropertyValue to Merged PropertyValue if (FreeFillProperty.GetValue(mapObj.FreeFillParameter) != null) { MergedProperty.SetValue(mergedObjParam, FreeFillProperty.GetValue(mapObj.FreeFillParameter)); } } } return(mergedObjParam); }
/// <summary> /// Get the merged Objectparameter for a MappedObject /// </summary> /// <param name="mapObjID">mapped object ID</param> /// <returns>merged objectparameter</returns> public static Objectparameter GetMergedObjectparameter(int mapObjID) { MappedObject mapObj = null; using (ResTBContext db = new ResTBContext()) { mapObj = db.MappedObjects.AsNoTracking() .Include(m => m.FreeFillParameter) .Include(m => m.Objectparameter.HasProperties) .Include(m => m.Objectparameter.MotherOtbjectparameter.HasProperties) .Include(m => m.Objectparameter.MotherOtbjectparameter.ObjectparameterPerProcesses) .Include(m => m.Objectparameter.MotherOtbjectparameter.ResilienceFactors.Select(r => r.ResilienceWeights)) .Include(m => m.Objectparameter.ResilienceFactors.Select(r => r.ResilienceWeights)) .Include(m => m.ResilienceValues.Select(rv => rv.ResilienceWeight).Select(rw => rw.ResilienceFactor)) .Where(m => m.ID == mapObjID) .FirstOrDefault(); if (mapObj == null) { return(null); } // default take everything from original Objectparameter mergedObjParam = ShallowCopyEntity <Objectparameter>(mapObj.Objectparameter); // look for free fill properties if (mapObj.Objectparameter.MotherOtbjectparameter != null) { mergedObjParam.HasProperties = mapObj.Objectparameter.MotherOtbjectparameter.HasProperties; mergedObjParam.ObjectparameterPerProcesses = mapObj.Objectparameter.MotherOtbjectparameter.ObjectparameterPerProcesses; mergedObjParam.FeatureType = mapObj.Objectparameter.MotherOtbjectparameter.FeatureType; mergedObjParam.ResilienceFactors = mapObj.Objectparameter.MotherOtbjectparameter.ResilienceFactors; } else { mergedObjParam.HasProperties = mapObj.Objectparameter.HasProperties; mergedObjParam.ObjectparameterPerProcesses = mapObj.Objectparameter.ObjectparameterPerProcesses; mergedObjParam.FeatureType = mapObj.Objectparameter.FeatureType; mergedObjParam.ResilienceFactors = mapObj.Objectparameter.ResilienceFactors; } mergedObjParam.ResilienceFactors = mergedObjParam.ResilienceFactors.OrderBy(r => r.ID).ToList(); // copy all free fill properties to merged parameter, wenn free fill has a value foreach (ObjectparameterHasProperties ohp in mergedObjParam.HasProperties.Where(m => m.isOptional == true)) { if (mapObj.FreeFillParameter != null) { // Get the Property from the Free Fill Object PropertyInfo FreeFillProperty = ohp.Property.Split('.').Select(s => mapObj.FreeFillParameter.GetType().GetProperty(s)).FirstOrDefault(); // Get the Property from the Merged Object PropertyInfo MergedProperty = ohp.Property.Split('.').Select(s => mergedObjParam.GetType().GetProperty(s)).FirstOrDefault(); // Assign FreeFill PropertyValue to Merged PropertyValue if (FreeFillProperty.GetValue(mapObj.FreeFillParameter) != null) { MergedProperty.SetValue(mergedObjParam, FreeFillProperty.GetValue(mapObj.FreeFillParameter)); } } } //Add all ResilienceFactors to merged object foreach (ResilienceFactor resFac in mergedObjParam.ResilienceFactors) { foreach (ResilienceWeight resWeight in resFac.ResilienceWeights) { var resValue = new ResilienceValues() { MappedObject = mapObj, ResilienceWeight = resWeight, OverwrittenWeight = resWeight.Weight, Value = 0 }; if (mapObj.ResilienceValues.Any(rv => rv.ResilienceWeight.ID == resWeight.ID)) { var mappedResValue = mapObj.ResilienceValues.Where(rv => rv.ResilienceWeight.ID == resWeight.ID).Single(); resValue = mappedResValue; } mergedObjParam.ResilienceValuesMerged.Add(resValue); } } return(mergedObjParam); } }
public int ImportProjectThread(string filename) { try { ZipFile.ExtractToDirectory(filename, localDirectory + "\\ImportMap"); // import the project, add it to the database as a new project with new id if (File.Exists(localDirectory + "\\ImportMap\\database.sqlite")) { RunGdalImport(localDirectory + "\\ImportMap\\database.sqlite", "projectimport", "project"); } using (var context = new DB.ResTBContext()) { List <Project> importproject = context.Projects .SqlQuery("Select * from projectimport") .ToList <Project>(); if ((importproject != null) && (importproject.Count > 0)) { Project p = new Project(); p.Description = importproject[0].Description; p.CoordinateSystem = importproject[0].CoordinateSystem; // check if name is already there... string name = importproject[0].Name; Project pold = context.Projects.Where(m => m.Name == name).FirstOrDefault(); if (pold != null) { name = name + " (import " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ")"; } p.Name = name; p.Number = importproject[0].Number; context.Projects.Add(p); context.SaveChanges(); Events.MapControl_BusyStateChange bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "ImportProject"; bc.Percent = 10; bc.Message = Resources.MapControl_Importing; MapControlTools.On_BusyStateChange(bc); // we have a new project id //import all new Objectparameters RunGdalImport(localDirectory + "\\ImportMap\\database.sqlite", "objectparameterimport", "objectparameter"); RunGdalImport(localDirectory + "\\ImportMap\\database.sqlite", "resiliencevaluesimport", "resiliencevalues"); RunGdalImport(localDirectory + "\\ImportMap\\database.sqlite", "praimport", "pra"); List <PrA> importpra = context.PrAs .SqlQuery("Select * from praimport") .ToList <PrA>(); foreach (PrA praImp in importpra) { PrA pra = (PrA)praImp.Clone(); pra.Project = p; p.PrAs.Add(pra); context.PrAs.Add(pra); } context.SaveChanges(); RunGdalImport(localDirectory + "\\ImportMap\\database.sqlite", "protectionmeasureimport", "ProtectionMeasure"); List <ProtectionMeasure> importpm = context.ProtectionMeasurements .SqlQuery("Select * from protectionmeasureimport") .ToList <ProtectionMeasure>(); if (importpm?.Count > 0) { ProtectionMeasure pm = (ProtectionMeasure)importpm[0].Clone(); pm.Project = p; p.ProtectionMeasure = pm; context.ProtectionMeasurements.Add(pm); context.SaveChanges(); } // create the ids of old objectparameters, so foreign constraint will work. // But don't override existing List <Objectparameter> importop = context.Objektparameter .SqlQuery("Select * from objectparameterimport") .ToList <Objectparameter>(); // foreach (Objectparameter o in importop) { if (context.Objektparameter.Where(m => m.ID == o.ID).ToList().Count == 0) { context.Database.ExecuteSqlCommand("INSERT INTO public.\"Objectparameter\" (\"ID\",\"FeatureType\",\"Value\",\"Floors\",\"Personcount\",\"Presence\",\"NumberOfVehicles\",\"Velocity\",\"Staff\",\"IsStandard\",\"ObjectClass_ID\")\tVALUES (" + o.ID + ",1,0,0,0,0.0,0,0,0,false,1); "); } } ResTBPostGISLayer tempLayer = new ResTBMitigationMeasureLayer(0); if (File.Exists(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + ".shp")) { RunGdalImport(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + ".shp", "protectionmeasuregeometryimport"); context.Database.ExecuteSqlCommand("insert into \"ProtectionMeasureGeometry\" (project_fk, geometry) select " + p.Id + ", wkb_geometry from protectionmeasuregeometryimport;"); } bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "ImportProject"; bc.Percent = 30; bc.Message = Resources.MapControl_Importing; MapControlTools.On_BusyStateChange(bc); tempLayer = new ResTBPerimeterLayer(0); if (File.Exists(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + ".shp")) { RunGdalImport(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + ".shp", "perimeterimport"); context.Database.ExecuteSqlCommand("insert into \"Perimeter\" (project_fk, geometry) select " + p.Id + ", wkb_geometry from perimeterimport;"); } bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "ImportProject"; bc.Percent = 40; bc.Message = Resources.MapControl_Importing; MapControlTools.On_BusyStateChange(bc); tempLayer = new ResTBHazardMapLayer(0, false, context.NatHazards.ToList().First(), 0); if (File.Exists(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + ".shp")) { RunGdalImport(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + ".shp", "hazardmapimport"); context.Database.ExecuteSqlCommand("insert into \"HazardMap\" (\"Project_Id\", \"Index\",\"BeforeAction\",\"NatHazard_ID\",geometry) select " + p.Id + ",\"index\",CASE WHEN beforeacti IS NULL THEN false WHEN beforeacti = 0 THEN false ELSE true END beforeaction ,\"nathazard_\", wkb_geometry from hazardmapimport;"); } bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "ImportProject"; bc.Percent = 50; bc.Message = Resources.MapControl_Importing; MapControlTools.On_BusyStateChange(bc); tempLayer = new ResTBDamagePotentialLayer(0); if (File.Exists(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + "_Points.shp")) { RunGdalImport(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + "_Points.shp", "damagepotentialpoints"); context.Database.ExecuteSqlCommand("insert into \"MappedObject\" (\"Project_Id\", \"FreeFillParameter_ID\",\"Objectparameter_ID\",point) select " + p.Id + ", freefillpa, objectpara, wkb_geometry from damagepotentialpoints;"); } if (File.Exists(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + "_Lines.shp")) { RunGdalImport(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + "_Lines.shp", "damagepotentiallines"); context.Database.ExecuteSqlCommand("insert into \"MappedObject\" (\"Project_Id\", \"FreeFillParameter_ID\",\"Objectparameter_ID\",line) select " + p.Id + ", freefillpa, objectpara, wkb_geometry from damagepotentiallines;"); } List <int> importrvsMOID = context.Database.SqlQuery <int>("select distinct mappedobject_id from resiliencevaluesimport") .ToList <int>(); bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "ImportProject"; bc.Percent = 60; bc.Message = Resources.MapControl_Importing; MapControlTools.On_BusyStateChange(bc); if (File.Exists(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + "_Polygones.shp")) { RunGdalImport(localDirectory + "\\ImportMap\\" + tempLayer.ExportImportFileName + "_Polygones.shp", "damagepotentialpolygones"); context.Database.ExecuteSqlCommand("insert into \"MappedObject\" (\"Project_Id\", \"FreeFillParameter_ID\",\"Objectparameter_ID\",polygon) select " + p.Id + ", freefillpa, objectpara, wkb_geometry from damagepotentialpolygones;"); } bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "ImportProject"; bc.Percent = 70; bc.Message = Resources.MapControl_Importing; MapControlTools.On_BusyStateChange(bc); foreach (int moID in importrvsMOID) { string sql = "insert into \"ResilienceValues\" (\"OverwrittenWeight\", \"Value\", \"MappedObject_ID\", \"ResilienceWeight_ID\") " + "select r.overwrittenweight, r.value, (select \"ID\" " + "from \"MappedObject\" mo where polygon = ( " + "select wkb_geometry from damagepotentialpolygones d " + "where d.id = " + moID + ") " + "and \"Project_Id\" = " + p.Id + "), r.resilienceweight_id from resiliencevaluesimport r where r.mappedobject_id = " + moID + "; "; context.Database.ExecuteSqlCommand(sql); } List <MappedObject> mos = context.MappedObjects.Where(m => m.Project.Id == p.Id).ToList(); // Insert FreeFills and Objectparameters foreach (MappedObject mo in mos) { if (mo.FreeFillParameter != null) { Objectparameter o = importop.Where(m => m.ID == mo.FreeFillParameter.ID).FirstOrDefault(); Objectparameter oCopy = ShallowCopyEntity <Objectparameter>(o); context.Objektparameter.Add(oCopy); mo.FreeFillParameter = oCopy; context.SaveChanges(); } if (mo.Objectparameter != null) { Objectparameter o = importop.Where(m => m.ID == mo.Objectparameter.ID).FirstOrDefault(); // not a standard objectparameter if (o != null) { Objectparameter oCopy = ShallowCopyEntity <Objectparameter>(o); // get the objectclass int objClassID = context.Database.SqlQuery <int>("select objectclass_id from objectparameterimport where id = " + o.ID).First(); ObjectClass oc = context.ObjektKlassen.Find(objClassID); oCopy.ObjectClass = oc; // get the motherobject int motherObjID = context.Database.SqlQuery <int>("select motherotbjectparameter_id from objectparameterimport where id = " + o.ID).First(); Objectparameter motherObj = context.Objektparameter.Find(motherObjID); oCopy.MotherOtbjectparameter = motherObj; context.Objektparameter.Add(oCopy); mo.Objectparameter = oCopy; context.SaveChanges(); } } } bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Idle; bc.KeyOfSender = "ImportProject"; bc.Percent = 100; bc.Message = Resources.MapControl_Importing_Success; MapControlTools.On_BusyStateChange(bc); return(p.Id); } } } catch (Exception e) { Events.MapControl_Error export_error = new Events.MapControl_Error() { ErrorCode = Events.ErrorCodes.ImportExportError, InMethod = "ImportProject", AxMapError = e.ToString() }; On_Error(export_error); } return(-1); }