LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  August 2015

HPS-SVN August 2015

Subject:

r3475 - in /java/trunk/datacat-client/src: main/java/org/hps/datacat/client/ test/java/org/hps/datacat/client/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Mon, 31 Aug 2015 22:38:15 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (948 lines)

Author: [log in to unmask]
Date: Mon Aug 31 15:38:12 2015
New Revision: 3475

Log:
Allow metadata to be given when adding datasets; implement DatasetMetadata; add doc.

Added:
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadataImpl.java
    java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatClientTest.java
      - copied, changed from r3470, java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatTest.java
Removed:
    java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatTest.java
Modified:
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClient.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClientImpl.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/Dataset.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetImpl.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadata.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetSite.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetUtilities.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/HttpUtilities.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/JSONUtilities.java
    java/trunk/datacat-client/src/main/java/org/hps/datacat/client/ScanStatus.java

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClient.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClient.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClient.java	Mon Aug 31 15:38:12 2015
@@ -2,6 +2,7 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Interface to the SLAC SRS datacat system via HTTP/REST calls.
@@ -19,9 +20,16 @@
      * @param site the site of the file 
      * @param fileFormat the file format
      * @param name the name of the dataset
+     * @param metadata metadata to assign to the dataset
      * @return the HTTP status code from the request
      */
-    int addDataset(String folder, DatasetDataType dataType, String resource, DatasetSite site, DatasetFileFormat fileFormat, String name);
+    int addDataset(String folder, 
+            DatasetDataType dataType,
+            String resource,
+            DatasetSite site,
+            DatasetFileFormat fileFormat,
+            String name,
+            Map<String, Object> metadata);
             
     /**
      * Create a folder in the data catalog.
@@ -70,10 +78,10 @@
      * @param query the query to execute
      * @return the HTTP status code from the request
      */
-    List<Dataset> findDatasets(String folder, String query);
+    List<Dataset> findDatasets(String folder, String query, Set<String> showMetadata);
     
     // TODO: method to get dataset from path
