Search in sources :

Example 76 with Vre

use of nl.knaw.huygens.timbuctoo.model.vre.Vre in project timbuctoo by HuygensING.

the class RdfImportSessionTest method setUp.

@Before
public void setUp() throws Exception {
    dataStoreOperations = mock(DataStoreOperations.class);
    Vres vres = new VresBuilder().withVre(VRE_NAME, "prefix", vre -> vre.withCollection("prefixanyCols")).build();
    vre = vres.getVre(VRE_NAME);
    given(dataStoreOperations.ensureVreExists(VRE_NAME)).willReturn(vre);
    given(dataStoreOperations.loadVres()).willReturn(vres);
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) CoreMatchers.equalTo(org.hamcrest.CoreMatchers.equalTo) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) RdfImportSessionStubs.rdfImportSessionWithErrorReporter(nl.knaw.huygens.timbuctoo.core.RdfImportSessionStubs.rdfImportSessionWithErrorReporter) CreateCollection(nl.knaw.huygens.timbuctoo.core.dto.CreateCollection) Collection(nl.knaw.huygens.timbuctoo.core.dto.dataset.Collection) CreateProperty(nl.knaw.huygens.timbuctoo.core.dto.rdf.CreateProperty) ArrayList(java.util.ArrayList) Mockito.verifyZeroInteractions(org.mockito.Mockito.verifyZeroInteractions) Matchers.hasProperty(org.hamcrest.Matchers.hasProperty) Lists(com.google.common.collect.Lists) BDDMockito.given(org.mockito.BDDMockito.given) MockitoHamcrest.argThat(org.mockito.hamcrest.MockitoHamcrest.argThat) VresBuilder(nl.knaw.huygens.timbuctoo.model.vre.vres.VresBuilder) Before(org.junit.Before) PredicateInUse(nl.knaw.huygens.timbuctoo.core.dto.rdf.PredicateInUse) InOrder(org.mockito.InOrder) Test(org.junit.Test) RdfImportSessionStubs.rdfImportSessionWithPropertyFactory(nl.knaw.huygens.timbuctoo.core.RdfImportSessionStubs.rdfImportSessionWithPropertyFactory) Vres(nl.knaw.huygens.timbuctoo.model.vre.Vres) Mockito.verify(org.mockito.Mockito.verify) List(java.util.List) Mockito.never(org.mockito.Mockito.never) PropertyFactory(nl.knaw.huygens.timbuctoo.core.rdf.PropertyFactory) Mockito.inOrder(org.mockito.Mockito.inOrder) Vre(nl.knaw.huygens.timbuctoo.model.vre.Vre) Mockito.mock(org.mockito.Mockito.mock) Vres(nl.knaw.huygens.timbuctoo.model.vre.Vres) VresBuilder(nl.knaw.huygens.timbuctoo.model.vre.vres.VresBuilder) Before(org.junit.Before)

Example 77 with Vre

use of nl.knaw.huygens.timbuctoo.model.vre.Vre in project timbuctoo by HuygensING.

the class TinkerPopOperations method ensureVreExists.

@Override
public Vre ensureVreExists(String vreName) {
    Vre vre = VreBuilder.vre(vreName, vreName).withCollection(vreName + "relations", CollectionBuilder::isRelationCollection).build();
    saveVre(vre);
    return vre;
}
Also used : Vre(nl.knaw.huygens.timbuctoo.model.vre.Vre)

Example 78 with Vre

use of nl.knaw.huygens.timbuctoo.model.vre.Vre in project timbuctoo by HuygensING.

the class JsonMetadata method getForCollection.

