use of org.apache.rya.indexing.entity.model.Property in project incubator-rya by apache.
the class DuplicateDataDetectorIT method testProperty.
/**
* Creates two entities to test where one property is different from the
* other. Multiple different values for the property are provided by
* {@code testInputs}.
* @param testInputs the {@link List} of {@link TestInput} to insert into
* the property.
* @param typeIdUri the type ID {@link RyaURI} that the property falls
* under. (not {@code null})
* @param propertyNameUri the property name {@link RyaURI}.
* (not {@code null})
* @param equivalentTermsMap the {@link Map} of terms that are considered
* equivalent to each other.
* @throws SmartUriException
*/
private static void testProperty(final List<TestInput> testInputs, final RyaURI typeIdUri, final RyaURI propertyNameUri, final Map<String, List<String>> equivalentTermsMap) throws SmartUriException {
requireNonNull(typeIdUri);
requireNonNull(propertyNameUri);
final Entity entity1 = createBobEntity();
int count = 0;
for (final TestInput testInput : testInputs) {
System.out.println("Test #" + count + ": " + testInput.toString());
final Object testValue = testInput.getValue();
final Tolerance tolerance = testInput.getTolerance();
final boolean expected = testInput.getExpected();
final Builder builder = new Builder(entity1);
final RyaType ryaType = RyaTypeUtils.getRyaTypeForClass(testValue.getClass(), testValue);
builder.setProperty(typeIdUri, new Property(propertyNameUri, ryaType));
final Entity entity2 = builder.build();
final DuplicateDataDetector duplicateDataDetector = new DuplicateDataDetector(tolerance, equivalentTermsMap);
final boolean areDuplicates = duplicateDataDetector.compareEntities(entity1, entity2);
final String originalValue = entity1.lookupTypeProperty(typeIdUri, propertyNameUri).get().getValue().getData();
final String message = createErrorMessage(originalValue, testValue, expected, areDuplicates, tolerance);
assertEquals(message, expected, areDuplicates);
count++;
}
}
use of org.apache.rya.indexing.entity.model.Property in project incubator-rya by apache.
the class DuplicateDataDetectorIT method testCreateEntityNearDuplicateConfigDisabled.
@Test
public void testCreateEntityNearDuplicateConfigDisabled() throws EntityStorageException, TypeStorageException, ConfigurationException, ObjectStorageException {
// Create the types the Entity uses.
final TypeStorage typeStorage = new MongoTypeStorage(super.getMongoClient(), RYA_INSTANCE_NAME);
final Type personType = createPersonType();
final Type employeeType = createEmployeeType();
typeStorage.create(personType);
typeStorage.create(employeeType);
final Optional<Type> storedPersonType = typeStorage.get(personType.getId());
final Optional<Type> storedEmployeeType = typeStorage.get(employeeType.getId());
assertTrue(storedPersonType.isPresent());
assertTrue(storedEmployeeType.isPresent());
// Create it.
final DuplicateDataConfig duplicateDataConfig = new DuplicateDataConfig(// boolean
new Tolerance(0.0, ToleranceType.DIFFERENCE), // byte
new Tolerance(0.0, ToleranceType.DIFFERENCE), // date
new Tolerance(500.0, ToleranceType.DIFFERENCE), // double
new Tolerance(0.0001, ToleranceType.PERCENTAGE), // float
new Tolerance(0.0001, ToleranceType.PERCENTAGE), // integer
new Tolerance(1.0, ToleranceType.DIFFERENCE), // long
new Tolerance(1.0, ToleranceType.DIFFERENCE), // short
new Tolerance(1.0, ToleranceType.DIFFERENCE), // string
new Tolerance(1.0, ToleranceType.DIFFERENCE), // uri
new Tolerance(1.0, ToleranceType.DIFFERENCE), new HashMap<String, List<String>>(), false);
final DuplicateDataDetector duplicateDataDetector = new DuplicateDataDetector(duplicateDataConfig);
final EntityStorage entityStorage = new MongoEntityStorage(super.getMongoClient(), RYA_INSTANCE_NAME, duplicateDataDetector);
final Entity bobEntity = createBobEntity();
entityStorage.create(bobEntity);
assertTrue(entityStorage.get(bobEntity.getSubject()).isPresent());
final Builder duplicateBobBuilder = Entity.builder(createBobEntity());
duplicateBobBuilder.setSubject(createRyaUri("Robert"));
// Modify a property for each type that is within tolerance
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 41)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, floatRyaType(250.76f)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, doubleRyaType(72.499)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, intRyaType(50001)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, byteRyaType((byte) 2)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, longRyaType(123456789013L)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, dateRyaType(new DateTime(NOW.getTime() - 1).minusYears(40))));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, dateRyaType(new Date(NOW.getTime() - 1))));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, booleanRyaType(true)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, uriRyaType(new URIImpl("mailto:bob.smitch01@gmail.com"))));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, stringRyaType("124 Fake St. Washington, DC 20024")));
duplicateBobBuilder.setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, shortRyaType((short) 556)));
final Entity duplicateBobEntity = duplicateBobBuilder.build();
// Data duplication detection is disabled so it will be created.
try {
entityStorage.create(duplicateBobEntity);
} catch (final EntityNearDuplicateException e) {
fail();
}
assertTrue(entityStorage.get(duplicateBobEntity.getSubject()).isPresent());
final Builder notDuplicateBobBuilder = Entity.builder(createBobEntity());
notDuplicateBobBuilder.setSubject(createRyaUri("Not Bob"));
// Modify a property for each type that is within tolerance
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 50)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, floatRyaType(300.0f)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, doubleRyaType(100.0)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, intRyaType(60000)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, byteRyaType((byte) 5)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, longRyaType(9L)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, dateRyaType(new DateTime(NOW.getTime() - 10000000L).minusYears(40))));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, dateRyaType(new Date(NOW.getTime() - 10000000L))));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, booleanRyaType(false)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, uriRyaType(new URIImpl("mailto:bad.email.address@gmail.com"))));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, stringRyaType("123456789 Fake St. Washington, DC 20024")));
notDuplicateBobBuilder.setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, shortRyaType((short) 1000)));
final Entity notDuplicateBobEntity = notDuplicateBobBuilder.build();
// Data duplication detection is disabled so it will be created.
try {
entityStorage.create(notDuplicateBobEntity);
} catch (final EntityNearDuplicateException e) {
fail();
}
assertTrue(entityStorage.get(notDuplicateBobEntity.getSubject()).isPresent());
}
use of org.apache.rya.indexing.entity.model.Property in project incubator-rya by apache.
the class DuplicateDataDetectorIT method testCreateEntityNearDuplicate.
@Test
public void testCreateEntityNearDuplicate() throws EntityStorageException, TypeStorageException, ObjectStorageException {
// Create the types the Entity uses.
final TypeStorage typeStorage = new MongoTypeStorage(super.getMongoClient(), RYA_INSTANCE_NAME);
final Type personType = createPersonType();
final Type employeeType = createEmployeeType();
typeStorage.create(personType);
typeStorage.create(employeeType);
final Optional<Type> storedPersonType = typeStorage.get(personType.getId());
final Optional<Type> storedEmployeeType = typeStorage.get(employeeType.getId());
assertTrue(storedPersonType.isPresent());
assertTrue(storedEmployeeType.isPresent());
// Create it.
final DuplicateDataConfig duplicateDataConfig = new DuplicateDataConfig(// boolean
new Tolerance(0.0, ToleranceType.DIFFERENCE), // byte
new Tolerance(0.0, ToleranceType.DIFFERENCE), // date
new Tolerance(500.0, ToleranceType.DIFFERENCE), // double
new Tolerance(0.0001, ToleranceType.PERCENTAGE), // float
new Tolerance(0.0001, ToleranceType.PERCENTAGE), // integer
new Tolerance(1.0, ToleranceType.DIFFERENCE), // long
new Tolerance(1.0, ToleranceType.DIFFERENCE), // short
new Tolerance(1.0, ToleranceType.DIFFERENCE), // string
new Tolerance(1.0, ToleranceType.DIFFERENCE), // uri
new Tolerance(1.0, ToleranceType.DIFFERENCE), new HashMap<String, List<String>>(), true);
final DuplicateDataDetector duplicateDataDetector = new DuplicateDataDetector(duplicateDataConfig);
final EntityStorage entityStorage = new MongoEntityStorage(super.getMongoClient(), RYA_INSTANCE_NAME, duplicateDataDetector);
final Entity bobEntity = createBobEntity();
entityStorage.create(bobEntity);
assertTrue(entityStorage.get(bobEntity.getSubject()).isPresent());
final Builder duplicateBobBuilder = Entity.builder(createBobEntity());
duplicateBobBuilder.setSubject(createRyaUri("Robert"));
// Modify a property for each type that is within tolerance
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 41)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, floatRyaType(250.76f)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, doubleRyaType(72.499)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, intRyaType(50001)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, byteRyaType((byte) 2)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, longRyaType(123456789013L)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, dateRyaType(new DateTime(NOW.getTime() - 1).minusYears(40))));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, dateRyaType(new Date(NOW.getTime() - 1))));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, booleanRyaType(true)));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, uriRyaType(new URIImpl("mailto:bob.smitch01@gmail.com"))));
duplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, stringRyaType("124 Fake St. Washington, DC 20024")));
duplicateBobBuilder.setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, shortRyaType((short) 556)));
final Entity duplicateBobEntity = duplicateBobBuilder.build();
// Try to create another entity that's considered a duplicate.
// It will NOT be be created.
boolean hasDuplicate = false;
try {
entityStorage.create(duplicateBobEntity);
} catch (final EntityNearDuplicateException e) {
hasDuplicate = true;
}
assertTrue(hasDuplicate);
assertFalse(entityStorage.get(duplicateBobEntity.getSubject()).isPresent());
final Builder notDuplicateBobBuilder = Entity.builder(createBobEntity());
notDuplicateBobBuilder.setSubject(createRyaUri("Not Bob"));
// Modify a property for each type that is within tolerance
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 50)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, floatRyaType(300.0f)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, doubleRyaType(100.0)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, intRyaType(60000)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, byteRyaType((byte) 5)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, longRyaType(9L)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, dateRyaType(new DateTime(NOW.getTime() - 10000000L).minusYears(40))));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, dateRyaType(new Date(NOW.getTime() - 10000000L))));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, booleanRyaType(false)));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, uriRyaType(new URIImpl("mailto:bad.email.address@gmail.com"))));
notDuplicateBobBuilder.setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, stringRyaType("123456789 Fake St. Washington, DC 20024")));
notDuplicateBobBuilder.setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, shortRyaType((short) 1000)));
final Entity notDuplicateBobEntity = notDuplicateBobBuilder.build();
// It will be created.
try {
entityStorage.create(notDuplicateBobEntity);
} catch (final EntityNearDuplicateException e) {
fail();
}
assertTrue(entityStorage.get(notDuplicateBobEntity.getSubject()).isPresent());
}
use of org.apache.rya.indexing.entity.model.Property in project incubator-rya by apache.
the class SmartUriAdapter method mapToProperties.
/**
* Converts a {@link Map} of {@link URI}/{@link Value}s to a {@link Set} of
* {@link Property}s.
* @param map the {@link Map} of {@link URI}/{@link Value}.
* @return the {@link Set} of {@link Property}s.
*/
public static Set<Property> mapToProperties(final Map<URI, Value> map) {
final Set<Property> properties = new LinkedHashSet<>();
for (final Entry<URI, Value> entry : map.entrySet()) {
final URI uri = entry.getKey();
final Value value = entry.getValue();
final RyaURI ryaUri = new RyaURI(uri.stringValue());
final RyaType ryaType = RdfToRyaConversions.convertValue(value);
final Property property = new Property(ryaUri, ryaType);
properties.add(property);
}
return properties;
}
use of org.apache.rya.indexing.entity.model.Property in project incubator-rya by apache.
the class SmartUriAdapter method propertiesToMap.
public static Map<URI, Value> propertiesToMap(final Set<Property> properties) {
final Map<URI, Value> map = new LinkedHashMap<>();
for (final Property property : properties) {
final URI uri = new URIImpl(property.getName().getData());
final Value value = RyaToRdfConversions.convertValue(property.getValue());
map.put(uri, value);
}
return map;
}
Aggregations