/*
* #%L
* org.gitools.ui.app
* %%
* Copyright (C) 2013 - 2014 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
/*
* Copyright (c) 2007-2011 by The Broad Institute of MIT and Harvard. All Rights Reserved.
*
* This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
* Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
*
* THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR
* WARRANTES OF ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, WHETHER
* OR NOT DISCOVERABLE. IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR RESPECTIVE
* TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES
* OF ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
* ECONOMIC DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER
* THE BROAD OR MIT SHALL BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT
* SHALL KNOW OF THE POSSIBILITY OF THE FOREGOING.
*/
package org.gitools.ui.app.genomespace.dm;
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* Utility class for accessing the GenomeSpace data manager web service
*
* @author Jim Robinson
* @date Aug 2, 2011
* @noinspection ALL
*/
public class DMUtils {
private static Logger log = Logger.getLogger(DMUtils.class);
private static final String UPLOAD_SERVICE = "uploadurl";
public static final String DEFAULT_DIRECTORY = "defaultdirectory";
public static final String PERSONAL_DIRECTORY = "personaldirectory";
/**
* Fetch the contents of the GenomeSpace directory.
*
* @param directoryURL
* @return
* @throws IOException
* @throws JSONException
*/
public static GSDirectoryListing getDirectoryListing(URL directoryURL) throws IOException, JSONException {
String str = HttpUtils.getInstance().getContentsAsJSON(directoryURL);
JSONTokener tk = new JSONTokener(str);
JSONObject obj = new JSONObject(tk);
JSONObject directory = (JSONObject) obj.get("directory");
String dirUrlString = directory.get("url").toString();
LinkedList<GSFileMetadata> elements = new LinkedList();
if (obj.has("contents")) {
Object c = obj.get("contents");
List<JSONObject> contents = new ArrayList();
if (c instanceof JSONObject) {
contents.add((JSONObject) c);
} else {
JSONArray tmp = (JSONArray) c;
int l = tmp.length();
for (int i = 0; i < l; i++) {
contents.add((JSONObject) tmp.get(i));
}
}
ArrayList<GSFileMetadata> dirElements = new ArrayList();
ArrayList<GSFileMetadata> fileElements = new ArrayList();
int contentsLength = contents.size();
for (int i = 0; i < contentsLength; i++) {
JSONObject o = contents.get(i);
GSFileMetadata metaData = new GSFileMetadata(o);
if (metaData.isDirectory()) {
dirElements.add(metaData);
} else {
fileElements.add(metaData);
}
}
elements.addAll(dirElements);
elements.addAll(fileElements);
}
return new GSDirectoryListing(dirUrlString, elements);
}
public static GSFileMetadata createDirectory(String putURL) throws IOException, JSONException {
JSONObject dirMeta = new JSONObject();
try {
dirMeta.put("isDirectory", true);
System.out.println(dirMeta.toString());
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
String body = "{\"isDirectory\":true}";
String response = HttpUtils.getInstance().createGenomeSpaceDirectory(new URL(putURL), body);
JSONTokener tk = new JSONTokener(response);
JSONObject obj = new JSONObject(tk);
return new GSFileMetadata(obj);
}
}