use of org.apache.rya.indexing.entity.model.Entity in project incubator-rya by apache.
the class MongoEntityStorage method searchHasAllExplicitTypes.
/**
* Searches the Entity storage for all Entities that contain all the
* specified explicit type IDs.
* @param explicitTypeIds the {@link ImmutableList} of {@link RyaURI}s that
* are being searched for.
* @return the {@link List} of {@link Entity}s that have all the specified
* explicit type IDs. If nothing was found an empty {@link List} is
* returned.
* @throws EntityStorageException
*/
private List<Entity> searchHasAllExplicitTypes(final ImmutableList<RyaURI> explicitTypeIds) throws EntityStorageException {
final List<Entity> hasAllExplicitTypesEntities = new ArrayList<>();
if (!explicitTypeIds.isEmpty()) {
// Grab the first type from the explicit type IDs.
final RyaURI firstType = explicitTypeIds.get(0);
// Check if that type exists anywhere in storage.
final List<RyaURI> subjects = new ArrayList<>();
Optional<Type> type;
try {
if (mongoTypeStorage == null) {
mongoTypeStorage = new MongoTypeStorage(mongo, ryaInstanceName);
}
type = mongoTypeStorage.get(firstType);
} catch (final TypeStorageException e) {
throw new EntityStorageException("Unable to get entity type: " + firstType, e);
}
if (type.isPresent()) {
// Grab the subjects for all the types we found matching "firstType"
final ConvertingCursor<TypedEntity> cursor = search(Optional.empty(), type.get(), Collections.emptySet());
while (cursor.hasNext()) {
final TypedEntity typedEntity = cursor.next();
final RyaURI subject = typedEntity.getSubject();
subjects.add(subject);
}
}
// Now grab all the Entities that have the subjects we found.
for (final RyaURI subject : subjects) {
final Optional<Entity> entityFromSubject = get(subject);
if (entityFromSubject.isPresent()) {
final Entity candidateEntity = entityFromSubject.get();
// types they have.
if (candidateEntity.getExplicitTypeIds().containsAll(explicitTypeIds)) {
hasAllExplicitTypesEntities.add(candidateEntity);
}
}
}
}
return hasAllExplicitTypesEntities;
}
use of org.apache.rya.indexing.entity.model.Entity in project incubator-rya by apache.
the class DuplicateDataDetector method compareSmartUris.
/**
* Compares two Smart URI's to determine if they have nearly identical data.
* @param uri1 the first Smart {@link URI}. (not {@code null})
* @param uri2 the second Smart {@link URI}. (not {@code null})
* @return {@code true} if the two Smart URI's have nearly identical data.
* {@code false} otherwise.
* @throws SmartUriException
*/
public boolean compareSmartUris(final URI uri1, final URI uri2) throws SmartUriException {
requireNonNull(uri1);
requireNonNull(uri2);
final Entity entity1 = SmartUriAdapter.deserializeUriEntity(uri1);
final Entity entity2 = SmartUriAdapter.deserializeUriEntity(uri2);
return compareEntities(entity1, entity2);
}
use of org.apache.rya.indexing.entity.model.Entity in project incubator-rya by apache.
the class SmartUriAdapter method convertMapToEntity.
private static Entity convertMapToEntity(final RyaURI subject, final Map<RyaURI, Map<URI, Value>> map) {
final Entity.Builder entityBuilder = Entity.builder();
entityBuilder.setSubject(subject);
for (final Entry<RyaURI, Map<URI, Value>> typeEntry : map.entrySet()) {
final RyaURI type = typeEntry.getKey();
final Map<URI, Value> subMap = typeEntry.getValue();
entityBuilder.setExplicitType(type);
for (final Entry<URI, Value> entry : subMap.entrySet()) {
final URI uri = entry.getKey();
final Value value = entry.getValue();
final RyaURI ryaUri = new RyaURI(uri.stringValue());
final RyaURI ryaName = new RyaURI(uri.stringValue());
final RyaType ryaType = new RyaType(value.stringValue());
final Property property = new Property(ryaName, ryaType);
entityBuilder.setProperty(ryaUri, property);
}
}
final Entity entity = entityBuilder.build();
return entity;
}
use of org.apache.rya.indexing.entity.model.Entity in project incubator-rya by apache.
the class EntityQueryNodeIT method evaluate_constantObject.
@Test
public void evaluate_constantObject() throws Exception {
final EntityStorage storage = new MongoEntityStorage(super.getMongoClient(), "testDB");
final ValueFactory vf = ValueFactoryImpl.getInstance();
final RyaURI subject = new RyaURI("urn:SSN:111-11-1111");
final Entity entity = Entity.builder().setSubject(subject).setExplicitType(PERSON_TYPE.getId()).setProperty(PERSON_TYPE.getId(), new Property(new RyaURI("urn:age"), RdfToRyaConversions.convertLiteral(vf.createLiteral(20)))).setProperty(PERSON_TYPE.getId(), new Property(new RyaURI("urn:eye"), RdfToRyaConversions.convertLiteral(vf.createLiteral("blue")))).setProperty(PERSON_TYPE.getId(), new Property(new RyaURI("urn:name"), RdfToRyaConversions.convertLiteral(vf.createLiteral("Bob")))).build();
storage.create(entity);
// A set of patterns that match a sepecific Entity subject.
final List<StatementPattern> patterns = getSPs("SELECT * WHERE { " + "<urn:SSN:111-11-1111> <" + RDF.TYPE + "> <urn:person> ." + "<urn:SSN:111-11-1111> <urn:age> ?age . " + "<urn:SSN:111-11-1111> <urn:eye> \"blue\" . " + "<urn:SSN:111-11-1111> <urn:name> ?name . " + "}");
final EntityQueryNode node = new EntityQueryNode(PERSON_TYPE, patterns, storage);
final CloseableIteration<BindingSet, QueryEvaluationException> rez = node.evaluate(new MapBindingSet());
final MapBindingSet expected = new MapBindingSet();
expected.addBinding("age", vf.createLiteral("20"));
expected.addBinding("-const-blue", vf.createLiteral("blue"));
expected.addBinding("name", vf.createLiteral("Bob"));
while (rez.hasNext()) {
assertEquals(expected, rez.next());
break;
}
}
use of org.apache.rya.indexing.entity.model.Entity in project incubator-rya by apache.
the class MongoEntityStorageIT method search_byDataType.
@Test
public void search_byDataType() throws Exception {
final EntityStorage storage = new MongoEntityStorage(super.getMongoClient(), RYA_INSTANCE_NAME);
// The Type we will search by.
final Type icecreamType = new Type(new RyaURI("urn:icecream"), ImmutableSet.<RyaURI>builder().add(new RyaURI("urn:brand")).add(new RyaURI("urn:flavor")).add(new RyaURI("urn:cost")).build());
// Some Person typed entities.
final Entity alice = Entity.builder().setSubject(new RyaURI("urn:SSN/111-11-1111")).setExplicitType(new RyaURI("urn:person")).setProperty(new RyaURI("urn:person"), new Property(new RyaURI("urn:name"), new RyaType(XMLSchema.STRING, "Alice"))).setProperty(new RyaURI("urn:person"), new Property(new RyaURI("urn:age"), new RyaType(XMLSchema.INT, "30"))).setProperty(new RyaURI("urn:person"), new Property(new RyaURI("urn:eye"), new RyaType(XMLSchema.STRING, "blue"))).build();
final Entity bob = Entity.builder().setSubject(new RyaURI("urn:SSN/222-22-2222")).setExplicitType(new RyaURI("urn:person")).setProperty(new RyaURI("urn:person"), new Property(new RyaURI("urn:name"), new RyaType(XMLSchema.STRING, "Bob"))).setProperty(new RyaURI("urn:person"), new Property(new RyaURI("urn:age"), new RyaType(XMLSchema.INT, "57"))).setProperty(new RyaURI("urn:person"), new Property(new RyaURI("urn:eye"), new RyaType(XMLSchema.STRING, "blue"))).build();
// Some Icecream typed objects.
final Entity chocolateIcecream = Entity.builder().setSubject(new RyaURI("urn:GTIN-14/00012345600012")).setExplicitType(new RyaURI("urn:icecream")).setProperty(new RyaURI("urn:icecream"), new Property(new RyaURI("urn:brand"), new RyaType(XMLSchema.STRING, "Awesome Icecream"))).setProperty(new RyaURI("urn:icecream"), new Property(new RyaURI("urn:flavor"), new RyaType(XMLSchema.STRING, "Chocolate"))).build();
final Entity vanillaIcecream = Entity.builder().setSubject(new RyaURI("urn:GTIN-14/22356325213432")).setExplicitType(new RyaURI("urn:icecream")).setProperty(new RyaURI("urn:icecream"), new Property(new RyaURI("urn:brand"), new RyaType(XMLSchema.STRING, "Awesome Icecream"))).setProperty(new RyaURI("urn:icecream"), new Property(new RyaURI("urn:flavor"), new RyaType(XMLSchema.STRING, "Vanilla"))).build();
final Entity strawberryIcecream = Entity.builder().setSubject(new RyaURI("urn:GTIN-14/77544325436721")).setProperty(new RyaURI("urn:icecream"), new Property(new RyaURI("urn:brand"), new RyaType(XMLSchema.STRING, "Awesome Icecream"))).setProperty(new RyaURI("urn:icecream"), new Property(new RyaURI("urn:flavor"), new RyaType(XMLSchema.STRING, "Strawberry"))).build();
// Create the objects in the storage.
storage.create(alice);
storage.create(bob);
storage.create(chocolateIcecream);
storage.create(vanillaIcecream);
storage.create(strawberryIcecream);
// Search for all icecreams.
final Set<TypedEntity> objects = new HashSet<>();
try (final ConvertingCursor<TypedEntity> it = storage.search(Optional.empty(), icecreamType, new HashSet<>())) {
while (it.hasNext()) {
objects.add(it.next());
}
}
// Verify the expected results were returned.
final Set<TypedEntity> expected = Sets.newHashSet(chocolateIcecream.makeTypedEntity(new RyaURI("urn:icecream")).get(), vanillaIcecream.makeTypedEntity(new RyaURI("urn:icecream")).get());
assertEquals(expected, objects);
}
Aggregations