Advertisement
Guest User

grobrutchers

a guest
Jun 13th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using ESRI.ArcGIS.esriSystem;
  6. using ESRI.ArcGIS.DataSourcesGDB;
  7. using ESRI.ArcGIS.Carto;
  8. using ESRI.ArcGIS.Geodatabase;
  9. //using ESRI.ArcGIS.ADF.BaseClasses;
  10. //using ESRI.ArcGIS.ADF.CATIDs;
  11. using ESRI.ArcGIS.Framework;
  12. using ESRI.ArcGIS.ArcMapUI;
  13. using System.Windows.Forms;
  14.  
  15. namespace MetroDataSourceRepair
  16. {
  17.     public class MetroDataRepair : ESRI.ArcGIS.Desktop.AddIns.Extension
  18.     {
  19.  
  20.         public static Dictionary<string, object> SETTINGS = new Dictionary<string, object>();
  21.  
  22.         public MetroDataRepair()
  23.         {
  24.         }
  25.  
  26.         protected override void OnStartup()
  27.         {
  28.             //
  29.             // TODO: Uncomment to start listening to document events
  30.             //
  31.             // WireDocumentEvents();
  32.             ArcMap.Events.OpenDocument += Events_OpenDocument;
  33.         }
  34.  
  35.         private void Events_OpenDocument()
  36.         {
  37.             MessageBox.Show("Your MXD contains Oracle layers that will now be converted...");
  38.  
  39.         }
  40.  
  41.         private void WireDocumentEvents()
  42.         {
  43.             //
  44.             // TODO: Sample document event wiring code. Change as needed
  45.             //
  46.  
  47.             // Named event handler
  48.             ArcMap.Events.NewDocument += delegate() { ArcMap_NewDocument(); };
  49.  
  50.             // Anonymous event handler
  51.             ArcMap.Events.BeforeCloseDocument += delegate()
  52.             {
  53.                 // Return true to stop document from closing
  54.                 ESRI.ArcGIS.Framework.IMessageDialog msgBox = new ESRI.ArcGIS.Framework.MessageDialogClass();
  55.                 return msgBox.DoModal("BeforeCloseDocument Event", "Abort closing?", "Yes", "No", ArcMap.Application.hWnd);
  56.             };
  57.         }
  58.  
  59.         private bool TOCContainsOracle(IMxDocument mxDocument)
  60.         {
  61.             List<ILayer> layers_list = new List<ILayer>();
  62.             IMap map = mxDocument.FocusMap;
  63.             IEnumLayer enumLayer = map.get_Layers(null, true);
  64.  
  65.             ILayer layer = null;
  66.             layer = enumLayer.Next();
  67.  
  68.             while (layer != null)
  69.             {
  70.                 // we're looking for a feature class only
  71.                 if (layer is IFeatureLayer)
  72.                 {
  73.                     IWorkspace ws;
  74.                     IFeatureLayer featureLayer;
  75.                     try
  76.                     {
  77.                         IFeatureClass fclass = ((IFeatureLayer)layer).FeatureClass;
  78.                         featureLayer = (IFeatureLayer)layer;
  79.                         // Get the dataset and workspace of the feature class
  80.                         IDataset ds = (IDataset)fclass;
  81.                         ws = ds.Workspace;
  82.                         var foo = (ILayerGeneralProperties)featureLayer;
  83.  
  84.                         if (ws.PathName.IndexOf(".sde") > -1)
  85.                         {
  86.                             IPropertySet propertySet = ws.ConnectionProperties;
  87.  
  88.                             var server = propertySet.GetProperty("SERVER").ToString().ToUpper();
  89.                             // MessageBox.Show(dbclient.ToString());
  90.                             if (server == "SDE" || server == "DRC01" || server == "DRC02")
  91.                             {
  92.                                 return true;
  93.                             }
  94.                         }
  95.                     }
  96.                     catch (Exception ex)
  97.                     {
  98.                         return false;
  99.                     }
  100.                 }
  101.  
  102.                 layer = enumLayer.Next();
  103.             }
  104.             return false;
  105.         }
  106.  
  107.         public static void ChangeLayerDataSource(IFeatureLayer layer, IMxDocument mxDoc)
  108.         {
  109.  
  110.             IMap map = mxDoc.FocusMap;
  111.             try
  112.             {
  113.                 var target_database = "";
  114.                 IFeatureClass fclass = layer.FeatureClass;
  115.                 // Get the dataset and workspace of the feature class
  116.                 IDataset ds = (IDataset)fclass;
  117.                 var ws = ds.Workspace;
  118.  
  119.                 var source_conn_props = ws.ConnectionProperties;
  120.                 var source_user = source_conn_props.GetProperty("USER").ToString().ToUpper();
  121.                 var source_server = source_conn_props.GetProperty("SERVER").ToString().ToUpper();
  122.  
  123.                 var target_user = source_user;
  124.                 var target_pass = source_conn_props.GetProperty("PASSWORD");
  125.  
  126.                 // Which User?
  127.                 if (source_user == "HAZARD" || source_user == "RLISWRK")
  128.                 {
  129.                     MessageBox.Show("Hazard layers are no longer supported...");
  130.                     return;
  131.                 }
  132.                 else if (source_user == "GUEST")
  133.                 {
  134.                     target_user = "RLISGUEST";
  135.                 }
  136.                 else if (source_user == "PARKS")
  137.                 {
  138.                     target_user = "LAND";
  139.                     target_pass = SETTINGS["LAND_PASS"].ToString();
  140.                 }
  141.  
  142.                 //RECONFIGURE/REDIRECT 3 TIER CONNECTIONS
  143.                 if (source_server == "DRC01" && target_user != "RLISGUEST")
  144.                 {
  145.                     target_database = SETTINGS["RLISPROD"].ToString();
  146.                 }
  147.                 else
  148.                 {
  149.                     target_database = SETTINGS["RLISPUB"].ToString();
  150.                 }
  151.  
  152.                 IWorkspaceFactory iwsde = new SdeWorkspaceFactoryClass();
  153.  
  154.                 var SQLpropertySet = (IPropertySet)new PropertySetClass();
  155.                 SQLpropertySet.SetProperty("SERVER", SETTINGS["TARGET_SQL_SERVER"]);
  156.                 SQLpropertySet.SetProperty("INSTANCE", "sde:sqlserver:" + SETTINGS["TARGET_SQL_SERVER"] + "\\" + SETTINGS["TARGET_SQL_INSTANCE"]);
  157.                 SQLpropertySet.SetProperty("DBCLIENT", "sqlserver");
  158.                 SQLpropertySet.SetProperty("DB_CONNECTION_PROPERTIES", SETTINGS["TARGET_SQL_SERVER"] + "\\" + SETTINGS["TARGET_SQL_INSTANCE"]);
  159.                 SQLpropertySet.SetProperty("DATABASE", target_database);
  160.                 SQLpropertySet.SetProperty("USER", target_user);
  161.                 SQLpropertySet.SetProperty("PASSWORD", target_pass);
  162.                 SQLpropertySet.SetProperty("VERSION", SETTINGS["TARGET_SDE_VERSION"]);
  163.  
  164.                 iwsde.Open(SQLpropertySet, 0);
  165.  
  166.                 IWorkspace ws_new = iwsde.Open(SQLpropertySet, 0);
  167.  
  168.                 var pFWorkspace = (IFeatureWorkspace)ws_new;
  169.                 var fc = pFWorkspace.OpenFeatureClass(ds.Name);
  170.  
  171.                 var oldFeatureClass = layer.FeatureClass;
  172.                 layer.FeatureClass = fc;
  173.                 var t = (IMapAdmin2)map;
  174.                 t.FireChangeFeatureClass(oldFeatureClass, fc);
  175.  
  176.             }
  177.             catch (Exception exd)
  178.             {
  179.                 // If We're here it means that we have a missing data source.
  180.  
  181.                 MessageBox.Show("minor minor err:" + exd.Message);
  182.                 // MessageBox.Show("Layer ' " + layer.Name + "': \n\n" + e.Message);
  183.  
  184.             }
  185.         }
  186.  
  187.         private void CheckLayer(IFeatureLayer featureLayer, IMxDocument mxDoc)
  188.         {
  189.  
  190.             try
  191.             {
  192.                 IFeatureClass fclass = featureLayer.FeatureClass;
  193.                 // Get the dataset and workspace of the feature class
  194.                 IDataset ds = (IDataset)fclass;
  195.                 IWorkspace ws = ds.Workspace;
  196.                 var foo = (ILayerGeneralProperties)featureLayer;
  197.  
  198.                 if (ws.PathName.IndexOf(".sde") > -1)
  199.                 {
  200.  
  201.                     IPropertySet propertySet = ws.ConnectionProperties;
  202.  
  203.                     var server = propertySet.GetProperty("SERVER").ToString().ToUpper();
  204.                     MessageBox.Show(server);
  205.                     if (server == "SDE" || server == "DRC01" || server == "DRC02")
  206.                     {
  207.                         ChangeLayerDataSource(featureLayer, mxDoc);
  208.                     }
  209.                 }
  210.             }
  211.             catch (Exception ex)
  212.             {
  213.                 MessageBox.Show("Error 1: " + ex.Message);
  214.             }
  215.  
  216.         }
  217.  
  218.         private void IterateTOC(IMxDocument mxDocument)
  219.         {
  220.             List<ILayer> layers_list = new List<ILayer>();
  221.             IMap map = mxDocument.FocusMap;
  222.             IEnumLayer enumLayer = map.get_Layers(null, true);
  223.  
  224.             ILayer layer = null;
  225.             layer = enumLayer.Next();
  226.  
  227.             while (layer != null)
  228.             {
  229.                 //MessageBox.Show(layer.GetType().ToString());
  230.                 // we're looking for a feature class only
  231.  
  232.                 if (layer is IGroupLayer)
  233.                 {
  234.                     var compLayer = (ICompositeLayer)layer;
  235.  
  236.                     for (int j = 0; j < compLayer.Count; j++)
  237.                     {
  238.                         if (compLayer.Layer[j] is IFeatureLayer)
  239.                         {
  240.                             CheckLayer((IFeatureLayer)compLayer.Layer[j], mxDocument);
  241.                         }
  242.                         else if (compLayer.Layer[j] is IGroupLayer)
  243.                         {
  244.                             var compLayer1 = (ICompositeLayer)compLayer.Layer[j];
  245.  
  246.                             for (int i = 0; i < compLayer.Count; i++)
  247.                             {
  248.                                 if (compLayer1.Layer[i] is IFeatureLayer)
  249.                                 {
  250.                                     CheckLayer((IFeatureLayer)compLayer1.Layer[i], mxDocument);
  251.                                 }
  252.                             }
  253.                         }
  254.                     }
  255.                 }
  256.                 else if (layer is IFeatureLayer)
  257.                 {
  258.                     CheckLayer((IFeatureLayer)layer, mxDocument);
  259.                 }
  260.                 layer = enumLayer.Next();
  261.             }
  262.  
  263.         }
  264.  
  265.         void ArcMap_NewDocument()  
  266.         {
  267.             // TODO: Handle new document event
  268.         }
  269.  
  270.     }
  271.  
  272. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement