You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by br...@apache.org on 2013/06/14 15:36:39 UTC

svn commit: r1493063 - in /ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli: command/AbstractCommand.java command/CopyDirectory.java command/CopyResources.java repository/AceObrRepository.java

Author: bramk
Date: Fri Jun 14 13:36:39 2013
New Revision: 1493063

URL: http://svn.apache.org/r1493063
Log:
[sandbox] Added filename on ACE OBR uploads to support arbitrary type


Modified:
    ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java
    ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyDirectory.java
    ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyResources.java
    ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/repository/AceObrRepository.java

Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java?rev=1493063&r1=1493062&r2=1493063&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/AbstractCommand.java Fri Jun 14 13:36:39 2013
@@ -98,25 +98,41 @@ public abstract class AbstractCommand {
     }
 
     protected String getIdentity(Resource resource) {
-        return (String) resource.getCapabilities("osgi.identity").get(0).getAttributes().get("osgi.identity");
+        Map<String, Object> attrs = getNamespaceAttributes(resource, "osgi.identity");
+        if (attrs == null)
+            return null;
+        return (String) attrs.get("osgi.identity");
 
     }
 
     protected String getVersion(Resource resource) {
-        return ((Version) resource.getCapabilities("osgi.identity").get(0).getAttributes().get("version")).toString();
-
+        Map<String, Object> attrs = getNamespaceAttributes(resource, "osgi.identity");
+        if (attrs == null)
+            return null;
+        Version version = (Version) attrs.get("version");
+        return version == null ? null : version.toString();
     }
 
     protected String getType(Resource resource) {
-        return (String) resource.getCapabilities("osgi.identity").get(0).getAttributes().get("type");
+        Map<String, Object> attrs = getNamespaceAttributes(resource, "osgi.identity");
+        if (attrs == null)
+            return null;
+        return (String) attrs.get("type");
     }
 
     protected String getUrl(Resource resource) {
-        return ((URI) resource.getCapabilities("osgi.content").get(0).getAttributes().get("url")).toString();
+        Map<String, Object> attrs = getNamespaceAttributes(resource, "osgi.content");
+        if (attrs == null)
+            return null;
+        URI url = (URI) attrs.get("url");
+        return url == null ? null : url.toString();
     }
 
     protected String getMimetype(Resource resource) {
-        return (String) resource.getCapabilities("osgi.content").get(0).getAttributes().get("mime");
+        Map<String, Object> attrs = getNamespaceAttributes(resource, "osgi.content");
+        if (attrs == null)
+            return null;
+        return (String) attrs.get("mime");
     }
 
     protected String toString(Resource resource) {
@@ -154,7 +170,7 @@ public abstract class AbstractCommand {
         CapReqBuilder builder = new CapReqBuilder(getFilterNamespace());
         String filter = getFilter();
         if (filter != null) {
-            builder.addDirective("filter", getFilter());
+            builder.addDirective("filter", filter);
         }
         return builder.buildSyntheticRequirement();
     }
@@ -165,4 +181,14 @@ public abstract class AbstractCommand {
             .buildSyntheticRequirement();
         return requirement;
     }
+
+    private Map<String, Object> getNamespaceAttributes(Resource resource, String namespace) {
+        List<Capability> caps = resource.getCapabilities(namespace);
+        if (caps.isEmpty())
+            return null;
+        Map<String, Object> attrs = caps.get(0).getAttributes();
+        if (attrs == null)
+            return null;
+        return attrs;
+    }
 }

Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyDirectory.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyDirectory.java?rev=1493063&r1=1493062&r2=1493063&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyDirectory.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyDirectory.java Fri Jun 14 13:36:39 2013
@@ -91,15 +91,10 @@ public class CopyDirectory extends Abstr
                     dirs.push(file);
                     continue;
                 }
