Added: 
ace/sandbox/paulb/acerepository/cnf/cache/.obr/http%3A%2F%2Fbundles.bndtools.org/repository.xml.etag
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/cache/.obr/http%253A%252F%252Fbundles.bndtools.org/repository.xml.etag?rev=1350321&view=auto
==============================================================================
--- 
ace/sandbox/paulb/acerepository/cnf/cache/.obr/http%3A%2F%2Fbundles.bndtools.org/repository.xml.etag
 (added)
+++ 
ace/sandbox/paulb/acerepository/cnf/cache/.obr/http%3A%2F%2Fbundles.bndtools.org/repository.xml.etag
 Thu Jun 14 16:38:53 2012
@@ -0,0 +1 @@
+"e5dbe01fd92232a6b3b7c939c63c518e"
\ No newline at end of file

Added: ace/sandbox/paulb/acerepository/cnf/cache/OSGI-OPT/bnd.bnd
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/cache/OSGI-OPT/bnd.bnd?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/cnf/cache/OSGI-OPT/bnd.bnd (added)
+++ ace/sandbox/paulb/acerepository/cnf/cache/OSGI-OPT/bnd.bnd Thu Jun 14 
16:38:53 2012
@@ -0,0 +1,8 @@
+#Generated by BND, at Wed Jun 13 10:12:57 CEST 2012
+#Wed Jun 13 10:12:57 CEST 2012
+Bundle-Version=1.1.0.RC2-120613-1012
+-includeresource=
+-resourceonly=true
+Service-Component=
+Include-Resource=biz.aQute.launcher/\=${repo;biz.aQute.launcher;[1.0.3,2)},biz.aQute.junit/\=${repo;biz.aQute.junit;[1.0.3,2)}
+project.dir=/Users/paul/work/bndtools-master/org.bndtools.embeddedrepo

Added: 
ace/sandbox/paulb/acerepository/cnf/cache/biz.aQute.junit/biz.aQute.junit-1.1.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/cache/biz.aQute.junit/biz.aQute.junit-1.1.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/cache/biz.aQute.junit/biz.aQute.junit-1.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.0.3.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.0.3.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/cache/biz.aQute.launcher/biz.aQute.launcher-1.0.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/sandbox/paulb/acerepository/cnf/ext/defaults.bnd
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/ext/defaults.bnd?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/cnf/ext/defaults.bnd (added)
+++ ace/sandbox/paulb/acerepository/cnf/ext/defaults.bnd Thu Jun 14 16:38:53 
2012
@@ -0,0 +1,29 @@
+# General Options
+project.dependson       = ${p-dependson;:}
+project.bootclasspath   = ${p-bootclasspath;:}
+project.buildpath       = ${p-buildpath;:}
+project.sourcepath      = ${p-sourcepath;:}
+project.allsourcepath   = ${p-allsourcepath;:}
+project.output          = ${p-output}
+project.testpath        = ${p-testpath;:}
+
+-verbose:     true
+project:      ${basedir}
+src:          src
+bin:          bin
+target-dir:   generated
+target:       ${project}/${target-dir}
+build:        ${workspace}/cnf
+p:            ${basename;${project}}
+project.name: ${p}
+
+# Java Compiler Options
+java:         java
+javac:        javac
+javac.source: 1.5
+javac.target: 1.5
+javac.debug:  on
+
+# Bnd Options
+-sources:       true
+-sourcepath:    ${project}/src

Added: ace/sandbox/paulb/acerepository/cnf/ext/repositories.bnd
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/ext/repositories.bnd?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/cnf/ext/repositories.bnd (added)
+++ ace/sandbox/paulb/acerepository/cnf/ext/repositories.bnd Thu Jun 14 
16:38:53 2012
@@ -0,0 +1,18 @@
+plugindir: ${workspace}/cnf/plugins
+
+-pluginpath:\
+       ${plugindir}/biz.aQute.repository/biz.aQute.repository-1.0.0.jar,\
+       
${plugindir}/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-2.2.0.jar,\
+       
${workspace}/org.apache.ace.bnd.repository/generated/org.apache.ace.bnd.repository.jar
+       
+
+-plugin:\
+       aQute.lib.deployer.obr.LocalOBR; name='Release';      
local=${workspace}/cnf/releaserepo,\
+       aQute.lib.deployer.FileRepo;     name=Build;          
location=${workspace}/cnf/buildrepo;,\
+       aQute.lib.deployer.obr.LocalOBR; name='Local';        
local=${workspace}/cnf/localrepo,\
+       aQute.lib.deployer.obr.OBR;      name='Bndtools Hub'; 
locations='http://bundles.bndtools.org/repository.xml',\
+       org.osgi.impl.bundle.bindex.BundleIndexerImpl,\
+       org.apache.ace.bnd.repository.AceRepository;name='Apache ACE'; 
location='http://localhost:8080'
+
+
+-releaserepo: Release
\ No newline at end of file

Added: 
ace/sandbox/paulb/acerepository/cnf/localrepo/com.springsource.org.apache.commons.httpclient/com.springsource.org.apache.commons.httpclient-3.1.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/localrepo/com.springsource.org.apache.commons.httpclient/com.springsource.org.apache.commons.httpclient-3.1.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/localrepo/com.springsource.org.apache.commons.httpclient/com.springsource.org.apache.commons.httpclient-3.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/cnf/localrepo/jackson-core-asl/jackson-core-asl-1.9.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/localrepo/jackson-core-asl/jackson-core-asl-1.9.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/localrepo/jackson-core-asl/jackson-core-asl-1.9.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/cnf/localrepo/jackson-mapper-asl/jackson-mapper-asl-1.9.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/localrepo/jackson-mapper-asl/jackson-mapper-asl-1.9.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/localrepo/jackson-mapper-asl/jackson-mapper-asl-1.9.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/sandbox/paulb/acerepository/cnf/localrepo/repository.xml
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/localrepo/repository.xml?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/cnf/localrepo/repository.xml (added)
+++ ace/sandbox/paulb/acerepository/cnf/localrepo/repository.xml Thu Jun 14 
16:38:53 2012
@@ -0,0 +1,297 @@
+<?xml version='1.0' encoding='utf-8'?>
+<?xml-stylesheet type='text/xsl' href='http://www.osgi.org/www/obr2html.xsl'?>
+
+<repository lastmodified='20120613163632.099' name='Local'>
+  <resource id='com.springsource.org.apache.commons.httpclient/3.1.0' 
presentationname='Apache Commons HTTP Client' 
symbolicname='com.springsource.org.apache.commons.httpclient' 
uri='com.springsource.org.apache.commons.httpclient/com.springsource.org.apache.commons.httpclient-3.1.0.jar'
 version='3.1.0'>
+    <size>
+      308181
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='Apache Commons HTTP Client'/>
+      <p n='symbolicname' v='com.springsource.org.apache.commons.httpclient'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient'/>
+      <p n='uses' 
v='org.apache.commons.httpclient.auth,org.apache.commons.httpclient.cookie,org.apache.commons.httpclient.params,org.apache.commons.httpclient.protocol,org.apache.commons.logging'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.auth'/>
+      <p n='uses' 
v='org.apache.commons.httpclient,org.apache.commons.httpclient.params'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.cookie'/>
+      <p n='uses' v='org.apache.commons.httpclient'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.methods'/>
+      <p n='uses' 
v='org.apache.commons.httpclient,org.apache.commons.httpclient.methods.multipart'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.methods.multipart'/>
+      <p n='uses' v='org.apache.commons.httpclient.params'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.params'/>
+      <p n='uses' v='org.apache.commons.httpclient'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.protocol'/>
+      <p n='uses' 
v='org.apache.commons.httpclient,org.apache.commons.httpclient.params'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.apache.commons.httpclient.util'/>
+      <p n='uses' v='org.apache.commons.httpclient'/>
+      <p n='version' t='version' v='3.1.0'/>
+    </capability>
+    <require extend='false' 
filter='(&amp;(package=javax.crypto)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package javax.crypto
+    </require>
+    <require extend='false' 
filter='(&amp;(package=javax.crypto.spec)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package javax.crypto.spec
+    </require>
+    <require extend='false' 
filter='(&amp;(package=javax.net)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package javax.net
+    </require>
+    <require extend='false' 
filter='(&amp;(package=javax.net.ssl)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package javax.net.ssl
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.apache.commons.codec)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))'
 multiple='false' name='package' optional='false'>
+      Import package org.apache.commons.codec ;version=[1.3.0,2.0.0)
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.apache.commons.codec.binary)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))'
 multiple='false' name='package' optional='false'>
+      Import package org.apache.commons.codec.binary ;version=[1.3.0,2.0.0)
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.apache.commons.codec.net)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))'
 multiple='false' name='package' optional='false'>
+      Import package org.apache.commons.codec.net ;version=[1.3.0,2.0.0)
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.apache.commons.logging)(version&gt;=1.1.1)(!(version&gt;=2.0.0)))'
 multiple='false' name='package' optional='false'>