-    // to get all metadata need site
+    // to get all metadata need the site in query
     // http://localhost:8080/datacat-v0.4-SNAPSHOT/r/path.json/HPS/derp/herp01;s=SLAC 
     // use HTTP GET 
     // Dataset getDataSet(String path);

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClientImpl.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClientImpl.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatacatClientImpl.java	Mon Aug 31 15:38:12 2015
@@ -8,17 +8,39 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.json.JSONObject;
+import org.lcsim.util.log.LogUtil;
+import org.lcsim.util.log.MessageOnlyLogFormatter;
 
 /**
+ * Implementation of {@link DatacatClient} interface for working with SRS datacat REST API.
  * 
  * @author Jeremy McCormick, SLAC
  */
 final class DatacatClientImpl implements DatacatClient {
-
+    
+    /**
+     * Setup class logging.
+     */
+    private static Logger LOGGER = LogUtil.create(DatacatClientImpl.class, new MessageOnlyLogFormatter(), Level.ALL);
+
+    /**
+     * The base URL of the datacat server.
+     */
     private URL url;
+    
+    /**
+     * The site (SLAC or JLAB).
+     */
     private DatasetSite site;
+    
+    /**
+     * The root directory (e.g. should be 'HPS').
+     */
     private String rootDir;
     
     /**
@@ -49,23 +71,47 @@
             throw new IllegalArgumentException("The root dir argument is null.");
         }
         this.rootDir = rootDir;
-        System.out.println("url: " + url);
-        System.out.println("site: " + site);
-        System.out.println("rootDir: " + rootDir);
-    }
-    
+        LOGGER.config("url: "  + url);
+        LOGGER.config("site: " + site);
+        LOGGER.config("rootDir: " + rootDir);
+    }
+    
+    /**
+     * Remove a folder from the catalog.
+     * <p>
+     * It must be empty or an error will occur. 
+     * 
+     * @param folder the folder path
+     * @return the HHTP status code from the request
+     */
     @Override
     public int removeFolder(String folder) {
         String fullUrl = url.toString() + "/r/folders.json/" + this.rootDir + folder;
+        LOGGER.info("removing folder: " + fullUrl);
         return HttpUtilities.doDelete(fullUrl);
     }
 
+    /**
+     * Delete a dataset from the catalog.
+     * <p>
+     * This has no affect on the underlying resource (file).
+     * 
+     * @param path the path of the dataset
+     * @return the HTTP status code from the reqest
+     */
     @Override
     public int deleteDataset(String path) {
-        String fullUrl = url.toString() + "/r/datasets.json/" + this.rootDir + path;
-        return HttpUtilities.doDelete(fullUrl);
-    }
-        
+        String urlLocation = url.toString() + "/r/datasets.json/" + this.rootDir + path;
+        LOGGER.info("deleting dataset: " + urlLocation);
+        return HttpUtilities.doDelete(urlLocation);
+    }
+     
+    /**
+     * Create a folder in the data catalog.
+     * 
+     * @param folder the folder's path
+     * @return the HTTP status code from the request
+     */
     @Override
     public int makeFolder(String path) {
         Map<String, Object> parameters = new HashMap<String, Object>();
@@ -73,28 +119,47 @@
         String name = new File(path).getName();       
         parameters.put("name", name);
         parameters.put("_type", "folder");
-        JSONObject object = JSONUtilities.createJSONFromMap(parameters);
-        return HttpUtilities.doPost(url + "/r/folders.json/" + this.rootDir, object.toString());
-    }
-    
+        JSONObject object = JSONUtilities.createJSONFromMap(parameters);        
+        String urlLocation = url + "/r/folders.json/" + this.rootDir;
+        LOGGER.info("making folder: " + urlLocation);
+        LOGGER.info("folder JSON: " + object.toString());
+        return HttpUtilities.doPost(urlLocation, object.toString());
+    }
+    
+    /**
+     * Add metadata to an existing dataset.
+     * 
+     * @param folder the folder
+     * @param datasetName the name of the dataset
+     * @param metaData the map of metadata where values can be <code>String</code>, <code>Integer</code> or <code>Float</code>
+     * @return the HTTP status code from the request
+     */
     @Override
     public int addMetadata(String folder, String name, Map<String, Object> metaData) {
-        JSONObject object = JSONUtilities.createJSONMetaData(metaData);
+        JSONObject object = new JSONObject();
+        object.put("versionMetadata", JSONUtilities.createJSONMetadataArray(metaData));
         String patchUrl = this.url.toString() + "/r/datasets.json/" + this.rootDir + "/" + folder + "/" + name + ";v=current;s=" + this.site;
-                
+        LOGGER.info("addMetadata: " + patchUrl);
         return HttpUtilities.doPatch(patchUrl, object.toString());
     }      
 
-    // example
-    // http://localhost:8080/datacat-v0.4-SNAPSHOT/r/search.json/HPS/derp?filter=run+%3E+1000
-    @Override
-    public List<Dataset> findDatasets(String directory, String query) {
+    /**
+     * Find datasets in the catalog.
+     * <p>
+     * See <a href="http://docs.datacatalog.apiary.io/#search">Search Doc</a> for more details.
+     * 
+     * @param folder the folder path
+     * @param query the query to execute
+     * @return the HTTP status code from the request
+     */
+    @Override
+    public List<Dataset> findDatasets(String directory, String query, Set<String> showMetadata) {
         
-        String fullUrl = this.url.toString() + "/r/search.json/" + this.rootDir + "/";
+        String urlLocation = this.url.toString() + "/r/search.json/" + this.rootDir + "/";
         if (directory != null) {
-            fullUrl += directory;
-        }
-        fullUrl += ";s=" + this.site.name();
+            urlLocation += directory;
+        }
+        urlLocation += ";s=" + this.site.name() + "?";        
         if (query != null) {
             String encoded = null;        
             try {
@@ -102,28 +167,51 @@
             } catch (UnsupportedEncodingException e) {
                 throw new RuntimeException(e);
             }
-            fullUrl += "?filter=" + encoded;
-        }
-        System.out.println("query: " + fullUrl);
+            urlLocation += "filter=" + encoded;
+        }
+        if (showMetadata != null) {
+            for (String metadataField : showMetadata) {
+                urlLocation += "&show=" + metadataField;
+            }
+        }
+        LOGGER.info("findDatasets: " + urlLocation);
         StringBuffer outputBuffer = new StringBuffer();
