public JsonFolderResponse CreateFolder(CreateFolderParameters createFolderParams, string token) { //TODO: figure out how to generate the URL Uri url = new Uri(string.Format("http://www.arcgis.com/sharing/content/users/{0}/createFolder?f=json&token={1}", userCredentials.Username, token)); HttpPostRequest request = new HttpPostRequest(url); request.AddFields(createFolderParams.GetParameters()); HttpWebResponse response = request.PostData(); StreamReader sr = new StreamReader(response.GetResponseStream()); JsonFolderResponse jsonCreateFolderResponse = JsonConvert.DeserializeObject<JsonFolderResponse>(sr.ReadToEnd()); //TODO: do this error-checking better if (!jsonCreateFolderResponse.success) { throw new Exception(); } return jsonCreateFolderResponse; }
private static void QueryArcGISServer(string server, string directory, JsonFolderResponse parentDirectory) { Tools tools = new Tools(); JsonArcGISServerResponse agsResponse = tools.QueryArcGISServer(server, directory); foreach (string folder in agsResponse.folders) { Console.WriteLine(string.Format("====================\n\nCreating folder: {0}", folder)); CreateFolderParameters folderParams = new CreateFolderParameters(); folderParams.Title = folder; AGOLClient client = new AGOLClient(userCreds); JsonFolderResponse response = client.CreateFolder(folderParams, token); folderIds.Add(response.folder.id); //recursive Console.WriteLine(string.Format("Recursing {0} for services\n\n", folder)); QueryArcGISServer(server, folder, response); } foreach (JsonArcGISServerService service in agsResponse.services) { Console.WriteLine(string.Format("Indexing service {0}", service.name)); AddItemParameters addItemParams = new AddItemParameters(); //TODO: create proper lookup to do this string type = String.Empty; switch (service.type.ToLower()) { case "featureserver": type = "Feature Service"; break; case "mapserver": type = "Map Service"; break; case "imageserver": type = "Image Service"; break; case "gpserver": type = "Geoprocessing Service"; break; case "geometryserver": type = "Geometry Service"; break; case "geocodeserver": type = "Geocoding Service"; break; } if (!server.EndsWith("/")) server += "/"; addItemParams.Url = String.Format("{0}{1}/{2}", server, service.name, service.type); addItemParams.ItemInfoParameters.Type = type; addItemParams.Async = true; addItemParams.ItemInfoParameters.Title = directory == String.Empty ? service.name : service.name.Substring(directory.Length+1); addItemParams.ItemInfoParameters.Tags = "bulkindex"; AGOLClient client = new AGOLClient(userCreds); JsonAddItemResponse addItemResponse = null; if (parentDirectory == null) { addItemResponse = client.AddItem(addItemParams, token); itemIds.Add(addItemResponse.id); } else { addItemResponse = client.AddItem(addItemParams, parentDirectory.folder.id, token); } Console.WriteLine(string.Format("Completed {0}\n", addItemResponse.item)); } }