+      Import package org.apache.commons.logging ;version=[1.1.1,2.0.0)
+    </require>
+  </resource>
+  <resource id='jackson-core-asl/1.9.0' presentationname='Jackson JSON 
processor' symbolicname='jackson-core-asl' 
uri='jackson-core-asl/jackson-core-asl-1.9.0.jar' version='1.9.0'>
+    <size>
+      228294
+    </size>
+    <license>
+      http://www.apache.org/licenses/LICENSE-2.0.txt
+    </license>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='Jackson JSON processor'/>
+      <p n='symbolicname' v='jackson-core-asl'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.format'/>
+      <p n='uses' v='org.codehaus.jackson.io,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.io'/>
+      <p n='uses' v='org.codehaus.jackson.util,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.sym'/>
+      <p n='uses' v='org.codehaus.jackson.util'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.util'/>
+      <p n='uses' 
v='org.codehaus.jackson.io,org.codehaus.jackson.impl,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.annotate'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.impl'/>
+      <p n='uses' 
v='org.codehaus.jackson.format,org.codehaus.jackson.io,org.codehaus.jackson.sym,org.codehaus.jackson.util,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson'/>
+      <p n='uses' 
v='org.codehaus.jackson.format,org.codehaus.jackson.sym,org.codehaus.jackson.annotate,org.codehaus.jackson.impl,org.codehaus.jackson.type,org.codehaus.jackson.io,org.codehaus.jackson.util'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.type'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.annotate)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.annotate ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.format)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.format ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.impl)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.impl ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.io)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.io ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.sym)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.sym ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.type)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.type ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.util)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.util ;version=1.9.0
+    </require>
+    <require extend='false' filter='(|(ee=J2SE-1.5)(ee=JavaSE-1.6))' 
multiple='false' name='ee' optional='false'>
+      Execution Environment (|(ee=J2SE-1.5)(ee=JavaSE-1.6))
+    </require>
+  </resource>
+  <resource id='jackson-mapper-asl/1.9.0' presentationname='Data mapper for 
Jackson JSON processor' symbolicname='jackson-mapper-asl' 
uri='jackson-mapper-asl/jackson-mapper-asl-1.9.0.jar' version='1.9.0'>
+    <size>
+      764083
+    </size>
+    <license>
+      http://www.apache.org/licenses/LICENSE-2.0.txt
+    </license>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='Data mapper for Jackson JSON processor'/>
+      <p n='symbolicname' v='jackson-mapper-asl'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.schema'/>
+      <p n='uses' 
v='org.codehaus.jackson.node,org.codehaus.jackson.map,org.codehaus.jackson.annotate,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.deser.impl'/>
+      <p n='uses' 
v='org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.map.deser,org.codehaus.jackson.map,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson.map.util,org.codehaus.jackson.map.deser.std,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.exc'/>
+      <p n='uses' v='org.codehaus.jackson.map,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.annotate'/>
+      <p n='uses' v='org.codehaus.jackson.map,org.codehaus.jackson.annotate'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.ser.impl'/>
+      <p n='uses' 
v='org.codehaus.jackson.io,org.codehaus.jackson.map,org.codehaus.jackson.map.ser.std,org.codehaus.jackson,org.codehaus.jackson.map.ser,org.codehaus.jackson.type'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.ser.std'/>
+      <p n='uses' 
v='org.codehaus.jackson.schema,org.codehaus.jackson.map.annotate,org.codehaus.jackson.map.ser.impl,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.io,org.codehaus.jackson.node,org.codehaus.jackson.map,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson.map.util,org.codehaus.jackson,org.codehaus.jackson.map.ser'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.type'/>
+      <p n='uses' 
v='org.codehaus.jackson.map,org.codehaus.jackson.map.util,org.codehaus.jackson,org.codehaus.jackson.type'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.module'/>
+      <p n='uses' 
v='org.codehaus.jackson.map.deser,org.codehaus.jackson.map,org.codehaus.jackson.map.type,org.codehaus.jackson,org.codehaus.jackson.type'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.node'/>
+      <p n='uses' 
v='org.codehaus.jackson.io,org.codehaus.jackson.map,org.codehaus.jackson.util,org.codehaus.jackson.impl,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map'/>
+      <p n='uses' 
v='org.codehaus.jackson.format,org.codehaus.jackson.schema,org.codehaus.jackson.map.annotate,org.codehaus.jackson.annotate,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.io,org.codehaus.jackson.node,org.codehaus.jackson.map.deser,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson.map.jsontype,org.codehaus.jackson.map.util,org.codehaus.jackson,org.codehaus.jackson.map.ser,org.codehaus.jackson.map.jsontype.impl'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.deser'/>
+      <p n='uses' 
v='org.codehaus.jackson.map.exc,org.codehaus.jackson.map.deser.impl,org.codehaus.jackson.map.annotate,org.codehaus.jackson.annotate,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.io,org.codehaus.jackson.node,org.codehaus.jackson.map,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson.map.jsontype,org.codehaus.jackson.map.util,org.codehaus.jackson,org.codehaus.jackson.map.deser.std'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.introspect'/>
+      <p n='uses' 
v='org.codehaus.jackson.map.annotate,org.codehaus.jackson.map.ser.std,org.codehaus.jackson.annotate,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.map,org.codehaus.jackson.map.jsontype,org.codehaus.jackson.map.util,org.codehaus.jackson.map.jsontype.impl'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.jsontype'/>
+      <p n='uses' 
v='org.codehaus.jackson.map,org.codehaus.jackson.annotate,org.codehaus.jackson.map.introspect,org.codehaus.jackson.type'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.util'/>
+      <p n='uses' 
v='org.codehaus.jackson.io,org.codehaus.jackson.map,org.codehaus.jackson.map.type,org.codehaus.jackson.map.introspect,org.codehaus.jackson,org.codehaus.jackson.type'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.deser.std'/>
+      <p n='uses' 
v='org.codehaus.jackson.map.deser.impl,org.codehaus.jackson.map.annotate,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.io,org.codehaus.jackson.node,org.codehaus.jackson.map,org.codehaus.jackson.map.deser,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson,org.codehaus.jackson.map.util'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.jsontype.impl'/>
+      <p n='uses' 
v='org.codehaus.jackson.annotate,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.map,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson.map.jsontype,org.codehaus.jackson,org.codehaus.jackson.map.util'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='org.codehaus.jackson.map.ser'/>
+      <p n='uses' 
v='org.codehaus.jackson.schema,org.codehaus.jackson.map.annotate,org.codehaus.jackson.map.ser.impl,org.codehaus.jackson.map.ser.std,org.codehaus.jackson.map.type,org.codehaus.jackson.type,org.codehaus.jackson.node,org.codehaus.jackson.io,org.codehaus.jackson.map,org.codehaus.jackson.util,org.codehaus.jackson.map.introspect,org.codehaus.jackson.map.jsontype,org.codehaus.jackson.map.util,org.codehaus.jackson'/>
+      <p n='version' t='version' v='1.9.0'/>
+    </capability>
+    <require extend='false' 
filter='(&amp;(package=javax.xml.datatype)(version&gt;=0.0.0))' 
multiple='false' name='package' optional='false'>
+      Import package javax.xml.datatype
+    </require>
+    <require extend='false' 
filter='(&amp;(package=javax.xml.namespace)(version&gt;=0.0.0))' 
multiple='false' name='package' optional='false'>
+      Import package javax.xml.namespace
+    </require>
+    <require extend='false' 
filter='(&amp;(package=javax.xml.parsers)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package javax.xml.parsers
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.annotate)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.annotate ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.format)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.format ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.impl)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.impl ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.io)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.io ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.type)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.type ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.codehaus.jackson.util)(version&gt;=1.9.0))' 
multiple='false' name='package' optional='false'>
+      Import package org.codehaus.jackson.util ;version=1.9.0
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.w3c.dom)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package org.w3c.dom
+    </require>
+    <require extend='false' 
filter='(&amp;(package=org.xml.sax)(version&gt;=0.0.0))' multiple='false' 
name='package' optional='false'>
+      Import package org.xml.sax
+    </require>
+    <require extend='false' filter='(|(ee=J2SE-1.5)(ee=JavaSE-1.6))' 
multiple='false' name='ee' optional='false'>
+      Execution Environment (|(ee=J2SE-1.5)(ee=JavaSE-1.6))
+    </require>
+  </resource>
+</repository>
\ No newline at end of file