-
-                // We need a mimetype or Jetty will throw a 500 Form too large
-                String mimeType = "application/jar";
-                if (file.getName().endsWith(".xml")) {
-                    mimeType = "text/xml";
-                }
+                
                 InputStream input = new FileInputStream(file);
                 try {
-                    URI uri = aceRepo.upload(input, file.getName(), mimeType);
+                    URI uri = aceRepo.upload(input, file.getName(), null);
                     System.out.println("Copied " + file.getAbsolutePath() + " => " + uri.toString());
                     copyCount++;
                 }

Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyResources.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyResources.java?rev=1493063&r1=1493062&r2=1493063&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyResources.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/command/CopyResources.java Fri Jun 14 13:36:39 2013
@@ -18,11 +18,12 @@
  */
 package org.apache.ace.cli.command;
 
-import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.net.URI;
 import java.util.List;
 
+import org.apache.ace.cli.repository.AceObrRepository;
 import org.osgi.resource.Requirement;
 import org.osgi.resource.Resource;
 
@@ -62,7 +63,7 @@ public class CopyResources extends Abstr
 
         int copyCount = 0;
         int skipCount = 0;
-        printVerbose("Copying from source to target with directove " + getFilterNamespace() + ":" + getFilter());
+        printVerbose("Copying " + sourceResources.size() + " resources. Directive: " + getFilterNamespace() + ":" + getFilter());
         for (Resource sourceResource : sourceResources) {
 
             Requirement targetRequirement = getIdentityRequirement(getIdentity(sourceResource), getVersion(sourceResource));
@@ -74,19 +75,39 @@ public class CopyResources extends Abstr
             }
             else {
 
-                ResourceHandle handle = sourceRepo.getHandle(getIdentity(sourceResource), getVersion(sourceResource), Strategy.EXACT, null);
-                File file = handle.request();
-                InputStream input = new FileInputStream(file);
+                ResourceHandle handle = null;
+                InputStream input = null;
                 try {
-                    PutResult result = targetRepo.put(input, new PutOptions());
-                    System.out.println("Copied " + toString(sourceResource) + " => " + result.artifact.toString());
+                    handle = sourceRepo.getHandle(getIdentity(sourceResource), getVersion(sourceResource), Strategy.EXACT, null);
+                    input = new FileInputStream(handle.request());
+
+                    // AceObrRepository can accept other types then bundle, but in those cases
+                    // needs a filename as meta-data.
+                    if (targetRepo instanceof AceObrRepository) {
+                        String fileName = getUrl(sourceResource);
+                        if (fileName.lastIndexOf("/") > 0) {
+                            fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
+                        }
+                        AceObrRepository aceTargetRepo = (AceObrRepository) targetRepo;
+                        URI location = aceTargetRepo.upload(input, fileName, getMimetype(sourceResource));
+                        System.out.println("Copied " + toString(sourceResource) + " => " + location.toString());
+
+                    }
+                    else {
+                        PutResult result = targetRepo.put(input, new PutOptions());
+                        System.out.println("Copied " + toString(sourceResource) + " => " + result.artifact.toString());
+                    }
                     copyCount++;
                 }
+                catch (Exception e) {
+                    e.printStackTrace();
+                    throw e;
+                }
                 finally {
                     input.close();
                 }
             }
         }
-        printVerbose("Copied " + copyCount + " resources (skipped " + skipCount + "existing)");
+        printVerbose("Copied " + copyCount + " resources (skipped " + skipCount + " existing)");
     }
 }

Modified: ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/repository/AceObrRepository.java
URL: http://svn.apache.org/viewvc/ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/repository/AceObrRepository.java?rev=1493063&r1=1493062&r2=1493063&view=diff
==============================================================================
--- ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/repository/AceObrRepository.java (original)
+++ ace/sandbox/bramk/org.apache.ace.cli/src/org/apache/ace/cli/repository/AceObrRepository.java Fri Jun 14 13:36:39 2013
@@ -96,6 +96,10 @@ public class AceObrRepository extends Fi
             if (mimetype != null) {
                 connection.setRequestProperty("Content-Type", mimetype);
             }
+            else {
+                // We need a mimetype or Jetty will throw a 500 Form too large
+                connection.setRequestProperty("Content-Type", "application/octet-stream");
+            }
 
             if (connection instanceof HttpURLConnection) {
                 ((HttpURLConnection) connection).setChunkedStreamingMode(8192);