-        int response = HttpUtilities.doGet(fullUrl, outputBuffer);
-        System.out.println("response: " + response);
-        System.out.println("output: " + outputBuffer.toString());
+        int response = HttpUtilities.doGet(urlLocation, outputBuffer);
+        if (response >= 400) {
+            throw new RuntimeException("HTTP GET failed with code: " + response);
+        }
         
         // Build and return dataset list
         JSONObject searchResults = new JSONObject(outputBuffer.toString());
+        LOGGER.info("returning search results: " + searchResults.toString());
         return DatasetUtilities.getDatasetsFromSearch(searchResults);
     }    
-    
-    @Override
-    public int addDataset(String folder, DatasetDataType dataType, String resource, DatasetSite site, DatasetFileFormat fileFormat, String name) {
+
+    /**
+     * Add a dataset to the data catalog.
+     * 
+     * @param folder the folder which must already exist
+     * @param dataType the data type
+     * @param resource the resource (path)
+     * @param site the site of the file 
+     * @param fileFormat the file format
+     * @param name the name of the dataset
+     * @param metadata metadata to assign to the dataset
+     * @return the HTTP status code from the request
+     */
+    @Override
+    public int addDataset(String folder, DatasetDataType dataType, String resource, DatasetSite site, 
+            DatasetFileFormat fileFormat, String name, Map<String, Object> metadata) {
         Map<String, Object> parameters = new HashMap<String, Object>();
         parameters.put("dataType", dataType.toString());
         parameters.put("resource", resource);
         parameters.put("site", DatasetSite.SLAC.name());
         parameters.put("fileFormat", fileFormat.toString());        
-        parameters.put("name", name);           
-        JSONObject dataset = JSONUtilities.createJSONDataset(parameters);
-        return HttpUtilities.doPost(url + "/r/datasets.json/" + this.rootDir + "/" + folder, dataset.toString());
+        parameters.put("name", name);
+        JSONObject jsonDataset = JSONUtilities.createJSONDataset(parameters, metadata);
+        String urlLocation = url + "/r/datasets.json/" + this.rootDir + "/" + folder;
+        LOGGER.info("addDataset: " + urlLocation);
+        LOGGER.info("dataset JSON: " + jsonDataset.toString());
+        return HttpUtilities.doPost(urlLocation, jsonDataset.toString());
     }
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/Dataset.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/Dataset.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/Dataset.java	Mon Aug 31 15:38:12 2015
@@ -10,17 +10,52 @@
  */
 public interface Dataset {
     
+    /**
+     * Get the name of the dataset without the path component e.g. "dataset01".
+     * 
+     * @return the name of the dataset
+     */
     String getName();
     
+    /**
+     * Get the path of the dataset e.g. "/HPS/folder/dataset01".
+     * 
+     * @return the path of the dataset
+     */
     String getPath();
     
+    /**
+     * Get the dataset locations.
+     * 
+     * @return the dataset locations
+     */
     List<DatasetLocation> getLocations();
         
+    /**
+     * Get the file format e.g. EVIO, LCIO, etc.
+     * 
+     * @return the dataset file format
+     */
     DatasetFileFormat getFileFormat();
     
+    /**
+     * Get the data type e.g. RAW, RECON, etc.
+     * 
+     * @return the data type
+     */
     DatasetDataType getDataType();
     
+    /**
+     * Get the creation date.
+     * 
+     * @return the creation date
+     */
     Date getCreated();
     
-    //DatasetMetadata getMetadata();
+    /**
+     * Get the dataset's metadata.
+     * 
+     * @return the dataset's metadata
+     */
+    DatasetMetadata getMetadata();
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetImpl.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetImpl.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetImpl.java	Mon Aug 31 15:38:12 2015
@@ -23,6 +23,7 @@
     private DatasetFileFormat fileFormat;
     private List<DatasetLocation> locations = new ArrayList<DatasetLocation>();
     private Date created;
+    private DatasetMetadata metadata;
     
     private static final SimpleDateFormat DATE_PARSER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
     
@@ -46,7 +47,10 @@
         JSONArray locationsArray = jsonObject.getJSONArray("locations");
         for (int i = 0; i < locationsArray.length(); i++) {
             this.locations.add(new DatasetLocationImpl(locationsArray.getJSONObject(i)));
-        }        
+        }
+        if (jsonObject.has("metadata")) {
+            metadata = new DatasetMetadataImpl(jsonObject.getJSONArray("metadata"));
+        }
     }
     
     @Override