Added: 
ace/sandbox/paulb/acerepository/cnf/plugins/biz.aQute.bnd/biz.aQute.bnd-1.52.3.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/plugins/biz.aQute.bnd/biz.aQute.bnd-1.52.3.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/plugins/biz.aQute.bnd/biz.aQute.bnd-1.52.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/cnf/plugins/biz.aQute.repository/biz.aQute.repository-1.0.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/plugins/biz.aQute.repository/biz.aQute.repository-1.0.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/plugins/biz.aQute.repository/biz.aQute.repository-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/cnf/plugins/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-2.2.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/plugins/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-2.2.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/cnf/plugins/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-2.2.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/sandbox/paulb/acerepository/cnf/releaserepo/repository.xml
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/cnf/releaserepo/repository.xml?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/cnf/releaserepo/repository.xml (added)
+++ ace/sandbox/paulb/acerepository/cnf/releaserepo/repository.xml Thu Jun 14 
16:38:53 2012
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<repository name='Release' lastmodified='0' 
xmlns='http://www.osgi.org/xmlns/obr/v1.0.0'/>
\ No newline at end of file

Added: ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.classpath
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.classpath?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.classpath 
(added)
+++ ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.classpath 
Thu Jun 14 16:38:53 2012
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="src" output="bin_test" path="test"/>
+       <classpathentry kind="con" 
path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSGi%Minimum-1.2"/>
+       <classpathentry kind="con" path="aQute.bnd.classpath.container"/>
+       <classpathentry kind="lib" 
path="libs/com.springsource.org.apache.commons.codec-1.3.0.jar"/>
+       <classpathentry kind="lib" 
path="libs/com.springsource.org.apache.commons.httpclient-3.1.0.jar"/>
+       <classpathentry kind="lib" 
path="libs/com.springsource.org.apache.commons.logging-1.1.1.jar"/>
+       <classpathentry kind="lib" path="libs/gson-1.7.1.jar"/>
+       <classpathentry kind="lib" 
path="libs/org.amdatu.ace.client-0.0.1-SNAPSHOT.jar"/>
+       <classpathentry kind="lib" path="libs/org.apache.commons.io-2.1.0.jar"/>
+       <classpathentry kind="con" 
path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>

Added: ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.project
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.project?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.project 
(added)
+++ ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/.project Thu 
Jun 14 16:38:53 2012
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.apache.ace.bnd.repository</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>bndtools.core.bndbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>bndtools.core.bndnature</nature>
+       </natures>
+</projectDescription>

Added: ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/bnd.bnd
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/bnd.bnd?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/bnd.bnd 
(added)
+++ ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/bnd.bnd Thu 
Jun 14 16:38:53 2012
@@ -0,0 +1,9 @@
+-includeresource: @libs/com.springsource.org.apache.commons.codec-1.3.0.jar,\
+                                 
@libs/com.springsource.org.apache.commons.httpclient-3.1.0.jar,\
+                                 
@libs/com.springsource.org.apache.commons.logging-1.1.1.jar,\
+                                 @libs/gson-1.7.1.jar,\
+                                 
@libs/org.amdatu.ace.client-0.0.1-SNAPSHOT.jar,\
+                                 @libs/org.apache.commons.io-2.1.0.jar
+Private-Package: org.apache.ace.bnd.repository
+-buildpath: biz.aQute.bndlib;version=1.44,\
+       org.mockito.mockito-all
\ No newline at end of file

Added: ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/build.xml
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/build.xml?rev=1350321&view=auto
==============================================================================
--- ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/build.xml 
(added)
+++ ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/build.xml Thu 
Jun 14 16:38:53 2012
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="project" default="build">
+       
+       <!-- -->
+       
+       <import file="../cnf/build.xml"/>
+</project>

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.codec-1.3.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.codec-1.3.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.codec-1.3.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.httpclient-3.1.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.httpclient-3.1.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.httpclient-3.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.logging-1.1.1.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.logging-1.1.1.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/com.springsource.org.apache.commons.logging-1.1.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/gson-1.7.1.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/gson-1.7.1.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/gson-1.7.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/org.amdatu.ace.client-0.0.1-SNAPSHOT.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/org.amdatu.ace.client-0.0.1-SNAPSHOT.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/org.amdatu.ace.client-0.0.1-SNAPSHOT.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/org.apache.commons.io-2.1.0.jar
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/org.apache.commons.io-2.1.0.jar?rev=1350321&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/libs/org.apache.commons.io-2.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepository.java
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepository.java?rev=1350321&view=auto
==============================================================================
--- 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepository.java
 (added)
+++ 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepository.java
 Thu Jun 14 16:38:53 2012
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ace.bnd.repository;
+
+import java.io.File;
+import java.util.List;
+
+import org.amdatu.ace.client.model.Artifact;
+
+import aQute.lib.osgi.Jar;
+/**
+ * Interface that contains the required methods to communicate with an actual 
ACE server. 
+ */
+public interface AceRemoteRepository {
+
+       List<Artifact> listArtifacts();
+
+       File downloadRemoteArtifact(String url, String obrDir);
+
+       Artifact uploadArtifact(Jar jar, String obrUrl);
+}
\ No newline at end of file

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepositoryClientDefaultImpl.java
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepositoryClientDefaultImpl.java?rev=1350321&view=auto
==============================================================================
--- 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepositoryClientDefaultImpl.java
 (added)
+++ 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRemoteRepositoryClientDefaultImpl.java
 Thu Jun 14 16:38:53 2012
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ace.bnd.repository;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.amdatu.ace.client.AceClient;
+import org.amdatu.ace.client.AceClientException;
+import org.amdatu.ace.client.AceClientWorkspace;
+import org.amdatu.ace.client.model.Artifact;
+import org.amdatu.ace.client.model.ArtifactBuilder;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.URI;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+
+import aQute.lib.osgi.Jar;
+
+/**
+ * Implementation that does the actual communication with the ACE server using 
the REST interface and the OBR directly.
+ */
+public class AceRemoteRepositoryClientDefaultImpl implements 
AceRemoteRepository {
+       private String m_aceUrl;
+
+       public AceRemoteRepositoryClientDefaultImpl(String aceUrl) {
+               m_aceUrl = aceUrl;
+       }
+
+       @Override
+       public List<Artifact> listArtifacts() {
+               try {
+                       AceClient aceClient = new AceClient(m_aceUrl + 
"/client/work");
+                       AceClientWorkspace workspace = 
aceClient.createNewWorkspace();
+                       Artifact[] resources = 
workspace.getResources(Artifact.class);
+                       List<Artifact> result = new ArrayList<Artifact>();
+
+                       for (Artifact artifact : resources) {
+                               if (artifact.getBundleSymbolicName() != null) {
+                                       result.add(artifact);
+                               }
+                       }
+
+                       workspace.remove();
+                       return result;
+               } catch (AceClientException e) {
+                       throw new RuntimeException(e);
+               }
+       }
+
+       @Override
+       public File downloadRemoteArtifact(String url, String obrDir) {
+               File artifactFile = new File(obrDir, 
url.substring(url.lastIndexOf("/")));
+               if (!artifactFile.exists()) {
+                       InputStream inputStream = null;
+
+                       try {
+                               inputStream = new 
URL(url).openConnection().getInputStream();
+                               FileUtils.writeByteArrayToFile(artifactFile, 
IOUtils.toByteArray(inputStream));
+                       } catch (MalformedURLException e) {
+                               throw new RuntimeException(e);
+                       } catch (IOException e) {
+                               throw new RuntimeException(e);
+                       } finally {
+                               if (inputStream != null) {
+                                       try {
+                                               inputStream.close();
+                                       } catch (IOException e) {
+                                               throw new RuntimeException(e);
+                                       }
+                               }
+                       }
+
+               }
+
+               return artifactFile;
+       }
+
+       public Artifact uploadArtifact(Jar jar, String obrUrl) {
+               HttpClient httpClient = new HttpClient();
+               PostMethod post = new PostMethod();
+
+               try {
+                       String generatedJarName = jar.getBsn() + "-" + 
jar.getVersion() + ".jar";
+                       String fileUrl = obrUrl + generatedJarName;
+                       post.setURI(new URI(fileUrl, false));
+                       Artifact artifact = new 
ArtifactBuilder().setBundleSymbolicName(jar.getBsn())
+                                       
.setBundleVersion(jar.getVersion()).setBundleName(jar.getName()).setUrl(fileUrl)
+                                       
.setName(generatedJarName).setMimeType("application/vnd.osgi.bundle").build();
+
+                       ByteArrayOutputStream out = new ByteArrayOutputStream();
+                       jar.write(out);
+                       InputStream decodedInput = new 
ByteArrayInputStream(((ByteArrayOutputStream) out).toByteArray());
+
+                       RequestEntity requestEntity = new 
InputStreamRequestEntity(decodedInput);
+
+                       post.setRequestEntity(requestEntity);
+                       httpClient.executeMethod(post);
+                       AceClient aceClient = new AceClient(m_aceUrl + 
"/client/work");
+                       try {
+                               AceClientWorkspace workspace = 
aceClient.createNewWorkspace();
+                               workspace.createResource(artifact);
+                               workspace.commit();
+                               workspace.remove();
+                       } catch (AceClientException e) {
+                               e.printStackTrace();
+                       }
+
+                       return artifact;
+
+               } catch (Exception e) {
+                       throw new RuntimeException(e);
+
+               } finally {
+               }
+
+       }
+}

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRepository.java
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRepository.java?rev=1350321&view=auto
==============================================================================
--- 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRepository.java
 (added)
