diff --git a/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Properties.java b/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Properties.java new file mode 100644 index 0000000..e7addc7 --- /dev/null +++ b/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Properties.java @@ -0,0 +1,48 @@ +package org.carlspring.strongbox.db.schema; + +/** + * @author ankit.tomar + */ +public interface Properties +{ + + String UUID = "uuid"; + String STORAGE_ID = "storageId"; + String REPOSITORY_ID = "repositoryId"; + String NAME = "name"; + String LAST_UPDATED = "lastUpdated"; + String SIZE_IN_BYTES = "sizeInBytes"; + String LAST_USED = "lastUsed"; + String CREATED = "created"; + String DOWNLOAD_COUNT = "downloadCount"; + String CHECKSUMS = "checksums"; + String CACHED = "cached"; + String VERSION = "version"; + String USERNAME = "username"; + String PASSWORD = "password"; + String ENABLED = "enabled"; + String ROLES = "roles"; + String SECURITY_TOKEN_KEY = "securityTokenKey"; + String SOURCE_ID = "sourceId"; + String FILE_NAMES = "filenames"; + String COORDINATES_EXTENSION = "coordinates.extension"; + String COORDINATES_NAME = "coordinates.name"; + String COORDINATES_GROUP_ID = "coordinates.groupId"; + String COORDINATES_ARTIFACT_ID = "coordinates.artifactId"; + String COORDINATES_CLASSIFIER = "coordinates.classifier"; + String COORDINATES_SCOPE = "coordinates.scope"; + String COORDINATES_ID = "coordinates.id"; + String COORDINATES_FILENAME = "coordinates.filename"; + String COORDINATES_BUILD = "coordinates.build"; + String COORDINATES_ABI = "coordinates.abi"; + String COORDINATES_PLATFORM = "coordinates.platform"; + String COORDINATES_PACKAGING = "coordinates.packaging"; + String COORDINATES_DISTRIBUTION = "coordinates.distribution"; + String COORDINATES_PATH = "coordinates.path"; + String COORDINATES_BASE_NAME = "coordinates.base_name"; + String COORDINATES_RELEASE = "coordinates.release"; + String COORDINATES_ARCHITECTURE = "coordinates.architecture"; + String COORDINATES_PACKAGE_TYPE = "coordinates.package_type"; + String COORDINATES_LANGUAGE_IMPLEMENTATION_VERSION = "coordinates.languageImplementationVersion"; + +} diff --git a/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/StrongboxSchema.java b/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/StrongboxSchema.java index 2e599c5..cd7485b 100644 --- a/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/StrongboxSchema.java +++ b/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/StrongboxSchema.java @@ -5,16 +5,53 @@ import static org.carlspring.strongbox.db.schema.Edges.ARTIFACT_HAS_ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Edges.ARTIFACT_HAS_TAGS; import static org.carlspring.strongbox.db.schema.Edges.REMOTE_ARTIFACT_INHERIT_ARTIFACT; +import static org.carlspring.strongbox.db.schema.Properties.CACHED; +import static org.carlspring.strongbox.db.schema.Properties.CHECKSUMS; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_ABI; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_ARCHITECTURE; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_ARTIFACT_ID; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_BASE_NAME; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_BUILD; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_CLASSIFIER; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_DISTRIBUTION; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_EXTENSION; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_FILENAME; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_GROUP_ID; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_ID; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_LANGUAGE_IMPLEMENTATION_VERSION; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_NAME; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_PACKAGE_TYPE; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_PACKAGING; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_PATH; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_PLATFORM; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_RELEASE; +import static org.carlspring.strongbox.db.schema.Properties.COORDINATES_SCOPE; +import static org.carlspring.strongbox.db.schema.Properties.CREATED; +import static org.carlspring.strongbox.db.schema.Properties.DOWNLOAD_COUNT; +import static org.carlspring.strongbox.db.schema.Properties.ENABLED; +import static org.carlspring.strongbox.db.schema.Properties.FILE_NAMES; +import static org.carlspring.strongbox.db.schema.Properties.LAST_UPDATED; +import static org.carlspring.strongbox.db.schema.Properties.LAST_USED; +import static org.carlspring.strongbox.db.schema.Properties.NAME; +import static org.carlspring.strongbox.db.schema.Properties.PASSWORD; +import static org.carlspring.strongbox.db.schema.Properties.REPOSITORY_ID; +import static org.carlspring.strongbox.db.schema.Properties.ROLES; +import static org.carlspring.strongbox.db.schema.Properties.SECURITY_TOKEN_KEY; +import static org.carlspring.strongbox.db.schema.Properties.SIZE_IN_BYTES; +import static org.carlspring.strongbox.db.schema.Properties.SOURCE_ID; +import static org.carlspring.strongbox.db.schema.Properties.STORAGE_ID; +import static org.carlspring.strongbox.db.schema.Properties.UUID; +import static org.carlspring.strongbox.db.schema.Properties.VERSION; import static org.carlspring.strongbox.db.schema.Vertices.ARTIFACT; import static org.carlspring.strongbox.db.schema.Vertices.ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Vertices.ARTIFACT_ID_GROUP; import static org.carlspring.strongbox.db.schema.Vertices.ARTIFACT_TAG; import static org.carlspring.strongbox.db.schema.Vertices.GENERIC_ARTIFACT_COORDINATES; -import static org.carlspring.strongbox.db.schema.Vertices.RAW_ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Vertices.MAVEN_ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Vertices.NPM_ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Vertices.NUGET_ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Vertices.PYPI_ARTIFACT_COORDINATES; +import static org.carlspring.strongbox.db.schema.Vertices.RAW_ARTIFACT_COORDINATES; import static org.carlspring.strongbox.db.schema.Vertices.REMOTE_ARTIFACT; import static org.carlspring.strongbox.db.schema.Vertices.USER; import static org.janusgraph.core.Multiplicity.MANY2ONE; @@ -35,6 +72,7 @@ import org.janusgraph.core.JanusGraph; import org.janusgraph.core.Multiplicity; import org.janusgraph.core.PropertyKey; +import org.janusgraph.core.VertexLabel; import org.janusgraph.core.schema.ConsistencyModifier; import org.janusgraph.core.schema.EdgeLabelMaker; import org.janusgraph.core.schema.JanusGraphIndex; @@ -134,78 +172,78 @@ protected Set createIndexes(JanusGraph jg, Vertex.class, jgm.getVertexLabel(ARTIFACT), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(REMOTE_ARTIFACT), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(RAW_ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(MAVEN_ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(NPM_ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(NUGET_ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(PYPI_ARTIFACT_COORDINATES), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(ARTIFACT_TAG), true, true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(ARTIFACT_ID_GROUP), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(ARTIFACT_ID_GROUP), false, false, - jgm.getPropertyKey("storageId"), - jgm.getPropertyKey("repositoryId")).ifPresent(result::add); + jgm.getPropertyKey(STORAGE_ID), + jgm.getPropertyKey(REPOSITORY_ID)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(ARTIFACT_ID_GROUP), true, - jgm.getPropertyKey("storageId"), - jgm.getPropertyKey("repositoryId"), - jgm.getPropertyKey("name")).ifPresent(result::add); + jgm.getPropertyKey(STORAGE_ID), + jgm.getPropertyKey(REPOSITORY_ID), + jgm.getPropertyKey(NAME)).ifPresent(result::add); buildIndexIfNecessary(jgm, Vertex.class, jgm.getVertexLabel(USER), true, - jgm.getPropertyKey("uuid")).ifPresent(result::add); + jgm.getPropertyKey(UUID)).ifPresent(result::add); return result; } @@ -235,71 +273,247 @@ private void applySchemaChanges(JanusGraphManagement jgm) makeEdgeLabelIfDoesNotExist(jgm, REMOTE_ARTIFACT_INHERIT_ARTIFACT, ONE2ONE); makeEdgeLabelIfDoesNotExist(jgm, ARTIFACT_COORDINATES_INHERIT_GENERIC_ARTIFACT_COORDINATES, ONE2ONE); makeEdgeLabelIfDoesNotExist(jgm, ARTIFACT_GROUP_HAS_ARTIFACTS, ONE2MANY); - + + // Add property constraints + applyPropertyConstraints(jgm); + + // Add connection constraints + applyConnectionConstraints(jgm); + } + + private void applyConnectionConstraints(JanusGraphManagement jgm) + { + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_HAS_ARTIFACT_COORDINATES), + jgm.getVertexLabel(ARTIFACT), + jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_HAS_TAGS), + jgm.getVertexLabel(ARTIFACT), + jgm.getVertexLabel(ARTIFACT_TAG)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_GROUP_HAS_ARTIFACTS), + jgm.getVertexLabel(ARTIFACT_ID_GROUP), + jgm.getVertexLabel(ARTIFACT)); + + jgm.addConnection(jgm.getEdgeLabel(REMOTE_ARTIFACT_INHERIT_ARTIFACT), + jgm.getVertexLabel(REMOTE_ARTIFACT), + jgm.getVertexLabel(ARTIFACT)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_COORDINATES_INHERIT_GENERIC_ARTIFACT_COORDINATES), + jgm.getVertexLabel(RAW_ARTIFACT_COORDINATES), + jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_COORDINATES_INHERIT_GENERIC_ARTIFACT_COORDINATES), + jgm.getVertexLabel(NUGET_ARTIFACT_COORDINATES), + jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_COORDINATES_INHERIT_GENERIC_ARTIFACT_COORDINATES), + jgm.getVertexLabel(NPM_ARTIFACT_COORDINATES), + jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_COORDINATES_INHERIT_GENERIC_ARTIFACT_COORDINATES), + jgm.getVertexLabel(MAVEN_ARTIFACT_COORDINATES), + jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES)); + + jgm.addConnection(jgm.getEdgeLabel(ARTIFACT_COORDINATES_INHERIT_GENERIC_ARTIFACT_COORDINATES), + jgm.getVertexLabel(PYPI_ARTIFACT_COORDINATES), + jgm.getVertexLabel(GENERIC_ARTIFACT_COORDINATES)); + + } + + private void applyPropertyConstraints(JanusGraphManagement jgm) + { + // Vertex Property Constraints + addVertexPropertyConstraints(jgm, + ARTIFACT, + UUID, + STORAGE_ID, + REPOSITORY_ID, + CREATED, + LAST_UPDATED, + LAST_USED, + SIZE_IN_BYTES, + DOWNLOAD_COUNT, + FILE_NAMES, + CHECKSUMS); + + addVertexPropertyConstraints(jgm, + REMOTE_ARTIFACT, + UUID, + CACHED, + CREATED); + + addVertexPropertyConstraints(jgm, + GENERIC_ARTIFACT_COORDINATES, + UUID, + VERSION, + COORDINATES_ID, + COORDINATES_EXTENSION, + COORDINATES_NAME, + COORDINATES_PATH, + COORDINATES_SCOPE, + COORDINATES_GROUP_ID, + COORDINATES_ARTIFACT_ID, + COORDINATES_CLASSIFIER, + COORDINATES_DISTRIBUTION, + COORDINATES_BUILD, + COORDINATES_ABI, + COORDINATES_PLATFORM, + COORDINATES_PACKAGING, + COORDINATES_LANGUAGE_IMPLEMENTATION_VERSION, + CREATED); + + addVertexPropertyConstraints(jgm, + RAW_ARTIFACT_COORDINATES, + UUID, + VERSION, + COORDINATES_EXTENSION, + COORDINATES_NAME, + COORDINATES_PATH, + CREATED); + + addVertexPropertyConstraints(jgm, + MAVEN_ARTIFACT_COORDINATES, + UUID, + VERSION, + COORDINATES_EXTENSION, + COORDINATES_NAME, + COORDINATES_GROUP_ID, + COORDINATES_ARTIFACT_ID, + COORDINATES_CLASSIFIER, + CREATED); + + addVertexPropertyConstraints(jgm, + NPM_ARTIFACT_COORDINATES, + UUID, + VERSION, + COORDINATES_EXTENSION, + COORDINATES_NAME, + COORDINATES_SCOPE, + CREATED); + + addVertexPropertyConstraints(jgm, + NUGET_ARTIFACT_COORDINATES, + UUID, + VERSION, + COORDINATES_EXTENSION, + COORDINATES_NAME, + COORDINATES_ID, + CREATED); + + addVertexPropertyConstraints(jgm, + PYPI_ARTIFACT_COORDINATES, + UUID, + VERSION, + COORDINATES_EXTENSION, + COORDINATES_NAME, + COORDINATES_BUILD, + COORDINATES_ABI, + COORDINATES_PLATFORM, + COORDINATES_PACKAGING, + COORDINATES_DISTRIBUTION, + COORDINATES_LANGUAGE_IMPLEMENTATION_VERSION, + CREATED); + + addVertexPropertyConstraints(jgm, + ARTIFACT_TAG, + UUID, + CREATED); + + addVertexPropertyConstraints(jgm, + ARTIFACT_ID_GROUP, + UUID, + STORAGE_ID, + REPOSITORY_ID, + NAME, + CREATED); + + addVertexPropertyConstraints(jgm, + USER, + UUID, + PASSWORD, + ENABLED, + ROLES, + SECURITY_TOKEN_KEY, + SOURCE_ID, + CREATED, + LAST_UPDATED); + } + + private void addVertexPropertyConstraints(JanusGraphManagement jgm, + String vertex, + String... propertykeys) + { + VertexLabel vertexLabel = jgm.getVertexLabel(vertex); + for (String propertyKey : propertykeys) + { + jgm.addProperties(vertexLabel, jgm.getPropertyKey(propertyKey)); + } } private void createProperties(JanusGraphManagement jgm) { - makePropertyKeyIfDoesNotExist(jgm, "uuid", String.class).ifPresent(p -> jgm.setConsistency(p, ConsistencyModifier.LOCK)); - makePropertyKeyIfDoesNotExist(jgm, "storageId", String.class); - makePropertyKeyIfDoesNotExist(jgm, "repositoryId", String.class); - makePropertyKeyIfDoesNotExist(jgm, "name", String.class); - makePropertyKeyIfDoesNotExist(jgm, "lastUpdated", Long.class, Cardinality.SINGLE); - - //Artifact - makePropertyKeyIfDoesNotExist(jgm, "sizeInBytes", Long.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "lastUsed", Long.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "created", Long.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "downloadCount", Integer.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "filenames", String.class, Cardinality.SET); - makePropertyKeyIfDoesNotExist(jgm, "checksums", String.class, Cardinality.SET); - - //RemoteArtifact - makePropertyKeyIfDoesNotExist(jgm, "cached", Boolean.class, Cardinality.SINGLE); - - //Common coordinates - makePropertyKeyIfDoesNotExist(jgm, "version", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.extension", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.name", String.class, Cardinality.SINGLE); - - //Maven - makePropertyKeyIfDoesNotExist(jgm, "coordinates.groupId", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.artifactId", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.classifier", String.class, Cardinality.SINGLE); - - //Npm - makePropertyKeyIfDoesNotExist(jgm, "coordinates.scope", String.class, Cardinality.SINGLE); - - //Nuget - makePropertyKeyIfDoesNotExist(jgm, "coordinates.id", String.class, Cardinality.SINGLE); - - //P2 - makePropertyKeyIfDoesNotExist(jgm, "coordinates.filename", String.class, Cardinality.SINGLE); - - //Pypi - makePropertyKeyIfDoesNotExist(jgm, "coordinates.build", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.languageImplementationVersion", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.abi", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.platform", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.packaging", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.distribution", String.class, Cardinality.SINGLE); - - //Raw - makePropertyKeyIfDoesNotExist(jgm, "coordinates.path", String.class, Cardinality.SINGLE); - - //Rpm - makePropertyKeyIfDoesNotExist(jgm, "coordinates.base_name", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.release", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.architecture", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "coordinates.package_type", String.class, Cardinality.SINGLE); - - //User - makePropertyKeyIfDoesNotExist(jgm, "username", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "password", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "enabled", Boolean.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "roles", String.class, Cardinality.SET); - makePropertyKeyIfDoesNotExist(jgm, "securityTokenKey", String.class, Cardinality.SINGLE); - makePropertyKeyIfDoesNotExist(jgm, "sourceId", String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, UUID, + String.class).ifPresent(p -> jgm.setConsistency(p, ConsistencyModifier.LOCK)); + makePropertyKeyIfDoesNotExist(jgm, STORAGE_ID, String.class); + makePropertyKeyIfDoesNotExist(jgm, REPOSITORY_ID, String.class); + makePropertyKeyIfDoesNotExist(jgm, NAME, String.class); + makePropertyKeyIfDoesNotExist(jgm, LAST_UPDATED, Long.class, Cardinality.SINGLE); + + // Artifact + makePropertyKeyIfDoesNotExist(jgm, SIZE_IN_BYTES, Long.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, LAST_USED, Long.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, CREATED, Long.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, DOWNLOAD_COUNT, Integer.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, FILE_NAMES, String.class, Cardinality.SET); + makePropertyKeyIfDoesNotExist(jgm, CHECKSUMS, String.class, Cardinality.SET); + + // RemoteArtifact + makePropertyKeyIfDoesNotExist(jgm, CACHED, Boolean.class, Cardinality.SINGLE); + + // Common coordinates + makePropertyKeyIfDoesNotExist(jgm, VERSION, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_EXTENSION, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_NAME, String.class, Cardinality.SINGLE); + + // Maven + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_GROUP_ID, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_ARTIFACT_ID, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_CLASSIFIER, String.class, Cardinality.SINGLE); + + // Npm + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_SCOPE, String.class, Cardinality.SINGLE); + + // Nuget + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_ID, String.class, Cardinality.SINGLE); + + // P2 + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_FILENAME, String.class, Cardinality.SINGLE); + + // Pypi + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_BUILD, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_LANGUAGE_IMPLEMENTATION_VERSION, String.class, + Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_ABI, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_PLATFORM, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_PACKAGING, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_DISTRIBUTION, String.class, Cardinality.SINGLE); + + // Raw + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_PATH, String.class, Cardinality.SINGLE); + + // Rpm + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_BASE_NAME, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_RELEASE, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_ARCHITECTURE, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, COORDINATES_PACKAGE_TYPE, String.class, Cardinality.SINGLE); + + // User + makePropertyKeyIfDoesNotExist(jgm, PASSWORD, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, ENABLED, Boolean.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, ROLES, String.class, Cardinality.SET); + makePropertyKeyIfDoesNotExist(jgm, SECURITY_TOKEN_KEY, String.class, Cardinality.SINGLE); + makePropertyKeyIfDoesNotExist(jgm, SOURCE_ID, String.class, Cardinality.SINGLE); } private Optional buildIndexIfNecessary(final JanusGraphManagement jgm, diff --git a/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Vertices.java b/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Vertices.java index b1727a5..1e2cc25 100644 --- a/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Vertices.java +++ b/strongbox-db-schema/src/main/java/org/carlspring/strongbox/db/schema/Vertices.java @@ -7,16 +7,13 @@ public interface Vertices String REMOTE_ARTIFACT = "RemoteArtifact"; String GENERIC_ARTIFACT_COORDINATES = "GenericArtifactCoordinates"; String ARTIFACT_COORDINATES = "ArtifactCoordinates"; - String RAW_ARTIFACT_COORDINATES = "RawArtifactCoordinates"; String MAVEN_ARTIFACT_COORDINATES = "MavenArtifactCoordinates"; String NPM_ARTIFACT_COORDINATES = "NpmArtifactCoordinates"; String NUGET_ARTIFACT_COORDINATES = "NugetArtifactCoordinates"; String PYPI_ARTIFACT_COORDINATES = "PypiArtifactCoordinates"; String RPM_ARTIFACT_COORDINATES = "RpmArtifactCoordinates"; - String ARTIFACT_TAG = "ArtifactTag"; String ARTIFACT_ID_GROUP = "ArtifactIdGroup"; - String USER = "User"; } diff --git a/strongbox-db-server/src/main/java/org/strongbox/db/server/EmbeddedJanusGraphWithCassandraServer.java b/strongbox-db-server/src/main/java/org/strongbox/db/server/EmbeddedJanusGraphWithCassandraServer.java index 4167f06..be51cff 100644 --- a/strongbox-db-server/src/main/java/org/strongbox/db/server/EmbeddedJanusGraphWithCassandraServer.java +++ b/strongbox-db-server/src/main/java/org/strongbox/db/server/EmbeddedJanusGraphWithCassandraServer.java @@ -122,8 +122,11 @@ private JanusGraph provideJanusGraphInstance() .set("storage.password", janusGraphProperties.getStoragePassword()) .set("storage.cql.keyspace", "strongbox") - .set("storage.cql.only-use-local-consistency-for-system-operations", true) + .set("storage.cql.only-use-local-consistency-for-system-operations", + true) .set("tx.log-tx", true) + .set("schema.default", "none") + .set("schema.constraints", true) .open(); try diff --git a/strongbox-db-server/src/main/java/org/strongbox/db/server/InMemoryJanusGraphServer.java b/strongbox-db-server/src/main/java/org/strongbox/db/server/InMemoryJanusGraphServer.java index 27e6cc9..ccbda62 100644 --- a/strongbox-db-server/src/main/java/org/strongbox/db/server/InMemoryJanusGraphServer.java +++ b/strongbox-db-server/src/main/java/org/strongbox/db/server/InMemoryJanusGraphServer.java @@ -75,6 +75,8 @@ private JanusGraph provideJanusGraphInstance() JanusGraph janusGraphLocal = JanusGraphFactory.build() .set("storage.backend", "inmemory") + .set("schema.default", "none") + .set("schema.constraints", true) .open(); try