@@ -78,4 +82,13 @@
     public Date getCreated() {
         return this.created;
     }
+    
+    @Override
+    public DatasetMetadata getMetadata() {
+        return this.metadata;
+    }
+    
+    public String toString() {
+        return "Dataset { name: " + name + ", path:" + path + ", " + "dataType: " + dataType.name() + "fileFormat: " + fileFormat.name() + ", created: " + created + " }"; 
+    }    
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadata.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadata.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadata.java	Mon Aug 31 15:38:12 2015
@@ -2,16 +2,41 @@
 
 
 /**
+ * Dataset metadata which is keys and values that are double, integer or string.
  * 
  * @author Jeremy McCormick, SLAC
  */
 public interface DatasetMetadata {
-        
-    float getFloat(String key);
     
-    int getInt(String key);
+    /**
+     * Get a double value.
+     * 
+     * @param key the key name
+     * @return the double value
+     */
+    double getDouble(String key);
+       
+    /**
+     * Get an integer value. 
+     * 
+     * @param key the key name
+     * @return the integer value
+     */
+    int getInteger(String key);
     
+    /**
+     * Get a string value.
+     * 
+     * @param key the key name
+     * @return the 
+     */
     String getString(String key);
     
+    /**
+     * Return <code>true</code> if key exists in metadata.
+     * 
+     * @param key the key name
+     * @return <code>true</code> if key exists in metadata
+     */
     boolean hasKey(String key);
 }