private JsonNode getForCollection(Collection collection, List<Vertex> relations, boolean withCollectionInfo) {
    ArrayNode result = jsnA();
    collection.getWriteableProperties().forEach((name, prop) -> {
        ObjectNode desc = jsnO("name", jsn(name), "type", jsn(prop.getTypeId()));
        prop.getOptions().ifPresent(options -> desc.set("options", jsnA(options.stream().map(JsonBuilder::jsn))));
        prop.getParts().ifPresent(parts -> desc.set("options", jsnA(parts.stream().map(JsonBuilder::jsn))));
        result.add(desc);
    });
    // FIXME add check to vres that certifies that the defined derived relations exist in the database
    String abstractType = collection.getAbstractType();
    Vre vre = collection.getVre();
    Map<String, String> keywordTypes = vre.getKeywordTypes();
    String relationCollectionName = vre.getImplementerOf("relation").map(Collection::getCollectionName).orElse(null);
    if (relationCollectionName == null) {
        LOG.warn(Logmarkers.databaseInvariant, "Collection {} seems to have no relationCollections", collection.getCollectionName());
    }
    relations.stream().filter(v -> getProp(v, "relationtype_sourceTypeName", String.class).orElse("").equals(abstractType)).forEach(v -> {
        String timId = getProp(v, "tim_id", String.class).orElse("<unknown>");
        Optional<String> regularName = getProp(v, "relationtype_regularName", String.class);
        Optional<String> inverseName = getProp(v, "relationtype_inverseName", String.class);
        Optional<String> abstractTargetType = getProp(v, "relationtype_targetTypeName", String.class);
        Optional<String> targetType = abstractTargetType.flatMap(typeName -> vre.getImplementerOf(typeName).map(Collection::getCollectionName));
        if (regularName.isPresent() && inverseName.isPresent() && targetType.isPresent()) {
            // special support for keywords:
            URI quickSearchUrl;
            if (abstractTargetType.orElse("").equals("keyword")) {
                quickSearchUrl = Autocomplete.makeUrl(targetType.get(), Optional.empty(), Optional.ofNullable(keywordTypes.get(regularName.get())));
            } else {
                quickSearchUrl = Autocomplete.makeUrl(targetType.get());
            }
            boolean isSymmetric = getProp(v, "relationtype_symmetric", Boolean.class).orElse(false);
            result.add(jsnO("name", jsn(regularName.get()), "type", jsn("relation"), "quicksearch", jsn(quickSearchUrl.toString()), "relation", jsnO(// for search
            "direction", isSymmetric ? jsn("BOTH") : jsn("OUT"), "outName", jsn(regularName.get()), "inName", jsn(inverseName.get()), "targetCollection", jsn(targetType.get()), // for CRUD
            "relationCollection", jsn(relationCollectionName), "relationTypeId", jsn(timId))));
        } else {
            if (!regularName.isPresent() || !inverseName.isPresent() || !abstractTargetType.isPresent()) {
                LOG.error(Logmarkers.databaseInvariant, "RelationType should have a relationtype_regularName, relationtype_inverseName and " + "relationtype_targetTypeName, but one of those is missing for " + v.id());
            }
        }
    });
    relations.stream().filter(v -> {
        final String targetType = getProp(v, "relationtype_targetTypeName", String.class).orElse("");
        final boolean isSymmetric = getProp(v, "relationtype_symmetric", Boolean.class).orElse(false);
        if (isSymmetric) {
            final String sourceType = getProp(v, "relationtype_sourceTypeName", String.class).orElse("");
            return targetType.equals(abstractType) && !sourceType.equals(targetType);
        } else {
            return targetType.equals(abstractType);
        }
    }).forEach(v -> {
        String timId = getProp(v, "tim_id", String.class).orElse("<unknown>");
        Optional<String> regularName = getProp(v, "relationtype_regularName", String.class);
        Optional<String> inverseName = getProp(v, "relationtype_inverseName", String.class);
        Optional<String> abstractTargetType = getProp(v, "relationtype_sourceTypeName", String.class);
        Optional<String> targetType = abstractTargetType.flatMap(typeName -> vre.getImplementerOf(typeName).map(Collection::getCollectionName));
        if (regularName.isPresent() && inverseName.isPresent() && targetType.isPresent()) {
            // special support for keywords:
            URI quickSearchUrl;
            if (abstractTargetType.orElse("").equals("keyword")) {
                quickSearchUrl = Autocomplete.makeUrl(targetType.get(), Optional.empty(), Optional.ofNullable(keywordTypes.get(regularName.get())));
            } else {
                quickSearchUrl = Autocomplete.makeUrl(targetType.get());
            }
            result.add(jsnO("name", jsn(inverseName.get()), "type", jsn("relation"), "quicksearch", jsn(quickSearchUrl.toString()), "relation", jsnO(// for search
            "direction", jsn("IN"), "outName", jsn(regularName.get()), "inName", jsn(inverseName.get()), "targetCollection", jsn(targetType.get()), // for CRUD
            "relationCollection", jsn(relationCollectionName), "relationTypeId", jsn(timId))));
        } else {
            if (!regularName.isPresent() || !inverseName.isPresent() || !abstractTargetType.isPresent()) {
                LOG.error(Logmarkers.databaseInvariant, "RelationType should have a relationtype_regularName, relationtype_inverseName and " + "relationtype_targetTypeName, but one of those is missing for " + v.id());
            }
        }
    });
    if (withCollectionInfo) {
        return jsnO("collectionName", jsn(collection.getCollectionName()), "collectionLabel", jsn(collection.getCollectionLabel()), "description", jsn(collection.getDescription()), "unknown", jsn(collection.isUnknown()), "relationCollection", jsn(collection.isRelationCollection()), "archetypeName", jsn(collection.getAbstractType()), "properties", result);
    } else {
        return result;
    }
}
Also used : JsonBuilder.jsnO(nl.knaw.huygens.timbuctoo.util.JsonBuilder.jsnO) Logger(org.slf4j.Logger) Autocomplete(nl.knaw.huygens.timbuctoo.server.endpoints.v2.domain.Autocomplete) JsonBuilder(nl.knaw.huygens.timbuctoo.util.JsonBuilder) LabelP(org.apache.tinkerpop.gremlin.neo4j.process.traversal.LabelP) Collection(nl.knaw.huygens.timbuctoo.core.dto.dataset.Collection) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) T(org.apache.tinkerpop.gremlin.structure.T) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Logmarkers(nl.knaw.huygens.timbuctoo.logging.Logmarkers) Vres(nl.knaw.huygens.timbuctoo.model.vre.Vres) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) List(java.util.List) GraphWrapper(nl.knaw.huygens.timbuctoo.server.GraphWrapper) Stream(java.util.stream.Stream) Map(java.util.Map) JsonBuilder.jsnA(nl.knaw.huygens.timbuctoo.util.JsonBuilder.jsnA) Vre(nl.knaw.huygens.timbuctoo.model.vre.Vre) Optional(java.util.Optional) GraphReadUtils.getProp(nl.knaw.huygens.timbuctoo.model.GraphReadUtils.getProp) JsonNode(com.fasterxml.jackson.databind.JsonNode) URI(java.net.URI) JsonBuilder.jsn(nl.knaw.huygens.timbuctoo.util.JsonBuilder.jsn) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) Vre(nl.knaw.huygens.timbuctoo.model.vre.Vre) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) URI(java.net.URI)

Example 79 with Vre

use of nl.knaw.huygens.timbuctoo.model.vre.Vre in project timbuctoo by HuygensING.

the class TripleImporterIntegrationTest method prepareAddsANewVreWithDefaultCollectionsToTheDatabase.

@Test
public void prepareAddsANewVreWithDefaultCollectionsToTheDatabase() {
    Vre vre = timbuctooActions.getVre(VRE_NAME);
    assertThat(vre, is(notNullValue()));
    Optional<Collection> relationsOpt = vre.getCollectionForCollectionName(RELATION_COLLECTION_NAME);
    assertThat(relationsOpt, is(present()));
    Optional<Collection> unknownsCollection = vre.getCollectionForCollectionName(DEFAULT_COLLECTION_NAME);
    assertThat(unknownsCollection, is(present()));
}
Also used : Vre(nl.knaw.huygens.timbuctoo.model.vre.Vre) Collection(nl.knaw.huygens.timbuctoo.core.dto.dataset.Collection) Test(org.junit.Test)

Example 80 with Vre

use of nl.knaw.huygens.timbuctoo.model.vre.Vre in project timbuctoo by HuygensING.

the class TripleImporterIntegrationTest method importTripleShouldMapToARelationBetweenTheSubjectAndAnExistingObjectVertex.

