String BASE_NODE_TYPE = "archiva:base";
- String NAMESPACE_NODE_TYPE = "archiva:namespace";
- String PROJECT_NODE_TYPE = "archiva:project";
+ String CONTENT_NODE_TYPE = "archiva:content";
+ String NAMESPACE_MIXIN_TYPE = "archiva:namespace";
+ String PROJECT_MIXIN_TYPE = "archiva:project";
String PROJECT_VERSION_NODE_TYPE = "archiva:projectVersion";
String ARTIFACT_NODE_TYPE = "archiva:artifact";
String REPOSITORY_NODE_TYPE = "archiva:repository";
String MIXIN_META_CI = "archiva:meta_ci";
String MIXIN_META_ISSUE = "archiva:meta_issue";
String MIXIN_META_ORGANIZATION = "archiva:meta_organization";
- String MIXIN_META_LICENSE = "archiva:meta_license";
- String MIXIN_META_MAILINGLIST = "archiva:meta_mailinglist";
String MAILINGLIST_NODE_TYPE = "archiva:mailinglist";
String MAILINGLISTS_FOLDER_TYPE = "archiva:mailinglists";
String LICENSES_FOLDER_TYPE = "archiva:licenses";
String CHECKSUMS_FOLDER_TYPE = "archiva:checksums";
String FACETS_FOLDER_TYPE = "archiva:facets";
String FACET_ID_CONTAINER_TYPE = "archiva:facetIdContainer";
+ String FOLDER_TYPE = "archiva:folder";
// Must be alphabetically ordered!
String[] PROJECT_VERSION_VERSION_PROPERTIES = {"ci.system","ci.url", "description", "incomplete", "issue.system","issue.url", "name", "org.name", "org.url", "url", "scm.connection", "scm.developerConnection", "scm.url"};
Iterator<Node> nodeIterator = JcrUtils.getChildNodes(root.getNode(namespacePath)).iterator();
while (nodeIterator.hasNext()) {
Node node = nodeIterator.next();
- if (node.isNodeType(org.apache.archiva.metadata.repository.jcr.JcrConstants.PROJECT_NODE_TYPE) && projectId.equals(node.getName())) {
+ if (node.isNodeType(org.apache.archiva.metadata.repository.jcr.JcrConstants.PROJECT_MIXIN_TYPE) && projectId.equals(node.getName())) {
node.remove();
}
}
String path = getNamespacePath(repositoryId, projectId);
if (root.hasNode(path)) {
Node node = root.getNode(path);
- if (node.isNodeType(NAMESPACE_NODE_TYPE)) {
+ if (node.isNodeType(NAMESPACE_MIXIN_TYPE)) {
node.remove();
}
}
: getRepositoryContentPath(repositoryId);
try {
- return getNodeNames(getSession(session), path, NAMESPACE_NODE_TYPE);
+ return getNodeNames(getSession(session), path, NAMESPACE_MIXIN_TYPE);
} catch (MetadataRepositoryException e) {
throw new MetadataResolutionException(e.getMessage());
}
public List<String> getProjects(RepositorySession session, String repositoryId, String namespace)
throws MetadataResolutionException {
try {
- return getNodeNames(getSession(session), getNamespacePath(repositoryId, namespace), org.apache.archiva.metadata.repository.jcr.JcrConstants.PROJECT_NODE_TYPE);
+ return getNodeNames(getSession(session), getNamespacePath(repositoryId, namespace), org.apache.archiva.metadata.repository.jcr.JcrConstants.PROJECT_MIXIN_TYPE);
} catch (MetadataRepositoryException e) {
throw new MetadataResolutionException(e.getMessage());
}
return node;
}
+ private Node getOrAddNodeByPath(Node baseNode, String name, String primaryType, String... mixinTypes)
+ throws RepositoryException {
+ log.debug("getOrAddNodeByPath baseNode={}, name={}, primary={}, mixin={}", baseNode, name, primaryType, mixinTypes);
+ Node node = baseNode;
+ for (String n : name.split("/")) {
+ node = JcrUtils.getOrAddNode(node, n, primaryType);
+ for (String mixin : mixinTypes) {
+ if (mixin != null && !node.isNodeType(mixin)) {
+ node.addMixin(mixin);
+ }
+
+ }
+ if (!node.hasProperty("id")) {
+ node.setProperty("id", n);
+ }
+ }
+ return node;
+ }
+
private static String getFacetPath(String repositoryId, String facetId, String name) {
return getFacetPath(repositoryId, facetId) + "/" + name;
}
Node root = jcrSession.getRootNode();
Node node = JcrUtils.getOrAddNode(root, "repositories");
log.debug("Repositories " + node);
- node = JcrUtils.getOrAddNode(node, repositoryId, JcrConstants.NT_UNSTRUCTURED);
- if (!node.isNodeType(org.apache.archiva.metadata.repository.jcr.JcrConstants.REPOSITORY_NODE_TYPE)) {
- node.addMixin(org.apache.archiva.metadata.repository.jcr.JcrConstants.REPOSITORY_NODE_TYPE);
- }
+ node = JcrUtils.getOrAddNode(node, repositoryId, REPOSITORY_NODE_TYPE);
if (!node.hasProperty("id")) {
node.setProperty("id", repositoryId);
}
private Node getOrAddRepositoryContentNode(Session jcrSession, String repositoryId)
throws RepositoryException {
Node node = getOrAddRepositoryNode(jcrSession, repositoryId);
- return JcrUtils.getOrAddNode(node, "content");
+ return JcrUtils.getOrAddNode(node, "content", CONTENT_NODE_TYPE);
}
private Node getOrAddNamespaceNode(Session jcrSession, String repositoryId, String namespace)
throws RepositoryException {
Node repo = getOrAddRepositoryContentNode(jcrSession, repositoryId);
- return getOrAddNodeByPath(repo, namespace.replace('.', '/'), NAMESPACE_NODE_TYPE);
+ return getOrAddNodeByPath(repo, namespace.replace('.', '/'), FOLDER_TYPE, NAMESPACE_MIXIN_TYPE);
}
private Node getOrAddProjectNode(Session jcrSession, String repositoryId, String namespace, String projectId)
throws RepositoryException {
Node namespaceNode = getOrAddNamespaceNode(jcrSession, repositoryId, namespace);
- Node node = JcrUtils.getOrAddNode(namespaceNode, projectId);
- if (!node.isNodeType(org.apache.archiva.metadata.repository.jcr.JcrConstants.PROJECT_NODE_TYPE)) {
- node.addMixin(org.apache.archiva.metadata.repository.jcr.JcrConstants.PROJECT_NODE_TYPE);
+ Node node = JcrUtils.getOrAddNode(namespaceNode, projectId, FOLDER_TYPE);
+ if (!node.isNodeType(PROJECT_MIXIN_TYPE)) {
+ node.addMixin(PROJECT_MIXIN_TYPE);
}
if (!node.hasProperty("id")) {
node.setProperty("id", projectId);
setProperty( JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME );
rules.setProperty( ":childOrder", ImmutableSet.of(
REPOSITORY_NODE_TYPE,
- NAMESPACE_NODE_TYPE, //
- PROJECT_NODE_TYPE,
+ NAMESPACE_MIXIN_TYPE, //
+ PROJECT_MIXIN_TYPE,
PROJECT_VERSION_NODE_TYPE, //
ARTIFACT_NODE_TYPE, //
FACET_NODE_TYPE //
idxBuilder.async( "async", "nrt", "sync" ).includedPaths( "/repositories" ).evaluatePathRestrictions();
initBaseRule(idxBuilder.indexRule( REPOSITORY_NODE_TYPE ));
- initBaseRule(idxBuilder.indexRule( NAMESPACE_NODE_TYPE ))
+ initBaseRule(idxBuilder.indexRule(NAMESPACE_MIXIN_TYPE))
.property( "namespace" ).propertyIndex().analyzed();
- initBaseRule(idxBuilder.indexRule( PROJECT_NODE_TYPE ))
+ initBaseRule(idxBuilder.indexRule(PROJECT_MIXIN_TYPE))
.property( "name" ).propertyIndex().analyzed().notNullCheckEnabled().nullCheckEnabled();
initBaseRule( idxBuilder.indexRule( PROJECT_VERSION_NODE_TYPE ) )
.property("name").propertyIndex().analyzed().notNullCheckEnabled().nullCheckEnabled()
idxBuilder.indexRule( MIXIN_META_ORGANIZATION )
.property( "org.name" ).propertyIndex( ).analyzed( )
.property( "org.url" ).propertyIndex( ).analyzed( );
- idxBuilder.indexRule( MIXIN_META_LICENSE )
+ idxBuilder.indexRule( LICENSE_NODE_TYPE )
.property( "license.name" ).propertyIndex( ).analyzed( )
.property( "license.url" ).propertyIndex( ).analyzed( );
- idxBuilder.indexRule( MIXIN_META_MAILINGLIST )
+ idxBuilder.indexRule( MAILINGLIST_NODE_TYPE )
.property( "name" ).propertyIndex().analyzed();
initBaseRule(idxBuilder.indexRule( DEPENDENCY_NODE_TYPE ))
.property( "groupId" ).propertyIndex().analyzed().ordered()