Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.IO;
- using ESRI.ArcGIS.esriSystem;
- using ESRI.ArcGIS.DataSourcesGDB;
- using ESRI.ArcGIS.Carto;
- using ESRI.ArcGIS.Geodatabase;
- //using ESRI.ArcGIS.ADF.BaseClasses;
- //using ESRI.ArcGIS.ADF.CATIDs;
- using ESRI.ArcGIS.Framework;
- using ESRI.ArcGIS.ArcMapUI;
- using System.Windows.Forms;
- namespace MetroDataSourceRepair
- {
- public class MetroDataRepair : ESRI.ArcGIS.Desktop.AddIns.Extension
- {
- public static Dictionary<string, object> SETTINGS = new Dictionary<string, object>();
- public MetroDataRepair()
- {
- }
- protected override void OnStartup()
- {
- //
- // TODO: Uncomment to start listening to document events
- //
- // WireDocumentEvents();
- ArcMap.Events.OpenDocument += Events_OpenDocument;
- }
- private void Events_OpenDocument()
- {
- MessageBox.Show("Your MXD contains Oracle layers that will now be converted...");
- }
- private void WireDocumentEvents()
- {
- //
- // TODO: Sample document event wiring code. Change as needed
- //
- // Named event handler
- ArcMap.Events.NewDocument += delegate() { ArcMap_NewDocument(); };
- // Anonymous event handler
- ArcMap.Events.BeforeCloseDocument += delegate()
- {
- // Return true to stop document from closing
- ESRI.ArcGIS.Framework.IMessageDialog msgBox = new ESRI.ArcGIS.Framework.MessageDialogClass();
- return msgBox.DoModal("BeforeCloseDocument Event", "Abort closing?", "Yes", "No", ArcMap.Application.hWnd);
- };
- }
- private bool TOCContainsOracle(IMxDocument mxDocument)
- {
- List<ILayer> layers_list = new List<ILayer>();
- IMap map = mxDocument.FocusMap;
- IEnumLayer enumLayer = map.get_Layers(null, true);
- ILayer layer = null;
- layer = enumLayer.Next();
- while (layer != null)
- {
- // we're looking for a feature class only
- if (layer is IFeatureLayer)
- {
- IWorkspace ws;
- IFeatureLayer featureLayer;
- try
- {
- IFeatureClass fclass = ((IFeatureLayer)layer).FeatureClass;
- featureLayer = (IFeatureLayer)layer;
- // Get the dataset and workspace of the feature class
- IDataset ds = (IDataset)fclass;
- ws = ds.Workspace;
- var foo = (ILayerGeneralProperties)featureLayer;
- if (ws.PathName.IndexOf(".sde") > -1)
- {
- IPropertySet propertySet = ws.ConnectionProperties;
- var server = propertySet.GetProperty("SERVER").ToString().ToUpper();
- // MessageBox.Show(dbclient.ToString());
- if (server == "SDE" || server == "DRC01" || server == "DRC02")
- {
- return true;
- }
- }
- }
- catch (Exception ex)
- {
- return false;
- }
- }
- layer = enumLayer.Next();
- }
- return false;
- }
- public static void ChangeLayerDataSource(IFeatureLayer layer, IMxDocument mxDoc)
- {
- IMap map = mxDoc.FocusMap;
- try
- {
- var target_database = "";
- IFeatureClass fclass = layer.FeatureClass;
- // Get the dataset and workspace of the feature class
- IDataset ds = (IDataset)fclass;
- var ws = ds.Workspace;
- var source_conn_props = ws.ConnectionProperties;
- var source_user = source_conn_props.GetProperty("USER").ToString().ToUpper();
- var source_server = source_conn_props.GetProperty("SERVER").ToString().ToUpper();
- var target_user = source_user;
- var target_pass = source_conn_props.GetProperty("PASSWORD");
- // Which User?
- if (source_user == "HAZARD" || source_user == "RLISWRK")
- {
- MessageBox.Show("Hazard layers are no longer supported...");
- return;
- }
- else if (source_user == "GUEST")
- {
- target_user = "RLISGUEST";
- }
- else if (source_user == "PARKS")
- {
- target_user = "LAND";
- target_pass = SETTINGS["LAND_PASS"].ToString();
- }
- //RECONFIGURE/REDIRECT 3 TIER CONNECTIONS
- if (source_server == "DRC01" && target_user != "RLISGUEST")
- {
- target_database = SETTINGS["RLISPROD"].ToString();
- }
- else
- {
- target_database = SETTINGS["RLISPUB"].ToString();
- }
- IWorkspaceFactory iwsde = new SdeWorkspaceFactoryClass();
- var SQLpropertySet = (IPropertySet)new PropertySetClass();
- SQLpropertySet.SetProperty("SERVER", SETTINGS["TARGET_SQL_SERVER"]);
- SQLpropertySet.SetProperty("INSTANCE", "sde:sqlserver:" + SETTINGS["TARGET_SQL_SERVER"] + "\\" + SETTINGS["TARGET_SQL_INSTANCE"]);
- SQLpropertySet.SetProperty("DBCLIENT", "sqlserver");
- SQLpropertySet.SetProperty("DB_CONNECTION_PROPERTIES", SETTINGS["TARGET_SQL_SERVER"] + "\\" + SETTINGS["TARGET_SQL_INSTANCE"]);
- SQLpropertySet.SetProperty("DATABASE", target_database);
- SQLpropertySet.SetProperty("USER", target_user);
- SQLpropertySet.SetProperty("PASSWORD", target_pass);
- SQLpropertySet.SetProperty("VERSION", SETTINGS["TARGET_SDE_VERSION"]);
- iwsde.Open(SQLpropertySet, 0);
- IWorkspace ws_new = iwsde.Open(SQLpropertySet, 0);
- var pFWorkspace = (IFeatureWorkspace)ws_new;
- var fc = pFWorkspace.OpenFeatureClass(ds.Name);
- var oldFeatureClass = layer.FeatureClass;
- layer.FeatureClass = fc;
- var t = (IMapAdmin2)map;
- t.FireChangeFeatureClass(oldFeatureClass, fc);
- }
- catch (Exception exd)
- {
- // If We're here it means that we have a missing data source.
- MessageBox.Show("minor minor err:" + exd.Message);
- // MessageBox.Show("Layer ' " + layer.Name + "': \n\n" + e.Message);
- }
- }
- private void CheckLayer(IFeatureLayer featureLayer, IMxDocument mxDoc)
- {
- try
- {
- IFeatureClass fclass = featureLayer.FeatureClass;
- // Get the dataset and workspace of the feature class
- IDataset ds = (IDataset)fclass;
- IWorkspace ws = ds.Workspace;
- var foo = (ILayerGeneralProperties)featureLayer;
- if (ws.PathName.IndexOf(".sde") > -1)
- {
- IPropertySet propertySet = ws.ConnectionProperties;
- var server = propertySet.GetProperty("SERVER").ToString().ToUpper();
- MessageBox.Show(server);
- if (server == "SDE" || server == "DRC01" || server == "DRC02")
- {
- ChangeLayerDataSource(featureLayer, mxDoc);
- }
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show("Error 1: " + ex.Message);
- }
- }
- private void IterateTOC(IMxDocument mxDocument)
- {
- List<ILayer> layers_list = new List<ILayer>();
- IMap map = mxDocument.FocusMap;
- IEnumLayer enumLayer = map.get_Layers(null, true);
- ILayer layer = null;
- layer = enumLayer.Next();
- while (layer != null)
- {
- //MessageBox.Show(layer.GetType().ToString());
- // we're looking for a feature class only
- if (layer is IGroupLayer)
- {
- var compLayer = (ICompositeLayer)layer;
- for (int j = 0; j < compLayer.Count; j++)
- {
- if (compLayer.Layer[j] is IFeatureLayer)
- {
- CheckLayer((IFeatureLayer)compLayer.Layer[j], mxDocument);
- }
- else if (compLayer.Layer[j] is IGroupLayer)
- {
- var compLayer1 = (ICompositeLayer)compLayer.Layer[j];
- for (int i = 0; i < compLayer.Count; i++)
- {
- if (compLayer1.Layer[i] is IFeatureLayer)
- {
- CheckLayer((IFeatureLayer)compLayer1.Layer[i], mxDocument);
- }
- }
- }
- }
- }
- else if (layer is IFeatureLayer)
- {
- CheckLayer((IFeatureLayer)layer, mxDocument);
- }
- layer = enumLayer.Next();
- }
- }
- void ArcMap_NewDocument()
- {
- // TODO: Handle new document event
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement