import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
+import java.util.zip.ZipInputStream;
import javax.jcr.Credentials;
import javax.jcr.GuestCredentials;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoMonitor;
import org.argeo.jcr.ArgeoJcrUtils;
import org.argeo.jcr.ArgeoNames;
import org.argeo.jcr.ArgeoTypes;
jarOut = new JarOutputStream(out, manifest);
JarEntry jarEntry = null;
while ((jarEntry = jarIn.getNextJarEntry()) != null) {
- jarOut.putNextEntry(jarEntry);
- IOUtils.copy(jarIn, jarOut);
- jarIn.closeEntry();
- jarOut.closeEntry();
+ if (!jarEntry.getName().equals("META-INF/MANIFEST.MF")) {
+ JarEntry newJarEntry = new JarEntry(jarEntry.getName());
+ jarOut.putNextEntry(newJarEntry);
+ IOUtils.copy(jarIn, jarOut);
+ jarIn.closeEntry();
+ jarOut.closeEntry();
+ }
}
} catch (IOException e) {
throw new SlcException("Could not copy jar with MANIFEST "
+ manifest.getMainAttributes(), e);
} finally {
- IOUtils.closeQuietly(jarIn);
+ if (!(in instanceof ZipInputStream))
+ IOUtils.closeQuietly(jarIn);
IOUtils.closeQuietly(jarOut);
}
}
.getProperty(SLC_ARTIFACT_CLASSIFIER).getString(),
node.getProperty(SLC_ARTIFACT_EXTENSION).getString(), node
.getProperty(SLC_ARTIFACT_VERSION).getString());
+ } else if (node.isNodeType(SlcTypes.SLC_MODULE_COORDINATES)) {
+ return new DefaultArtifact(node.getProperty(SLC_CATEGORY)
+ .getString(), node.getProperty(SLC_NAME).getString(),
+ "jar", node.getProperty(SLC_VERSION).getString());
} else {
throw new SlcException("Unsupported node type for " + node);
}
/**
* Shortcut to retrieve a session given variable information: Handle the
* case where we only have an URI of the repository, that we want to connect
- * as anonymous or the case of a identified connexion to a local or remote
+ * as anonymous or the case of a identified connection to a local or remote
* repository.
*
* Callers must close the session once it has been used
*/
- public static Session getCorrespondingSession(
- RepositoryFactory repositoryFactory, Keyring keyring,
- Node repoNode, String uri, String workspaceName) {
+ public static Session getRemoteSession(RepositoryFactory repositoryFactory,
+ Keyring keyring, Node repoNode, String uri, String workspaceName) {
try {
if (repoNode == null && uri == null)
throw new SlcException(
}
}
+ /**
+ * Shortcut to retrieve a session on a remote Jrc Repository from
+ * information stored in a local argeo node or from an URI: Handle the case
+ * where we only have an URI of the repository, that we want to connect as
+ * anonymous or the case of a identified connection to a local or remote
+ * repository.
+ *
+ * Callers must close the session once it has been used
+ */
+ public static Session getRemoteSession(RepositoryFactory repositoryFactory,
+ Keyring keyring, Repository localRepository, String repoNodePath,
+ String uri, String workspaceName) {
+ Session localSession = null;
+ Node repoNode = null;
+ try {
+ localSession = localRepository.login();
+ if (repoNodePath != null && localSession.nodeExists(repoNodePath))
+ repoNode = localSession.getNode(repoNodePath);
+
+ return RepoUtils.getRemoteSession(repositoryFactory, keyring,
+ repoNode, uri, workspaceName);
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot log to workspace " + workspaceName
+ + " for repo defined in " + repoNodePath, e);
+ } finally {
+ JcrUtils.logoutQuietly(localSession);
+ }
+ }
+
/**
* Write group indexes: 'binaries' lists all bundles and their versions,
- * 'sources' list theire sources, and 'sdk' aggregates both.
+ * 'sources' list their sources, and 'sdk' aggregates both.
*/
public static void writeGroupIndexes(Session session,
String artifactBasePath, String groupId, String version,
* a workspace completely.
*/
public static void copy(Node fromNode, Node toNode) {
+ copy(fromNode, toNode, null);
+ }
+
+ public static void copy(Node fromNode, Node toNode, ArgeoMonitor monitor) {
try {
+ String fromPath = fromNode.getPath();
+ if (monitor != null)
+ monitor.subTask("copying node :" + fromPath);
if (log.isDebugEnabled())
- log.debug("copy node :" + fromNode.getPath());
+ log.debug("copy node :" + fromPath);
// FIXME : small hack to enable specific workspace copy
if (fromNode.isNodeType("rep:ACL")
if (toNode.isNodeType(SlcTypes.SLC_ARTIFACT))
toNode.getSession().save();
+ if (monitor != null)
+ monitor.worked(1);
+
} catch (RepositoryException e) {
throw new SlcException("Cannot copy " + fromNode + " to " + toNode,
e);