2 * Copyright (C) 2007-2012 Mathieu Baudier
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.slc
.client
.ui
.dist
.commands
;
19 import java
.io
.FileOutputStream
;
20 import java
.io
.FileWriter
;
21 import java
.io
.InputStream
;
22 import java
.io
.OutputStream
;
23 import java
.io
.Writer
;
24 import java
.util
.ArrayList
;
25 import java
.util
.List
;
27 import javax
.jcr
.Node
;
28 import javax
.jcr
.NodeIterator
;
29 import javax
.jcr
.Property
;
30 import javax
.jcr
.Repository
;
31 import javax
.jcr
.RepositoryException
;
32 import javax
.jcr
.Session
;
33 import javax
.jcr
.query
.QueryManager
;
34 import javax
.jcr
.query
.QueryResult
;
35 import javax
.jcr
.query
.qom
.Ordering
;
36 import javax
.jcr
.query
.qom
.QueryObjectModel
;
37 import javax
.jcr
.query
.qom
.QueryObjectModelFactory
;
38 import javax
.jcr
.query
.qom
.Selector
;
40 import org
.apache
.commons
.io
.FileUtils
;
41 import org
.apache
.commons
.io
.IOUtils
;
42 import org
.apache
.commons
.logging
.Log
;
43 import org
.apache
.commons
.logging
.LogFactory
;
44 import org
.argeo
.jcr
.JcrUtils
;
45 import org
.argeo
.slc
.jcr
.SlcNames
;
46 import org
.argeo
.slc
.jcr
.SlcTypes
;
47 import org
.eclipse
.core
.commands
.AbstractHandler
;
48 import org
.eclipse
.core
.commands
.ExecutionEvent
;
49 import org
.eclipse
.core
.commands
.ExecutionException
;
51 public class RunInOsgi
extends AbstractHandler
implements SlcNames
{
52 private final static Log log
= LogFactory
.getLog(RunInOsgi
.class);
54 private Repository repository
;
55 private String workspace
;
57 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
58 File targetDirectory
= new File(
59 "/home/mbaudier/dev/work/120517-ArgeoTP/" + workspace
);
61 InputStream jarStream
= null;
62 OutputStream out
= null;
65 FileUtils
.deleteDirectory(targetDirectory
);
66 targetDirectory
.mkdirs();
68 Session session
= repository
.login(workspace
);
69 NodeIterator bundles
= listBundleArtifacts(session
);
71 List
<File
> files
= new ArrayList
<File
>();
72 bundles
: while (bundles
.hasNext()) {
73 Node bundleNode
= bundles
.nextNode();
74 String symbolicName
= JcrUtils
.get(bundleNode
,
78 if (symbolicName
.endsWith(".source"))
81 if (symbolicName
.startsWith("org.eclipse")
82 && !symbolicName
.equals("org.eclipse.osgi"))
84 if(symbolicName
.equals("org.polymap.openlayers.rap.widget"))
87 File targetFile
= new File(targetDirectory
,
88 bundleNode
.getName());
89 out
= new FileOutputStream(targetFile
);
90 jarStream
= bundleNode
.getNode(Node
.JCR_CONTENT
)
91 .getProperty(Property
.JCR_DATA
).getBinary().getStream();
92 IOUtils
.copy(jarStream
, out
);
93 if (!symbolicName
.equals("org.eclipse.osgi"))
94 files
.add(targetFile
);
95 if (log
.isDebugEnabled())
96 log
.debug("Copied " + targetFile
.getName());
98 IOUtils
.closeQuietly(out
);
99 IOUtils
.closeQuietly(jarStream
);
102 StringBuffer osgiBundles
= new StringBuffer("osgi.bundles=");
103 for (int i
= 0; i
< files
.size(); i
++) {
105 osgiBundles
.append(',');
106 osgiBundles
.append(files
.get(i
).getName());
109 File confDir
= new File(targetDirectory
, "configuration");
111 File confIni
= new File(confDir
, "config.ini");
112 writer
= new FileWriter(confIni
);
113 writer
.write(osgiBundles
.toString());
114 IOUtils
.closeQuietly(writer
);
115 } catch (Exception e
) {
116 // TODO Auto-generated catch block
119 IOUtils
.closeQuietly(jarStream
);
120 IOUtils
.closeQuietly(out
);
121 IOUtils
.closeQuietly(writer
);
127 static NodeIterator
listBundleArtifacts(Session session
)
128 throws RepositoryException
{
129 QueryManager queryManager
= session
.getWorkspace().getQueryManager();
130 QueryObjectModelFactory factory
= queryManager
.getQOMFactory();
132 final String bundleArtifactsSelector
= "bundleArtifacts";
133 Selector source
= factory
.selector(SlcTypes
.SLC_BUNDLE_ARTIFACT
,
134 bundleArtifactsSelector
);
136 Ordering order
= factory
.ascending(factory
.propertyValue(
137 bundleArtifactsSelector
, SlcNames
.SLC_SYMBOLIC_NAME
));
138 Ordering
[] orderings
= { order
};
140 QueryObjectModel query
= factory
.createQuery(source
, null, orderings
,
143 QueryResult result
= query
.execute();
144 return result
.getNodes();
147 public void setRepository(Repository repository
) {
148 this.repository
= repository
;
151 public void setWorkspace(String workspace
) {
152 this.workspace
= workspace
;