<property name="javaRepoManager">
<bean factory-bean="slcRepoManager" factory-method="getJavaRepoManager" />
</property>
- <property name="nodeRepository" ref="nodeRepository" />
+ <property name="javaRepository" ref="javaRepository" />
</bean>
<bean id="createLocalJavaWorkspace"
public final static String PARAM_SOURCE_WORKSPACE_NAME = "srcWkspName";
// DEPENDENCY INJECTION
- private Repository nodeRepository;
+ private Repository javaRepository;
private JavaRepoManager javaRepoManager;
public Object execute(ExecutionEvent event) throws ExecutionException {
"Error", null));
return null;
}
- Job copyWkspJob = new CopyWkspJob(javaRepoManager, nodeRepository,
+ Job copyWkspJob = new CopyWkspJob(javaRepoManager, javaRepository,
wkspName, newWorkspaceName, HandlerUtil
.getActiveWorkbenchWindow(event).getShell()
.getDisplay());
private static class CopyWkspJob extends PrivilegedJob {
private JavaRepoManager javaRepoManager;
- private Repository localRepository;
+ private Repository javaRepository;
private String srcWkspName;
private String targetWkspName;
private Display display;
public CopyWkspJob(JavaRepoManager javaRepoManager,
- Repository localRepository, String srcWkspName,
+ Repository javaRepository, String srcWkspName,
String targetWkspName, Display display) {
super("Duplicate workspace");
this.javaRepoManager = javaRepoManager;
- this.localRepository = localRepository;
+ this.javaRepository = javaRepository;
this.srcWkspName = srcWkspName;
this.targetWkspName = targetWkspName;
this.display = display;
Session targetSession = null;
try {
// Initialize source
- srcSession = localRepository.login(srcWkspName);
+ srcSession = javaRepository.login(srcWkspName);
Node srcRootNode = srcSession.getRootNode();
// Create the workspace -
// FIXME will throw an error if workspace already exists
javaRepoManager.createWorkspace(targetWkspName);
- targetSession = localRepository.login(targetWkspName);
+ targetSession = javaRepository.login(targetWkspName);
Node newRootNode = targetSession.getRootNode();
- RepoUtils.copy(srcRootNode, newRootNode);
+ RepoUtils.copy(srcRootNode, newRootNode, monitor);
targetSession.save();
JcrUtils.addPrivilege(targetSession, "/",
SlcConstants.ROLE_SLC, Privilege.JCR_ALL);
}
/* DEPENDENCY INJECTION */
- public void setNodeRepository(Repository nodeRepository) {
- this.nodeRepository = nodeRepository;
+ public void setJavaRepository(Repository javaRepository) {
+ this.javaRepository = javaRepository;
}
public void setJavaRepoManager(JavaRepoManager javaRepoManager) {
// log in the newly created workspace
newSession = repository.login(credentials, targetWkspName);
Node newRootNode = newSession.getRootNode();
- RepoUtils.copy(srcRootNode, newRootNode);
+ RepoUtils.copy(srcRootNode, newRootNode, monitor);
newSession.save();
JcrUtils.addPrivilege(newSession, "/", SlcConstants.ROLE_SLC,
Privilege.JCR_ALL);
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;
* 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);
new ArtifactIdComparator());
private Set<Artifact> sources = new TreeSet<Artifact>(
new ArtifactIdComparator());
-
+
// local cache
private ArtifactIndexer artifactIndexer = new ArtifactIndexer();
private Node allArtifactsHighestVersion;
* Generates binaries-, sources- and sdk-version.pom artifacts for the given
* version (or the highest of all children version if none is precised).
*
- * By default, it includes each latest version of all artifact of this group.
+ * By default, it includes each latest version of all artifact of this
+ * group.
*
- * The 3 generated artifacts are then marked as modular distributions and indexed.
+ * The 3 generated artifacts are then marked as modular distributions and
+ * indexed.
*/
public static void processGroupNode(Node groupNode, String version,
- ArgeoMonitor monitor)
- throws RepositoryException {
+ ArgeoMonitor monitor) throws RepositoryException {
// TODO set artifactsBase based on group node
GenerateBinaries gb = new GenerateBinaries();
String groupId = groupNode.getProperty(SlcNames.SLC_GROUP_BASE_ID)
}
}
}
-// if (log.isDebugEnabled()) {
-// int bundleCount = symbolicNamesToNodes.size();
-// log.debug("" + bundleCount + " bundles have been indexed for "
-// + groupId);
-// }
+ // if (log.isDebugEnabled()) {
+ // int bundleCount = symbolicNamesToNodes.size();
+ // log.debug("" + bundleCount + " bundles have been indexed for "
+ // + groupId);
+ // }
}
/** Does the real job : writes JCR META-DATA and generates binaries */
throw new SlcException("Group version " + version
+ " is empty.");
-// int bundleCount = symbolicNamesToNodes.size();
-//
-// int count = 1;
-// for (Node bundleNode : symbolicNamesToNodes.values()) {
-// if (log.isDebugEnabled())
-// log.debug("Processing " + bundleNode.getName() + " ( " + count
-// + "/" + bundleCount + " )");
-//
-// // processBundleArtifact(bundleNode);
-// // bundleNode.getSession().save();
-// count++;
-// }
+ // int bundleCount = symbolicNamesToNodes.size();
+ // int count = 1;
+ // for (Node bundleNode : symbolicNamesToNodes.values()) {
+ // if (log.isDebugEnabled())
+ // log.debug("Processing " + bundleNode.getName() + " ( " + count
+ // + "/" + bundleCount + " )");
+ //
+ // // processBundleArtifact(bundleNode);
+ // // bundleNode.getSession().save();
+ // count++;
+ // }
// indexes
Set<Artifact> indexes = new TreeSet<Artifact>(
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.StringTokenizer;
import java.util.TreeSet;
import javax.jcr.Node;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.jcr.SlcTypes;
import org.argeo.slc.repo.ArtifactIndexer;
-import org.argeo.slc.repo.NodeIndexer;
import org.argeo.slc.repo.RepoConstants;
import org.argeo.slc.repo.RepoUtils;
import org.argeo.slc.repo.maven.MavenConventionsUtils;
* Make sure that all JCR metadata and Maven metadata are consistent for this
* group of OSGi bundles.
*
- * The job is now done via the various {@code NodeIndexer} of the WorkspaceManager.
- * TODO import dependencies in the workspace.
+ * The job is now done via the various {@code NodeIndexer} of the
+ * WorkspaceManager. TODO import dependencies in the workspace.
*/
@Deprecated
public class NormalizeGroup implements Runnable, SlcNames {
SLC_ARTIFACT_VERSION).getString();
else
version = "0.0";
-// throw new SlcException("Group version " + version
-// + " is empty.");
+ // throw new SlcException("Group version " + version
+ // + " is empty.");
int bundleCount = symbolicNamesToNodes.size();
if (log.isDebugEnabled())
String rawVersion = artifactVersion.getProperty(SLC_ARTIFACT_VERSION)
.getString();
String cleanVersion = rawVersion.replace("-SNAPSHOT", ".SNAPSHOT");
- return new Version(cleanVersion);
+ Version osgiVersion = null;
+ // log invalid version value to enable tracking them
+ try {
+ osgiVersion = new Version(cleanVersion);
+ } catch (IllegalArgumentException e) {
+ log.error("Version string " + cleanVersion + " is invalid ");
+ String twickedVersion = twickInvalidVersion(cleanVersion);
+ osgiVersion = new Version(twickedVersion);
+ log.error("Using " + twickedVersion + " instead");
+ // throw e;
+ }
+ return osgiVersion;
+ }
+
+ private String twickInvalidVersion(String tmpVersion) {
+ String[] tokens = tmpVersion.split("\\.");
+ if (tokens.length == 3 && tokens[2].lastIndexOf("-") > 0) {
+ String newSuffix = tokens[2].replaceFirst("-", ".");
+ tmpVersion = tmpVersion.replaceFirst(tokens[2], newSuffix);
+ } else if (tokens.length > 4) {
+ // FIXME manually remove other "."
+ StringTokenizer st = new StringTokenizer(tmpVersion, ".", true);
+ StringBuilder builder = new StringBuilder();
+ // Major
+ builder.append(st.nextToken()).append(st.nextToken());
+ // Minor
+ builder.append(st.nextToken()).append(st.nextToken());
+ // Micro
+ builder.append(st.nextToken()).append(st.nextToken());
+ // Qualifier
+ builder.append(st.nextToken());
+ while (st.hasMoreTokens()) {
+ // consume delimiter
+ st.nextToken();
+ if (st.hasMoreTokens())
+ builder.append("-").append(st.nextToken());
+ }
+ tmpVersion = builder.toString();
+ }
+ return tmpVersion;
}
private Artifact writeIndex(Session session, String artifactId,
// TODO require bundles
-
-
List<Node> dependencyNodes = new ArrayList<Node>();
for (String depSymbName : dependenciesSymbolicNames) {
if (depSymbName.equals(ownSymbolicName))
return p.toString();
}
+ /* DEPENDENCY INJECTION */
public void setRepository(Repository repository) {
this.repository = repository;
}