Added: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadataImpl.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadataImpl.java	(added)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetMetadataImpl.java	Mon Aug 31 15:38:12 2015
@@ -0,0 +1,115 @@
+package org.hps.datacat.client;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+/**
+ * Implementation of {@link DatasetMetadata).
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
+final class DatasetMetadataImpl implements DatasetMetadata {
+
+    /**
+     * The mapping of keys to values.
+     */
+    private final Map<String, Object> metadataMap = new HashMap<String, Object>();
+    
+    /**
+     * Create a new metadata object.
+     * 
+     * @param jsonArray the JSON array with the metadata
+     */
+    DatasetMetadataImpl(JSONArray jsonArray) {
+        parse(jsonArray);
+    }
+    
+    /**
+     * Parse metadata from JSON array.
+     * 
+     * @param jsonArray the JSON array
+     */
+    private void parse(JSONArray jsonArray) {
+        for (int i = 0; i < jsonArray.length(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            String type = jsonObject.getString("type");
+            Object value = null;
+            if (type.equals("string")) {
+                value = jsonObject.getString("value");
+            } else if (type.equals("decimal")) {
+                value = jsonObject.getDouble("value");
+            } else if (type.equals("integer")) {
+                value = jsonObject.getInt("value");
+            } else {
+                throw new IllegalArgumentException("Unknown type: " + type);
+            }
+            String key = jsonObject.getString("key");
+            metadataMap.put(key, value);
+        }
+    }
+    
+    /**
+     * Get a double value.
+     * 
+     * @param key the key name
+     * @return the double value
+     */
+    @Override
+    public double getDouble(String key) {
+        return Double.class.cast(metadataMap.get(key));
+    }
+
+    /**
+     * Get an integer value. 
+     * 
+     * @param key the key name
+     * @return the integer value
+     */
+    @Override
+    public int getInteger(String key) {
+        return Integer.class.cast(metadataMap.get(key));
+    }
+
+    /**
+     * Get a string value.
+     * 
+     * @param key the key name
+     * @return the 
+     */
+    @Override
+    public String getString(String key) {
+        return String.class.cast(metadataMap.get(key));
+    }
+
+    /**
+     * Return <code>true</code> if key exists in metadata.
+     * 
+     * @param key the key name
+     * @return <code>true</code> if key exists in metadata
+     */
+    @Override
+    public boolean hasKey(String key) {
+        return metadataMap.containsKey(key);
+    }
+    
+    /**
+     * Convert this object to a string.
+     * 
+     * @return this object converted to a string
+     */
+    @Override
+    public String toString() {
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append(" DatasetMetadata { ");
+        for (Entry<String, Object> entry : metadataMap.entrySet()) {
+            stringBuffer.append(entry.getKey() + ": " + entry.getValue() + ", ");
+        }
+        stringBuffer.setLength(stringBuffer.length() - 2);
+        stringBuffer.append(" }");
+        return stringBuffer.toString();
+    }
+}

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetSite.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetSite.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetSite.java	Mon Aug 31 15:38:12 2015
@@ -6,6 +6,12 @@
  *
  */
 public enum DatasetSite {
+    /** 
+     * SLAC site. 
+     */
     SLAC,
+    /** 
+     * JLAB site. 
+     */
     JLAB;
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetUtilities.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetUtilities.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/DatasetUtilities.java	Mon Aug 31 15:38:12 2015
@@ -7,11 +7,18 @@
 import org.json.JSONObject;
 
 /**
+ * Dataset utilities.
  * 
  * @author Jeremy McCormick, SLAC
  */
 final class DatasetUtilities {
     
+    /**
+     * Create {@link Dataset} objects from JSON search results.
+     * 
+     * @param searchResults the JSON search results
+     * @return the list of {@link Dataset} objects
+     */
     static List<Dataset> getDatasetsFromSearch(JSONObject searchResults) {
         List<Dataset> datasets = new ArrayList<Dataset>();
         JSONArray resultsArray = searchResults.getJSONArray("results");
@@ -20,4 +27,11 @@
         }
         return datasets;
     }
+    
+    /**
+     * No class instantiation.
+     */
+    private DatasetUtilities() {
+        throw new RuntimeException("Do not instantiate this class.");
+    }
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/HttpUtilities.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/HttpUtilities.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/HttpUtilities.java	Mon Aug 31 15:38:12 2015
@@ -24,6 +24,13 @@
  */
 final class HttpUtilities {
 
+    /**
+     * Do an HTTP POST.
+     * 
+     * @param urlLocation the URL location
+     * @param data the data to stream to the server
+     * @return the HTTP response code
+     */
     static int doPost(String urlLocation, String data) {
         int responseCode = 0;
         try {
@@ -48,11 +55,17 @@
         return responseCode;
     }
     
+    /**
+     * Do an HTTP get and return the output from the server in a <code>StringBuffer</code>.
+     * 
+     * @param urlLocation the URL location
+     * @param stringBuffer the string buffer with the server output
+     * @return the HTTP response
+     */
     static int doGet(String urlLocation, StringBuffer stringBuffer) {
         HttpURLConnection connection = null;
         int response = 0;
         try {
-            //System.out.println("doGet: " + urlLocation);
             connection = (HttpURLConnection) new URL(urlLocation).openConnection();
             connection.setRequestMethod("GET");
             connection.setRequestProperty("Content-Type", "application/json");
@@ -72,7 +85,13 @@
         return response;
     }    
     
-    
+    /**
+     * Do an HTTP patch.
+     * 
+     * @param urlLocation the URL location
+     * @param data the data to stream to the server
+     * @return the HTTP response code
+     */
     static int doPatch(String urlLocation, String data) {
         int responseCode = 0;        
         CloseableHttpClient httpClient = HttpClients.createDefault();
@@ -87,12 +106,12 @@
                                     ContentType.APPLICATION_JSON);
             httpPatch.setEntity(entity);            
             CloseableHttpResponse response = httpClient.execute(httpPatch);
-            System.out.println("status: " + response.getStatusLine());
             try {
                 EntityUtils.consume(response.getEntity());
             } finally {
                 response.close();
-            }            
+            }
+            responseCode = response.getStatusLine().getStatusCode();
         } catch (URISyntaxException e) {
             throw new IllegalArgumentException(e);
         } catch(IOException e) {
@@ -107,12 +126,16 @@
         return responseCode;
     }    
     
-    
-    static int doDelete(String fullUrl) {
+    /**
+     * Do an HTTP DELETE.
+     * 
+     * @param urlLocation the URL location
+     * @return the HTTP response code
+     */
+    static int doDelete(String urlLocation) {
         int responseCode = 0;
         try {
-            URL url = new URL(fullUrl);
-            System.out.println("deleting url: " + fullUrl);
+            URL url = new URL(urlLocation);
             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
             connection.setDoOutput(true);
             connection.setRequestMethod("DELETE");
@@ -124,6 +147,7 @@
         return responseCode;
     }
     
+    /*
     static URL createURL(String... chunks) {
         if (chunks.length == 0) {
             throw new IllegalArgumentException("No arguments provided.");
@@ -138,4 +162,5 @@
             throw new IllegalArgumentException("Bad URL string: " + urlString);
         }
     }
+    */
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/JSONUtilities.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/JSONUtilities.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/JSONUtilities.java	Mon Aug 31 15:38:12 2015
@@ -6,12 +6,20 @@
 import org.json.JSONObject;
 
 /**
- * 
+ * JSON datacat utilities.
+ *  
  * @author Jeremy McCormick, SLAC
  */
 final class JSONUtilities {
     
-    static JSONObject createJSONDataset(Map<String, Object> parameters) {
+    /**
+     * Create a full JSON dataset object.
+     * 
+     * @param parameters the parameters of the object as a map
+     * @param metadata the metadata of the object as a map
+     * @return the created JSON dataset object
+     */
+    static JSONObject createJSONDataset(Map<String, Object> parameters, Map<String, Object> metadata) {
         JSONObject dataset = new JSONObject();
         dataset.put("dataType", parameters.get("dataType"));
         dataset.put("versionId", "new");
@@ -23,9 +31,19 @@
         dataset.put("locations", array);                
         dataset.put("fileFormat", parameters.get("fileFormat"));
         dataset.put("name", parameters.get("name"));
+        if (metadata != null) {
+            JSONArray jsonMetadata = createJSONMetadataArray(metadata);
+            dataset.put("versionMetadata", jsonMetadata);
+        }
         return dataset;
     }
     
+    /**
+     * Create a flat JSON object from a map of keys and values.
+     * 
+     * @param parameters the parameter map
+     * @return the JSON object
+     */
     static JSONObject createJSONFromMap(Map<String, Object> parameters) {
         JSONObject object = new JSONObject();
         for (Map.Entry<String, Object> entry : parameters.entrySet()) {
@@ -34,15 +52,31 @@
         return object;
     }
     
-    static JSONObject createJSONMetaData(Map<String, Object> metaData) {
-        JSONObject object = new JSONObject();
+    /**
+     * Create a JSON array of metadata from the map of keys and values.
+     * 
+     * @param metadata the metadata map 
+     * @return the JSON array
+     */
+    static JSONArray createJSONMetadataArray(Map<String, Object> metadata) {
         JSONArray array = new JSONArray();
-        for (Map.Entry<String, Object> entry : metaData.entrySet()) {
-            JSONObject value = new JSONObject();
-            value.put(entry.getKey(), entry.getValue());
-            array.put(value);
+        for (Map.Entry<String, Object> entry : metadata.entrySet()) {
+            JSONObject metadataObject = new JSONObject();
+            metadataObject.put(entry.getKey(), entry.getValue());
+            metadataObject.put("key", entry.getKey());
+            Object rawValue = entry.getValue();
+            if (rawValue instanceof String) {
+                metadataObject.put("type", "string");
+            } else if (rawValue instanceof Integer | rawValue instanceof Long) {
+                metadataObject.put("type", "integer");
+            } else if (rawValue instanceof Float | rawValue instanceof Double) {
+                metadataObject.put("type", "decimal");
+            } else {
+                throw new IllegalArgumentException("Do not know how to handle type: " + rawValue.getClass().getName());
+            }
+            metadataObject.put("value", entry.getValue());                      
+            array.put(metadataObject);
         }                
-        object.put("versionMetadata", array);
-        return object;
+        return array;        
     }
 }

Modified: java/trunk/datacat-client/src/main/java/org/hps/datacat/client/ScanStatus.java
 =============================================================================
--- java/trunk/datacat-client/src/main/java/org/hps/datacat/client/ScanStatus.java	(original)
+++ java/trunk/datacat-client/src/main/java/org/hps/datacat/client/ScanStatus.java	Mon Aug 31 15:38:12 2015
@@ -1,8 +1,21 @@
 package org.hps.datacat.client;
 
-
+/**
+ * The scan status of {@link Dataset}.
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
 public enum ScanStatus {
+    /**
+     * Scan status is not known.
+     */
     UNKNOWN,
+    /**
+     * Dataset has not been scanned.
+     */
     UNSCANNED,
+    /**
+     * Dataset has been scanned.
+     */
     OK
 }

Copied: java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatClientTest.java (from r3470, java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatTest.java)
 =============================================================================
--- java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatTest.java	(original)
+++ java/trunk/datacat-client/src/test/java/org/hps/datacat/client/DatacatClientTest.java	Mon Aug 31 15:38:12 2015
@@ -1,19 +1,19 @@
 package org.hps.datacat.client;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-
-import org.hps.datacat.client.DatacatClient;
-import org.hps.datacat.client.DatacatClientImpl;
-import org.hps.datacat.client.Dataset;
-import org.hps.datacat.client.DatasetDataType;
-import org.hps.datacat.client.DatasetFileFormat;
-import org.hps.datacat.client.DatasetSite;
+import java.util.Set;
 
 import junit.framework.TestCase;
 
-public class DatacatTest extends TestCase {
+/**
+ * 
+ * @author Jeremy McCormick, SLAC
+ *
+ */
+public class DatacatClientTest extends TestCase {
     
     private static final String DATASET_NAME = "dummyDataset";
     private static final String FOLDER = "dummyFolder";
@@ -21,31 +21,27 @@
     
     public void testDatacat() throws Exception {
 
-        // Datacat client with default parameters
+        // Datacat client with default parameters.
         DatacatClient client = new DatacatClientImpl();
         
         // Stores response from HTTP operations
         int response = -1;
         
-        // Create dummy folder
+        // Create dummy folder.
         response = client.makeFolder("dummyFolder");
-        System.out.println("makeFolder: " + response);
-        System.out.println();
                         
-        // Add dummy dataset
-        // TODO: should add some meta data here too
-        response = client.addDataset(FOLDER, DatasetDataType.TEST, RESOURCE, DatasetSite.SLAC, DatasetFileFormat.TEST, DATASET_NAME);
-        System.out.println("addDataset: " + response);
-        System.out.println();
+        // Add dummy dataset.
+        Map<String, Object> dsMetadata = new HashMap<String, Object>();
+        dsMetadata.put("testInt", 1);
+        dsMetadata.put("testFloat", 1.1f);
+        dsMetadata.put("testDouble", 1.2d);
+        dsMetadata.put("testString", "herpderp");
+        response = client.addDataset(FOLDER, DatasetDataType.TEST, RESOURCE, DatasetSite.SLAC, DatasetFileFormat.TEST, DATASET_NAME, dsMetadata);
         
-        // Patch the dataset with some meta data
+        // Patch the dataset with some meta data.
         Map<String, Object> metaData = new HashMap<String, Object>();
-        //metaData.put("someStringVar", "aStringValue");
-        metaData.put("someIntVar", 1234);
-        //metaData.put("someFloatVar", 1.234);
+        metaData.put("testInt2", 1234);
         response = client.addMetadata(FOLDER, DATASET_NAME, metaData);
-        System.out.println("patchDataset: " + response);
-        System.out.println();
         
         // TODO: check that folder exists
         
@@ -53,20 +49,26 @@
         
         // TODO: get the full folder info
                 
-        // TODO: get the full dataset info       
+        // TODO: get the full dataset info
                        
-        // Find the dataset with a simple query
-        List<Dataset> datasets = client.findDatasets(FOLDER, "someIntVar == 1234");
+        // Find the dataset with a simple query.
+        Set<String> metadataFields = new HashSet<String>();
+        metadataFields.add("testInt");
+        metadataFields.add("testFloat");        
+        metadataFields.add("testDouble");
+        metadataFields.add("testString");
+        List<Dataset> datasets = client.findDatasets(FOLDER, "testInt == 1", metadataFields);
         for (Dataset dataset : datasets) {
             System.out.println("found dataset: " + dataset.getName());
+            System.out.println("metadata: " + dataset.getMetadata());
         }
         
-        // Delete the dataset
+        // Delete the dataset.
         response = client.deleteDataset("/" + FOLDER + "/" + DATASET_NAME);
         System.out.println("deleteDataset: " + response);
         System.out.println();
         
-        // Remove the folder
+        // Remove the folder.
         client.removeFolder("/" + FOLDER);
         System.out.println("removeFolder: " + response);
         System.out.println();

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use