+++ 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/src/org/apache/ace/bnd/repository/AceRepository.java
 Thu Jun 14 16:38:53 2012
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ace.bnd.repository;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.amdatu.ace.client.model.Artifact;
+
+import aQute.bnd.service.Plugin;
+import aQute.bnd.service.RepositoryPlugin;
+import aQute.lib.osgi.Jar;
+import aQute.libg.reporter.Reporter;
+import aQute.libg.version.Version;
+import aQute.libg.version.VersionRange;
+
+/**
+ * Implementation of the RepositoryPlugin interface as used by BND. 
+ */
+public class AceRepository implements RepositoryPlugin, Plugin {
+       private static final String ACEURL_PROPERTY = "aceurl";
+       private static final String OBR_DIR_PROPERTY = "obrdir";
+       private static final String NAME_PROPERTY = "name";
+       private String m_obrCacheDir;
+       private AceRemoteRepository m_remoteRepository;
+       private String m_name;
+       private String m_aceUrl;
+
+       public AceRepository() {
+               
+       }
+
+       public AceRepository(AceRemoteRepository aceRemoteRepository) {
+               m_remoteRepository = aceRemoteRepository;
+       }
+
+       @Override
+       public void setProperties(Map<String, String> map) {
+               m_aceUrl = map.containsKey(ACEURL_PROPERTY) ? 
map.get(ACEURL_PROPERTY) : "http://localhost:8080";;
+               String obrCacheDir = map.containsKey(OBR_DIR_PROPERTY) ? 
map.get(OBR_DIR_PROPERTY) : System.getProperty("java.io.tmpdir");
+               obrCacheDir += "/obr";
+
+               m_obrCacheDir = obrCacheDir;
+
+               m_name = map.containsKey(NAME_PROPERTY) ? 
map.get(NAME_PROPERTY) : "Apache ACE";
+               m_remoteRepository = new 
AceRemoteRepositoryClientDefaultImpl(m_aceUrl);                
+       }
+
+       @Override
+       public void setReporter(Reporter processor) {
+
+       }
+
+       @Override
+       public File[] get(String bsn, String range) throws Exception {
+               SortedMap<Version, File> foundVersion = new TreeMap<Version, 
File>();
+               for (Artifact artifact : m_remoteRepository.listArtifacts()) {
+                       Version version = new 
Version(artifact.getBundleVersion());
+                       boolean exact = 
range.matches("[0-9]+\\.[0-9]+\\.[0-9]+");
+                       if ("latest".equals(range) || matchVersion(range, 
version, exact)) {
+                               File downloadedFile = 
m_remoteRepository.downloadRemoteArtifact(artifact.getUrl(), m_obrCacheDir);
+                               foundVersion.put(version, downloadedFile);
+                       }
+               }
+
+               File[] result = new File[foundVersion.size()];
+               result = foundVersion.values().toArray(result);
+               if (!"latest".equals(range)) {
+                       return result;
+               } else {
+                       if (result.length > 0) {
+                               return new File[] { result[0] };
+                       } else {
+                               return new File[0];
+                       }
+               }
+       }
+
+       @Override
+       public File get(String bsn, String range, Strategy strategy, 
Map<String, String> properties) throws Exception {
+               File[] files = get(bsn, range);
+
+               if (files.length == 0) {
+                       return null;
+               }
+
+               if (strategy == Strategy.EXACT) {
+                       return files[0];
+               } else if (strategy == Strategy.HIGHEST) {
+                       return files[files.length - 1];
+               } else if (strategy == Strategy.LOWEST) {
+                       return files[0];
+               }
+
+               return null;
+       }
+
+       private boolean matchVersion(String range, Version version, boolean 
exact) {
+               if (range == null || range.trim().length() == 0)
+                       return true;
+               VersionRange vr = new VersionRange(range);
+
+               boolean result;
+               if (exact) {
+                       if (vr.isRange())
+                               result = false;
+                       else
+                               result = vr.getHigh().equals(version);
+               } else {
+                       result = vr.includes(version);
+               }
+               return result;
+       }
+
+       @Override
+       public boolean canWrite() {
+               return true;
+       }
+
+       @Override
+       public File put(Jar jar) throws Exception {
+               Artifact artifact = m_remoteRepository.uploadArtifact(jar, 
m_aceUrl + "/obr/");
+
+               list(null);
+               return 
m_remoteRepository.downloadRemoteArtifact(artifact.getUrl(), m_obrCacheDir);
+       }
+
+       @Override
+       public List<String> list(String regex) throws Exception {
+               List<String> names = new ArrayList<String>();
+
+               for (Artifact artifact :  m_remoteRepository.listArtifacts()) {
+                       String bsn = artifact.getBundleSymbolicName();
+                       if (regex != null) {
+                               Pattern pattern = Pattern.compile(regex);
+                               Matcher matcher = pattern.matcher(bsn);
+                               if (matcher.matches()) {
+                                       if(!names.contains(bsn)) {
+                                               names.add(bsn);
+                                       }
+                               }
+                       } else {
+                               if(!names.contains(bsn)) {
+                                       names.add(bsn);
+                               }
+                       }
+               }
+
+               return names;
+       }
+
+       @Override
+       public List<Version> versions(String bsn) throws Exception {
+               List<Version> versions = new ArrayList<Version>();
+
+               for (Artifact artifact :  m_remoteRepository.listArtifacts()) {
+                       if (artifact.getBundleSymbolicName().equals(bsn)) {
+                               versions.add(new 
Version(artifact.getBundleVersion()));
+                       }
+               }
+
+               return versions;
+       }
+
+       @Override
+       public String getName() {
+               return m_name;
+       }
+
+}

Added: 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/test/org/apache/ace/bnd/repository/AceRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/test/org/apache/ace/bnd/repository/AceRepositoryTest.java?rev=1350321&view=auto
==============================================================================
--- 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/test/org/apache/ace/bnd/repository/AceRepositoryTest.java
 (added)
+++ 
ace/sandbox/paulb/acerepository/org.apache.ace.bnd.repository/test/org/apache/ace/bnd/repository/AceRepositoryTest.java
 Thu Jun 14 16:38:53 2012