@Test
public void importTripleShouldMapToARelationBetweenTheSubjectAndAnExistingObjectVertex() throws Exception {
    final Triple abadan = createTripleIterator(ABADAN_POINT_TRIPLE).next();
    final Triple iran = createTripleIterator(IRAN_POINT_TRIPLE).next();
    final Triple relation = createTripleIterator(ABADAN_IS_PART_OF_IRAN_TRIPLE).next();
    instance.importTriple(true, abadan);
    instance.importTriple(true, iran);
    instance.importTriple(true, relation);
    rdfImportSession.commit();
    rdfImportSession.close();
    Collection collectionMetadata = timbuctooActions.getCollectionMetadata(DEFAULT_COLLECTION_NAME);
    DataStream<ReadEntity> result = timbuctooActions.getCollection(collectionMetadata, 0, 10, false, (entity, entityVertex) -> {
    }, (traversalSource, vre, target, relationRef) -> {
    });
    assertThat(result.map(readEntity -> readEntity), hasSize(2));
}
Also used : Triple(org.apache.jena.graph.Triple) TripleCreator.createSingleTriple(nl.knaw.huygens.timbuctoo.rdf.TripleCreator.createSingleTriple) ReadEntity(nl.knaw.huygens.timbuctoo.core.dto.ReadEntity) TripleCreator.createTripleIterator(nl.knaw.huygens.timbuctoo.rdf.TripleCreator.createTripleIterator) CoreMatchers.hasItem(org.hamcrest.CoreMatchers.hasItem) CoreMatchers.equalTo(org.hamcrest.CoreMatchers.equalTo) RdfImportSession(nl.knaw.huygens.timbuctoo.core.RdfImportSession) TimbuctooActionsStubs(nl.knaw.huygens.timbuctoo.core.TimbuctooActionsStubs) Collection(nl.knaw.huygens.timbuctoo.core.dto.dataset.Collection) TripleCreator.createSingleTripleWithLiteralObject(nl.knaw.huygens.timbuctoo.rdf.TripleCreator.createSingleTripleWithLiteralObject) Matchers.hasProperty(org.hamcrest.Matchers.hasProperty) VresBuilder(nl.knaw.huygens.timbuctoo.model.vre.vres.VresBuilder) TimbuctooActions(nl.knaw.huygens.timbuctoo.core.TimbuctooActions) CoreMatchers.allOf(org.hamcrest.CoreMatchers.allOf) Matchers.hasSize(org.hamcrest.Matchers.hasSize) OptionalPresentMatcher.present(nl.knaw.huygens.hamcrest.OptionalPresentMatcher.present) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) TestGraphBuilder.newGraph(nl.knaw.huygens.timbuctoo.util.TestGraphBuilder.newGraph) Before(org.junit.Before) RelationType(nl.knaw.huygens.timbuctoo.core.dto.RelationType) CollectionNameHelper(nl.knaw.huygens.timbuctoo.core.CollectionNameHelper) TinkerPopOperations(nl.knaw.huygens.timbuctoo.database.tinkerpop.TinkerPopOperations) Matchers.notNullValue(org.hamcrest.Matchers.notNullValue) DataStream(nl.knaw.huygens.timbuctoo.core.dto.DataStream) TinkerPopGraphManager(nl.knaw.huygens.timbuctoo.server.TinkerPopGraphManager) CollectionBuilder(nl.knaw.huygens.timbuctoo.core.dto.dataset.CollectionBuilder) EntityFinisherHelper(nl.knaw.huygens.timbuctoo.core.EntityFinisherHelper) Triple(org.apache.jena.graph.Triple) TripleCreator.createSingleTriple(nl.knaw.huygens.timbuctoo.rdf.TripleCreator.createSingleTriple) Test(org.junit.Test) Vres(nl.knaw.huygens.timbuctoo.model.vre.Vres) ReadEntity(nl.knaw.huygens.timbuctoo.core.dto.ReadEntity) List(java.util.List) Matchers.contains(org.hamcrest.Matchers.contains) Matchers.containsInAnyOrder(org.hamcrest.Matchers.containsInAnyOrder) Vre(nl.knaw.huygens.timbuctoo.model.vre.Vre) Optional(java.util.Optional) ExtendedIterator(org.apache.jena.util.iterator.ExtendedIterator) Matchers.is(org.hamcrest.Matchers.is) Collection(nl.knaw.huygens.timbuctoo.core.dto.dataset.Collection) Test(org.junit.Test)

Aggregations

Vre (nl.knaw.huygens.timbuctoo.model.vre.Vre)81 Test (org.junit.Test)71 TinkerPopGraphManager (nl.knaw.huygens.timbuctoo.server.TinkerPopGraphManager)48 Vertex (org.apache.tinkerpop.gremlin.structure.Vertex)46 VreStubs.minimalCorrectVre (nl.knaw.huygens.timbuctoo.model.vre.VreStubs.minimalCorrectVre)44 VertexMatcher.likeVertex (nl.knaw.huygens.timbuctoo.util.VertexMatcher.likeVertex)43 Collection (nl.knaw.huygens.timbuctoo.core.dto.dataset.Collection)41 Matchers.containsString (org.hamcrest.Matchers.containsString)35 List (java.util.List)34 Lists (com.google.common.collect.Lists)32 Optional (java.util.Optional)31 RdfProperty (nl.knaw.huygens.timbuctoo.core.dto.rdf.RdfProperty)31 CreateCollection (nl.knaw.huygens.timbuctoo.core.dto.CreateCollection)30 TestGraphBuilder.newGraph (nl.knaw.huygens.timbuctoo.util.TestGraphBuilder.newGraph)30 Direction (org.apache.tinkerpop.gremlin.structure.Direction)30 Graph (org.apache.tinkerpop.gremlin.structure.Graph)30 MatcherAssert.assertThat (org.hamcrest.MatcherAssert.assertThat)30 Matchers.contains (org.hamcrest.Matchers.contains)30 Matchers.containsInAnyOrder (org.hamcrest.Matchers.containsInAnyOrder)30 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)29