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);
}
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;
}
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;
}
}
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()));
}
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));
}
Aggregations