This is an automated email from the ASF dual-hosted git repository.
martin_s pushed a commit to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git
The following commit(s) were added to refs/heads/feature/storage_refactoring by
this push:
new a2dd2a1 Migrating to JCR primary types
a2dd2a1 is described below
commit a2dd2a16b830c318b0b724398486d4206d2348d0
Author: Martin Stockhammer <[email protected]>
AuthorDate: Mon Aug 26 19:12:50 2019 +0200
Migrating to JCR primary types
---
.../archiva/metadata/model/ArtifactMetadata.java | 6 ---
.../repository/AbstractMetadataRepositoryTest.java | 4 +-
.../metadata/repository/jcr/JcrConstants.java | 3 ++
.../repository/jcr/JcrMetadataRepository.java | 44 ++++++++++++----------
.../archiva/metadata/repository/jcr/jcr-schema.cnd | 26 ++++++++++---
5 files changed, 50 insertions(+), 33 deletions(-)
diff --git
a/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ArtifactMetadata.java
b/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ArtifactMetadata.java
index d8e9290..3ee8ea8 100644
---
a/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ArtifactMetadata.java
+++
b/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ArtifactMetadata.java
@@ -21,16 +21,10 @@ package org.apache.archiva.metadata.model;
import org.apache.archiva.checksum.ChecksumAlgorithm;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
-import sun.reflect.generics.repository.MethodRepository;
import javax.xml.bind.annotation.XmlRootElement;
import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
import java.time.ZonedDateTime;
-import java.time.temporal.TemporalAccessor;
-import java.util.Date;
-import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
diff --git
a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
index 668f45c..494ce81 100644
---
a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
+++
b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
@@ -924,7 +924,7 @@ public abstract class AbstractMetadataRepositoryTest
for (int i=0; i<10; i++) {
assertEquals(TEST_NAME + "/" + String.format("%03d",i),
result.get(i).getName());
}
- }, 3, 500 );
+ }, 5, 500 );
}
}
@@ -952,7 +952,7 @@ public abstract class AbstractMetadataRepositoryTest
for (int i=0; i<10; i++) {
assertEquals(TEST_NAME + "/" + String.format("%03d",i+5),
result.get(i).getName());
}
- }, 3, 500 );
+ }, 5, 500 );
}
}
diff --git
a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrConstants.java
b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrConstants.java
index d0119c7..330c060 100644
---
a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrConstants.java
+++
b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrConstants.java
@@ -46,6 +46,9 @@ public interface JcrConstants
String MIXIN_META_MAILINGLIST = "archiva:meta_mailinglist";
String DEPENDENCY_NODE_TYPE = "archiva:dependency";
String CHECKSUM_NODE_TYPE = "archiva:checksum";
+ String CHECKSUMS_FOLDER_TYPE = "archiva:checksums";
+ String FACETS_FOLDER_TYPE = "archiva:facets";
+ String FACET_ID_CONTAINER_TYPE = "archiva:facetIdContainer";
// 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"};
diff --git
a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index b11d560..eb06b0d 100644
---
a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++
b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -202,7 +202,7 @@ public class JcrMetadataRepository
node.setProperty( "size", artifactMeta.getSize() );
int idx=0;
- Node cslistNode = getOrAddNodeByPath( node, "checksums" );
+ Node cslistNode = getOrAddNodeByPath( node, "checksums",
CHECKSUMS_FOLDER_TYPE, true );
NodeIterator nit = cslistNode.getNodes("*");
while (nit.hasNext()) {
Node csNode = nit.nextNode();
@@ -234,8 +234,7 @@ public class JcrMetadataRepository
if ( metadataFacet != null )
{
// recreate, to ensure properties are removed
- Node n = node.addNode( facetId);
- n.addMixin( FACET_NODE_TYPE );
+ Node n = node.addNode( facetId, FACET_NODE_TYPE);
n.setProperty( "facetId", facetId );
for ( Map.Entry<String, String> entry :
metadataFacet.toProperties().entrySet() )
@@ -368,8 +367,7 @@ public class JcrMetadataRepository
{
versionNode.getNode( facet.getFacetId() ).remove();
}
- Node n = versionNode.addNode( facet.getFacetId() );
- n.addMixin( FACET_NODE_TYPE );
+ Node n = versionNode.addNode( facet.getFacetId(),
FACET_NODE_TYPE );
for ( Map.Entry<String, String> entry :
facet.toProperties().entrySet() )
{
@@ -673,15 +671,17 @@ public class JcrMetadataRepository
try
{
Node repo = getOrAddRepositoryNode( jcrSession, repositoryId );
- Node facets = JcrUtils.getOrAddNode( repo, "facets" );
+ Node facets = JcrUtils.getOrAddNode( repo, "facets",
FACETS_FOLDER_TYPE);
String id = metadataFacet.getFacetId();
- Node facetNode = JcrUtils.getOrAddNode( facets, id );
+ Node facetNode = JcrUtils.getOrAddNode( facets, id,
FACET_ID_CONTAINER_TYPE );
+ if (!facetNode.hasProperty("id")) {
+ facetNode.setProperty("id", id);
+ }
- Node facetInstance = getOrAddNodeByPath( facetNode,
metadataFacet.getName() );
- if (!facetInstance.isNodeType( FACET_NODE_TYPE ))
+ Node facetInstance = getOrAddNodeByPath( facetNode,
metadataFacet.getName(), FACET_NODE_TYPE, true );
+ if (!facetInstance.hasProperty( "archiva:facetId"))
{
- facetInstance.addMixin( FACET_NODE_TYPE );
facetInstance.setProperty( "archiva:facetId", id );
facetInstance.setProperty( "archiva:name",
metadataFacet.getName( ) );
}
@@ -1796,17 +1796,25 @@ public class JcrMetadataRepository
return getOrAddNodeByPath( baseNode, name, null );
}
- private Node getOrAddNodeByPath( Node baseNode, String name, String
nodeType )
+ private Node getOrAddNodeByPath( Node baseNode, String name, String
nodeType ) throws RepositoryException {
+ return getOrAddNodeByPath(baseNode, name, nodeType, false);
+ }
+
+ private Node getOrAddNodeByPath( Node baseNode, String name, String
nodeType, boolean primaryType )
throws RepositoryException
{
log.debug( "getOrAddNodeByPath " + baseNode + " " + name + " " +
nodeType );
Node node = baseNode;
for ( String n : name.split( "/" ) )
{
- node = JcrUtils.getOrAddNode( node, n );
- if ( nodeType != null && !node.isNodeType( nodeType ))
- {
- node.addMixin( nodeType );
+ if (nodeType!=null && primaryType) {
+ node = JcrUtils.getOrAddNode( node, n, nodeType );
+ } else {
+ node = JcrUtils.getOrAddNode( node, n);
+ if ( nodeType != null && !node.isNodeType( nodeType ))
+ {
+ node.addMixin( nodeType );
+ }
}
if (!node.hasProperty( "id" )) {
node.setProperty( "id", n );
@@ -1892,11 +1900,7 @@ public class JcrMetadataRepository
throws RepositoryException
{
Node versionNode = getOrAddProjectVersionNode( jcrSession,
repositoryId, namespace, projectId, projectVersion );
- Node node = JcrUtils.getOrAddNode( versionNode, id);
- if (!node.isNodeType( ARTIFACT_NODE_TYPE ))
- {
- node.addMixin( ARTIFACT_NODE_TYPE );
- }
+ Node node = JcrUtils.getOrAddNode( versionNode, id,
ARTIFACT_NODE_TYPE);
if (!node.hasProperty( "id" )) {
node.setProperty( "id", id );
}
diff --git
a/archiva-modules/plugins/metadata-store-jcr/src/main/resources/org/apache/archiva/metadata/repository/jcr/jcr-schema.cnd
b/archiva-modules/plugins/metadata-store-jcr/src/main/resources/org/apache/archiva/metadata/repository/jcr/jcr-schema.cnd
index 7fdb678..1e7f3e7 100644
---
a/archiva-modules/plugins/metadata-store-jcr/src/main/resources/org/apache/archiva/metadata/repository/jcr/jcr-schema.cnd
+++
b/archiva-modules/plugins/metadata-store-jcr/src/main/resources/org/apache/archiva/metadata/repository/jcr/jcr-schema.cnd
@@ -17,6 +17,10 @@
* under the License.
*/
+/*
+ * JCR OAK does not support same name siblings. Which means we have to
+ * setup unique keys for list entries.
+ */
<archiva = 'http://archiva.apache.org/jcr'>
[archiva:base] abstract mixin
- id (string)
@@ -24,6 +28,7 @@
[archiva:repository] > archiva:base mixin
+ content (archiva:content) primary
+ + facets (nt:hierarchyNode)
[archiva:content] > archiva:base mixin
+ * (archiva:namespace)
@@ -81,7 +86,8 @@
[archiva:dependencies] mixin
+ * (archiva:dependency)
-[archiva:checksums]
+[archiva:checksums] > nt:hierarchyNode
+ - id (string)
+ * (archiva:checksum)
[archiva:checksum]
@@ -99,13 +105,23 @@
+ * (archiva:dependencies)
+ * (archiva:facet)
-[archiva:artifact] > archiva:base mixin
+
+
+[archiva:artifact] > archiva:base
- whenGathered (date)
- size (long)
- version (string)
- + * (archiva:checksum)
+ + checksums (archiva:checksums)
+ * (archiva:facet)
-[archiva:facet] > archiva:base mixin
+[archiva:facets] > nt:hierarchyNode
+ + * (archiva:facetIdContainer)
+
+[archiva:facetIdContainer] > archiva:base
+ + * (archiva:facet)
+
+[archiva:facet] > archiva:base
- archiva:facetId
- - archiva:name
\ No newline at end of file
+ - archiva:name
+ - * (string)
+ + * (archiva:facet)