mirror of
https://github.com/apache/archiva.git
synced 2025-02-23 02:56:38 +00:00
Finishing JCR schema changes. Using dedicated primary types.
This commit is contained in:
parent
31fd0d917e
commit
392e444cb2
@ -32,8 +32,9 @@ public interface JcrConstants
|
||||
|
||||
|
||||
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";
|
||||
@ -42,8 +43,6 @@ public interface JcrConstants
|
||||
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";
|
||||
@ -54,6 +53,7 @@ public interface JcrConstants
|
||||
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"};
|
||||
|
@ -378,7 +378,7 @@ public void removeProject(RepositorySession session, String repositoryId, String
|
||||
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();
|
||||
}
|
||||
}
|
||||
@ -626,7 +626,7 @@ public void removeNamespace(RepositorySession session, String repositoryId, Stri
|
||||
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();
|
||||
}
|
||||
}
|
||||
@ -1196,7 +1196,7 @@ public List<String> getChildNamespaces(RepositorySession session, String reposit
|
||||
: 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());
|
||||
}
|
||||
@ -1206,7 +1206,7 @@ public List<String> getChildNamespaces(RepositorySession session, String reposit
|
||||
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());
|
||||
}
|
||||
@ -1557,6 +1557,25 @@ private Node getOrAddNodeByPath(Node baseNode, String name, String nodeType, boo
|
||||
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;
|
||||
}
|
||||
@ -1567,10 +1586,7 @@ private Node getOrAddRepositoryNode(Session jcrSession, String repositoryId)
|
||||
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);
|
||||
}
|
||||
@ -1580,21 +1596,21 @@ private Node getOrAddRepositoryNode(Session jcrSession, String 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);
|
||||
|
@ -458,8 +458,8 @@ public void initialize( NodeBuilder root )
|
||||
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 //
|
||||
@ -468,9 +468,9 @@ public void initialize( NodeBuilder root )
|
||||
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()
|
||||
@ -506,10 +506,10 @@ public void initialize( NodeBuilder root )
|
||||
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()
|
||||
|
@ -26,12 +26,19 @@
|
||||
- id (string)
|
||||
- jcr:lastModified (date)
|
||||
|
||||
[archiva:repository] > archiva:base mixin
|
||||
[archiva:repository] > archiva:base
|
||||
+ content (archiva:content) primary
|
||||
+ facets (nt:hierarchyNode)
|
||||
|
||||
[archiva:content] > archiva:base mixin
|
||||
+ * (archiva:namespace)
|
||||
[archiva:content] > archiva:base
|
||||
+ * (archiva:folder)
|
||||
|
||||
/*
|
||||
* Namespaces and projects can have the same path, so we add the generic folder
|
||||
* type as primary type. Namespace and project nodes are mixin types.
|
||||
*/
|
||||
[archiva:folder] > archiva:base
|
||||
+ * (archiva:folder)
|
||||
|
||||
[archiva:namespace] > archiva:base mixin
|
||||
- namespace (string)
|
||||
|
Loading…
x
Reference in New Issue
Block a user