protected void uploadButtonClicked(String projectId, String name, String description, String tags, String draftAccessList, String attribution, String acquisitionTime, String maskType) { // tags must not be null due to splits below or a null reference error occurs. // empty string handles properly. if (null == tags) { tags = ""; } try { // create a new Processing Dialog Dialogs.Processing.ProgressDialog processingDialog = new Processing.ProgressDialog(); // check to see if the layer is valid // and destination is configured correctly if (isLayerValidated && projectId != null && projectId.Length > 0 && name != null && name.Length > 0 && draftAccessList != null && draftAccessList.Length > 0 && uploadType.Equals("vector") || (uploadType.Equals("raster") && attribution != null && attribution.Length > 0)) { // show the processing dialog processingDialog.Show(); // create a reference to the Google Maps Engine API MapsEngine.API.GoogleMapsEngineAPI api = new MapsEngine.API.GoogleMapsEngineAPI(ref log); // establish a reference to the running ArcMap instance ESRI.ArcGIS.ArcMapUI.IMxDocument mxDoc = (ESRI.ArcGIS.ArcMapUI.IMxDocument)ArcMap.Application.Document; // retrieve a reference to the selected layer ESRI.ArcGIS.Carto.ILayer selectedLayer = mxDoc.SelectedLayer; // create a temporary working directory System.IO.DirectoryInfo tempDir = System.IO.Directory.CreateDirectory(ext.getLocalWorkspaceDirectory() + "\\" + System.Guid.NewGuid()); // determine what type of layer is selected if (selectedLayer is ESRI.ArcGIS.Carto.IFeatureLayer) { // export a copy of the feature class to a "uploadable" Shapefile // raise a processing notification ext.publishRaiseDownloadProgressChangeEvent(false, "Extracting a copy of '" + selectedLayer.Name + "' (feature class) for data upload."); ExportLayerToShapefile(tempDir.FullName, selectedLayer.Name, selectedLayer); processingDialog.Update(); processingDialog.Focus(); // create a list of files in the temp directory List <String> filesNames = new List <String>(); for (int k = 0; k < tempDir.GetFiles().Count(); k++) { if (!tempDir.GetFiles()[k].Name.EndsWith(".lock")) { filesNames.Add(tempDir.GetFiles()[k].Name); } } // create a Google Maps Engine asset record ext.publishRaiseDownloadProgressChangeEvent(false, "Requesting a new Google Maps Engine asset be created."); MapsEngine.DataModel.gme.UploadingAsset uploadingAsset = api.createVectorTableAssetForUploading(ext.getToken(), MapsEngine.API.GoogleMapsEngineAPI.AssetType.table, projectId, name, draftAccessList, filesNames, description, tags.Split(",".ToCharArray()).ToList <String>(), "UTF-8"); // Initiate upload of file(s) ext.publishRaiseDownloadProgressChangeEvent(false, "Starting to upload files..."); api.uploadFilesToAsset(ext.getToken(), uploadingAsset.id, "tables", tempDir.GetFiles()); // launch a web browser ext.publishRaiseDownloadProgressChangeEvent(false, "Launching a web browser."); System.Diagnostics.Process.Start("https://mapsengine.google.com/admin/#RepositoryPlace:cid=" + projectId + "&v=DETAIL_INFO&aid=" + uploadingAsset.id); } else if (selectedLayer is ESRI.ArcGIS.Carto.IRasterLayer) { // export a copy of the raster to a format that can be uploaded // raise a processing notification ext.publishRaiseDownloadProgressChangeEvent(false, "Extracting a copy of '" + selectedLayer.Name + "' (raster) for data upload."); ExportLayerToUploadableRaster(tempDir.FullName, selectedLayer.Name, selectedLayer); processingDialog.Update(); processingDialog.Focus(); // create a list of files in the temp directory List <String> filesNames = new List <String>(); for (int k = 0; k < tempDir.GetFiles().Count(); k++) { if (!tempDir.GetFiles()[k].Name.EndsWith(".lock")) { filesNames.Add(tempDir.GetFiles()[k].Name); } } // create a Google Maps Engine asset record ext.publishRaiseDownloadProgressChangeEvent(false, "Requesting a new Google Maps Engine asset be created."); MapsEngine.DataModel.gme.UploadingAsset uploadingAsset = api.createRasterAssetForUploading(ext.getToken(), projectId, name, draftAccessList, attribution, // attribution filesNames, description, tags.Split(",".ToCharArray()).ToList <String>(), acquisitionTime, maskType); // Initiate upload of file(s) ext.publishRaiseDownloadProgressChangeEvent(false, "Starting to upload files..."); api.uploadFilesToAsset(ext.getToken(), uploadingAsset.id, "rasters", tempDir.GetFiles()); // launch a web browser ext.publishRaiseDownloadProgressChangeEvent(false, "Launching a web browser."); System.Diagnostics.Process.Start("https://mapsengine.google.com/admin/#RepositoryPlace:cid=" + projectId + "&v=DETAIL_INFO&aid=" + uploadingAsset.id); } // Ask the user if the temporary files should be deleted DialogResult dialogResult = MessageBox.Show( String.Format(Properties.Resources.dialog_dataUpload_tempFileCleanupMessage, tempDir.GetFiles().Count(), tempDir.FullName), ext.getAddinName() + " Temporary File Clean-up", MessageBoxButtons.YesNo); // if the user wishes to delete the temporary files, delete them if (dialogResult == DialogResult.Yes) { try { // remove the temporary layer from the ArcMap session ext.removeLayerByName((uploadType.Equals("vector") ? selectedLayer.Name : selectedLayer.Name + ".tif"), tempDir.FullName); // Delete temporary directory and containing files tempDir.Delete(true); } catch (Exception) { } } // close the processing dialog ext.publishRaiseDownloadProgressChangeEvent(true, "Finished"); processingDialog.Close(); } else { // display an error dialog to the user System.Windows.Forms.MessageBox.Show("The selected layer is invalid or the destination configuration has not been properly set."); } } catch (System.Exception ex) { // Ops. System.Windows.Forms.MessageBox.Show("An error occured. " + ex.Message); } // close the dialog this.Close(); }