-
Notifications
You must be signed in to change notification settings - Fork 0
/
GetLayerFiles2Fix.cs
183 lines (167 loc) · 5.69 KB
/
GetLayerFiles2Fix.cs
1
private static void GetLayerFiles2Fix(){ ILayerFile pLayerFile = new LayerFileClass(); ILayer pLayer = null; IDataset pDataset = null; IDataLayer2 pDataLayer = null; IDatasetName pDatasetName = null; string serverName = string.Empty; string datasetName = string.Empty; string serverPrefix = string.Empty; string layerFileFullPathName = string.Empty; try { if (Directory.Exists(Layer_File_Path) == true) { DirectoryInfo layerFileDirectory = new DirectoryInfo(Layer_File_Path); foreach (FileInfo fileInfo in layerFileDirectory.GetFiles("*.lyr")) { if (ExcludeLayerFile(fileInfo.Name) == false) { layerFileFullPathName = Layer_File_Path + fileInfo.Name; pLayerFile.Open(layerFileFullPathName); pLayer = pLayerFile.Layer; if (pLayer is IGroupLayer) { ProcessGroupLayer(pLayerFile, pLayer as IGroupLayer, fileInfo.Name); } else { if (!(pLayer.Valid)) { pDataset = pLayer as IDataset; if (pDataset != null) { pDataLayer = pDataset as IDataLayer2; pDatasetName = pDataLayer.DataSourceName as IDatasetName; UpdateProperties(pLayerFile, pDatasetName, pDataLayer, fileInfo.Name); } else { string message = "Layer file " + pLayer.Name + " not recognized, fix manually."; LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", message); } } } pLayer = null; } } } } catch (Exception ex) { LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", ex.StackTrace + "\r\n" + ex.Message); } finally { if (pLayerFile != null) { Marshal.ReleaseComObject(pLayerFile); pLayerFile = null; } if (pLayer != null) { Marshal.ReleaseComObject(pLayer); pLayer = null; } if (pDataset != null) { Marshal.ReleaseComObject(pDataset); pDataset = null; } if (pDataLayer != null) { Marshal.ReleaseComObject(pDataLayer); pDataLayer = null; } if (pDatasetName != null) { Marshal.ReleaseComObject(pDatasetName); pDatasetName = null; } }}private static void UpdateProperties(ILayerFile pLayerFile, IDatasetName pDatasetName, IDataLayer2 pDataLayer, string layerFileName){ IPropertySet pPropertySet = new PropertySetClass(); IWorkspaceName pWorkspaceName = new WorkspaceNameClass(); string datasetName = string.Empty; string serverPrefix = string.Empty; string serverName = string.Empty; string serviceName = string.Empty; string userName = string.Empty; string password = string.Empty; string version = string.Empty; int count = 0; bool proceeed = false; bool datasetExists = false; try { //Get server prefix, i.e. RIM, GISLIB. datasetName = pDatasetName.Name; count = datasetName.IndexOf("."); //If no prefix found, log layer file and exit. if (count == -1) { string message = "Layer file " + layerFileName + " not recognized, fix manually."; LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", message); return; } serverPrefix = datasetName.Substring(0, count); switch (serverPrefix) { case "RIM": serverName = "grespsde"; serviceName = "5163:rim"; userName = "gisuser"; password = "gisuser"; version = "RIM.DEFAULT"; proceeed = true; break; case "GISLIB": serverName = "gispsde"; serviceName = "port:5161"; userName = "gisuser"; password = "gisuser"; version = "SDE.DEFAULT"; proceeed = true; break; case "AHED": serverName = "ghydpsde"; serviceName = "port:5167"; userName = "gisuser"; password = "gisuser"; version = "SDE.DEFAULT"; proceeed = true; break; case "RASLIB": serverName = "graspsde"; serviceName = "port:5165"; userName = "gisuser"; password = "gisuser"; version = "SDE.DEFAULT"; proceeed = true; break; default: string message = "Server prefix " + serverPrefix + " for layer " + layerFileName + " not found."; LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", message); proceeed = false; break; } //If layer file does not have a recognized prefix, i.e. RIM, stop code. if (proceeed == false) { return; } //Set new connection properties. pPropertySet.SetProperty("SERVER", serverName); pPropertySet.SetProperty("INSTANCE", serviceName); pPropertySet.SetProperty("USER", userName); pPropertySet.SetProperty("PASSWORD", password); pPropertySet.SetProperty("VERSION", version); //Set workspace name. pWorkspaceName.ConnectionProperties = pPropertySet; pWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.SdeWorkspaceFactory"; pDatasetName = pDataLayer.DataSourceName as IDatasetName; pDatasetName.WorkspaceName = pWorkspaceName; //Save layer file with new connection settings. pLayerFile.Save(); //Check if data set exists after fixing layer file. if (serverName == "graspsde") datasetExists = VerifyDataSetExists(pPropertySet, datasetName, true); else datasetExists = VerifyDataSetExists(pPropertySet, datasetName, false); //Log layer file as fixed or data set missing. if (datasetExists == true) LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", "Layer file " + layerFileName + " is fixed."); else LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", "Layer file " + layerFileName + " is fixed but data set " + datasetName + " does not exist."); } catch (Exception ex) { LogMessageToFile(Logs_Path + "updateLayerFileProperties_Log_", ex.StackTrace + "\r\n" + ex.Message); } finally { if (pPropertySet != null) { Marshal.ReleaseComObject(pPropertySet); pPropertySet = null; } if (pWorkspaceName != null) { Marshal.ReleaseComObject(pWorkspaceName); pWorkspaceName = null; } if (pDatasetName != null) { Marshal.ReleaseComObject(pDatasetName); pDatasetName = null; } }}