@@ -0,0 +1,154 @@
+package org.apache.ace.bnd.repository;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.amdatu.ace.client.model.ArtifactBuilder;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import aQute.bnd.service.RepositoryPlugin.Strategy;
+import aQute.libg.version.Version;
+
+@RunWith(MockitoJUnitRunner.class)
+public class AceRepositoryTest {
+       @Mock private AceRemoteRepository aceRemoteRepository;
+       private AceRepository aceRepository;
+       
+       @Before
+       public void before() throws Exception{
+               aceRepository = new AceRepository(aceRemoteRepository);
+               
+               when(aceRemoteRepository.listArtifacts()).thenReturn(
+                               Arrays.asList(
+                                               new 
ArtifactBuilder().setBundleSymbolicName("a").setBundleVersion("2.0.0").setUrl("a-2.0.0.jar").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("a").setBundleVersion("1.0.0").setUrl("a-1.0.0.jar").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("a").setBundleVersion("1.0.1").setUrl("a-1.0.1.jar").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("a").setBundleVersion("1.1.0").setUrl("a-1.1.0.jar").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("b").setBundleVersion("2.0.0").setUrl("a-2.0.0.jar").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("b").setBundleVersion("2.0.1").setUrl("a-2.0.1.jar").build()));
+                               
+               aceRepository.setProperties(new HashMap<String, String>());
+       }
+       
+       @Test
+       public void testGetSingleExact() throws Exception {
+               File[] files = aceRepository.get("a", "1.0.0");
+               assertThat(files.length, is(1));
+       }
+
+       @Test
+       public void testRange() throws Exception {
+               File[] files = aceRepository.get("a", "[1.0,2)");
+               assertThat(files.length, is(3));
+       }
+       
+       @Test
+       public void testRangeMinor() throws Exception {
+               File[] files = aceRepository.get("a", "[1.1,2)");
+               assertThat(files.length, is(1));
+       }
+       
+       @Test
+       public void testGetLatest() throws Exception {
+                       
+               File file = new File("test.jar");
+               
when(aceRemoteRepository.downloadRemoteArtifact(any(String.class), 
any(String.class))).thenReturn(file);
+               aceRepository.setProperties(new HashMap<String, String>());
+               
+               File[] files = aceRepository.get("a", "latest");
+               assertThat(files.length, is(1));
+               assertThat(files[0].getName(), is("test.jar"));
+       }
+
+       @Test
+       public void testGetSingleHighest() throws Exception {
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.0.0.jar"), 
any(String.class))).thenReturn(new File("a-1.0.0.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.0.1.jar"), 
any(String.class))).thenReturn(new File("a-1.0.1.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.1.0.jar"), 
any(String.class))).thenReturn(new File("a-1.1.0.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-2.0.0.jar"), 
any(String.class))).thenReturn(new File("a-2.0.0.jar"));
+               
+               File result = aceRepository.get("a", "[1.0.0,2)", 
Strategy.HIGHEST, null);
+               Assert.assertNotNull(result);
+               assertThat(result.getName(), is("a-1.1.0.jar"));
+       }
+       
+       @Test
+       public void testGetSingleLowest() throws Exception {
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.0.0.jar"), 
any(String.class))).thenReturn(new File("a-1.0.0.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.0.1.jar"), 
any(String.class))).thenReturn(new File("a-1.0.1.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.1.0.jar"), 
any(String.class))).thenReturn(new File("a-1.1.0.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-2.0.0.jar"), 
any(String.class))).thenReturn(new File("a-2.0.0.jar"));
+               
+               File result = aceRepository.get("a", "[1.0.0,2)", 
Strategy.LOWEST, null);
+               Assert.assertNotNull(result);
+               assertThat(result.getName(), is("a-1.0.0.jar"));
+       }
+       
+       @Test
+       public void testGetExact() throws Exception {
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.0.0.jar"), 
any(String.class))).thenReturn(new File("a-1.0.0.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.0.1.jar"), 
any(String.class))).thenReturn(new File("a-1.0.1.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-1.1.0.jar"), 
any(String.class))).thenReturn(new File("a-1.1.0.jar"));
+               
when(aceRemoteRepository.downloadRemoteArtifact(eq("a-2.0.0.jar"), 
any(String.class))).thenReturn(new File("a-2.0.0.jar"));
+               
+               File result = aceRepository.get("a", "1.0.1", Strategy.EXACT, 
null);
+               Assert.assertNotNull(result);
+               assertThat(result.getName(), is("a-1.0.1.jar"));
+       }
+
+       @Test
+       public void testCanWrite() {
+               assertThat(aceRepository.canWrite(), is(true));
+       }
+
+       @Test
+       public void testList() throws Exception {
+               List<String> list = aceRepository.list(null);
+               assertThat(list.size(), is(2));
+       }
+       
+       @Test
+       public void testVersions() throws Exception {
+               when(aceRemoteRepository.listArtifacts()).thenReturn(
+                               Arrays.asList(
+                                               new 
ArtifactBuilder().setBundleSymbolicName("a").setBundleVersion("1.0.0").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("a").setBundleVersion("1.0.1").build(),
+                                               new 
ArtifactBuilder().setBundleSymbolicName("b").build()));
+               
+               aceRepository.setProperties(new HashMap<String, String>());
+               
+               List<Version> list = aceRepository.versions("a");
+               assertThat(list.size(), is(2));
+               assertThat(list.get(0).getMicro(), is(0));
+               assertThat(list.get(1).getMicro(), is(1));
+       }
+
+       @Test
+       public void testGetDefaultName() {
+               assertThat(aceRepository.getName(), is("Apache ACE"));
+       }
+       
+       @Test
+       public void testGetName() {
+               Map<String, String> map = new HashMap<String, String>();
+               map.put("name", "test");
+               aceRepository.setProperties(map);
+               assertThat(aceRepository.getName(), is("test"));
+       }
+
+}


Reply via email to