public KeyAndPredicate<S, K> mergeWith(KeyAndPredicate<S, K> keyAndPredicate) { if (!this.key.equals(keyAndPredicate.key)) throw new IllegalArgumentException(); if (this.predicate == null || keyAndPredicate.predicate == null) { // null is equivalent to true return this; } if (this.predicate.equals(keyAndPredicate.predicate)) { return this; } return new KeyAndPredicate<S, K>(key, new OrPredicate<S>(predicate, keyAndPredicate.predicate)); }
private void addKeyTo(KeyAndPredicate<S, K> keyAndPredicate, List<KeyAndPredicate<S, K>> keyAndPredicates) { for(int i = 0; i < keyAndPredicates.size(); i++) { KeyAndPredicate<S, K> kp = keyAndPredicates.get(i); if (kp.key.equals(keyAndPredicate.key)) { keyAndPredicates.set(i, kp.mergeWith(keyAndPredicate)); return; } } keyAndPredicates.add(keyAndPredicate); }
private Key singleValueKeys(S source) throws Exception { Object value; if (singleKeyAndPredicate.test(source)) { value = keySourceGetter.getValue(singleKeyAndPredicate.key, source); } else { return NOT_EQUALS; } return new SingleValueKey(value); }
public KeyAndPredicate<S, K> mergeWith(KeyAndPredicate<S, K> keyAndPredicate) { if (!this.key.equals(keyAndPredicate.key)) throw new IllegalArgumentException(); if (this.predicate == null || keyAndPredicate.predicate == null) { // null is equivalent to true return this; } if (this.predicate.equals(keyAndPredicate.predicate)) { return this; } return new KeyAndPredicate<S, K>(key, new OrPredicate<S>(predicate, keyAndPredicate.predicate)); }
private Key singleValueKeys(S source) throws Exception { Object value; if (singleKeyAndPredicate.test(source)) { value = keySourceGetter.getValue(singleKeyAndPredicate.key, source); } else { return NOT_EQUALS; } return new SingleValueKey(value); }
private void addKeyTo(KeyAndPredicate<S, K> keyAndPredicate, List<KeyAndPredicate<S, K>> keyAndPredicates) { for(int i = 0; i < keyAndPredicates.size(); i++) { KeyAndPredicate<S, K> kp = keyAndPredicates.get(i); if (kp.key.equals(keyAndPredicate.key)) { keyAndPredicates.set(i, kp.mergeWith(keyAndPredicate)); return; } } keyAndPredicates.add(keyAndPredicate); }
@Test public void testKeysWithSubBuilder() { builder.addKey(new KeyAndPredicate<Object[], SampleFieldKey>(new SampleFieldKey("k1", 0), null)); MappingContextFactoryBuilder<Object[], SampleFieldKey> subBuilder = builder.newBuilder(Arrays.asList(new KeyAndPredicate<Object[], SampleFieldKey>(new SampleFieldKey("k2", 3), null)), null); subBuilder.newBuilder(Arrays.asList(new KeyAndPredicate<Object[], SampleFieldKey>(new SampleFieldKey("k3", 6), null)), null); MappingContextFactory<Object[]> mappingContextFactory = builder.build(); MappingContext<Object[]> mappingContext = mappingContextFactory.newContext(); }
private Key multiValueKeys(S source) throws Exception { Object[] values = new Object[keyAndPredicates.length]; boolean empty = true; for (int i = 0; i < values.length; i++) { Object value = null; KeyAndPredicate<S, K> keyAndPredicate = keyAndPredicates[i]; if (keyAndPredicate.test(source)) { empty = false; value = keySourceGetter.getValue(keyAndPredicate.key, source); } values[i] = value; } if (empty) return NOT_EQUALS; return new MultiValueKey(values); }
@SuppressWarnings("unchecked") private List<KeyAndPredicate<S, K>> getSubKeys(List<PropertyMapping<T, ?, K>> properties) { List<KeyAndPredicate<S, K>> keys = new ArrayList<KeyAndPredicate<S, K>>(); // look for keys property of the object for (PropertyMapping<T, ?, K> pm : properties) { Predicate<PropertyMeta<?, ?>> propertyMetaKeyPredicate = pm.getColumnDefinition().keyAppliesTo(); if (pm.getPropertyMeta().isSubProperty()) { SubPropertyMeta<T, ?, ?> subPropertyMeta = (SubPropertyMeta<T, ?, ?>) pm.getPropertyMeta(); if (!(JoinUtils.isArrayElement(subPropertyMeta.getSubProperty()))) { // ignore ArrayElementPropertyMeta as it's a direct getter and will be managed in the setter if (pm.getColumnDefinition().isKey()) { if (propertyMetaKeyPredicate.test(subPropertyMeta.getSubProperty())) { Predicate<? super S> predicate = buildKeyPredicate(subPropertyMeta.getSubProperty(), propertyMetaKeyPredicate);; keys.add(new KeyAndPredicate<S, K>(pm.getColumnKey(), predicate)); } } } } else { if (pm.getColumnDefinition().isKey()) { if (propertyMetaKeyPredicate.test(pm.getPropertyMeta())) { keys.add(new KeyAndPredicate<S, K>(pm.getColumnKey(), null)); } } } } return keys; }
@Override public boolean test(S s) { try { boolean empty = true; for (KeyAndPredicate<S, K> keyAndPredicate : keys) { if (keyAndPredicate.test(s)) { empty = false; if (keySourceGetter.getValue(keyAndPredicate.key, s) != null) { return false; } } } return !empty; } catch (Exception e) { ErrorHelper.rethrow(e); throw new IllegalStateException(); } }
@SuppressWarnings("unchecked") private List<KeyAndPredicate<S, K>> getSubKeys(List<PropertyMapping<T, ?, K>> properties) { List<KeyAndPredicate<S, K>> keys = new ArrayList<KeyAndPredicate<S, K>>(); // look for keys property of the object for (PropertyMapping<T, ?, K> pm : properties) { Predicate<PropertyMeta<?, ?>> propertyMetaKeyPredicate = pm.getColumnDefinition().keyAppliesTo(); if (pm.getPropertyMeta().isSubProperty()) { SubPropertyMeta<T, ?, ?> subPropertyMeta = (SubPropertyMeta<T, ?, ?>) pm.getPropertyMeta(); if (!(JoinUtils.isArrayElement(subPropertyMeta.getSubProperty()))) { // ignore ArrayElementPropertyMeta as it's a direct getter and will be managed in the setter if (pm.getColumnDefinition().isKey()) { if (propertyMetaKeyPredicate.test(subPropertyMeta.getSubProperty())) { Predicate<? super S> predicate = buildKeyPredicate(subPropertyMeta.getSubProperty(), propertyMetaKeyPredicate);; keys.add(new KeyAndPredicate<S, K>(pm.getColumnKey(), predicate)); } } } } else { if (pm.getColumnDefinition().isKey()) { if (propertyMetaKeyPredicate.test(pm.getPropertyMeta())) { keys.add(new KeyAndPredicate<S, K>(pm.getColumnKey(), null)); } } } } return keys; }
@Override public boolean test(S s) { try { boolean empty = true; for (KeyAndPredicate<S, K> keyAndPredicate : keys) { if (keyAndPredicate.test(s)) { empty = false; if (keySourceGetter.getValue(keyAndPredicate.key, s) != null) { return false; } } } return !empty; } catch (Exception e) { ErrorHelper.rethrow(e); throw new IllegalStateException(); } }
@Test public void testBreakDetector() throws Exception { KeySourceGetter<SampleFieldKey, Object> keySourceGetter = mock(KeySourceGetter.class); Object object = new Object(); SampleFieldKey key = new SampleFieldKey("k", 1); when(keySourceGetter.getValue(key, object)).thenReturn(new byte[] {1, 2}, new byte[] {1, 2}, new byte[] {1, 3}); KeyDefinition<Object, SampleFieldKey> keyDefinition = new KeyDefinition<Object, SampleFieldKey>( new KeyAndPredicate[] { new KeyAndPredicate<Object[], SampleFieldKey>(key, null) }, keySourceGetter, 0); BreakDetector<Object> breakDetector = new BreakDetector<Object>(keyDefinition); assertTrue(breakDetector.broke(object)); assertFalse(breakDetector.broke(object)); assertTrue(breakDetector.broke(object)); } }
private Key multiValueKeys(S source) throws Exception { Object[] values = new Object[keyAndPredicates.length]; boolean empty = true; for (int i = 0; i < values.length; i++) { Object value = null; KeyAndPredicate<S, K> keyAndPredicate = keyAndPredicates[i]; if (keyAndPredicate.test(source)) { empty = false; value = keySourceGetter.getValue(keyAndPredicate.key, source); } values[i] = value; } if (empty) return NOT_EQUALS; return new MultiValueKey(values); }
@Override @SuppressWarnings("unchecked") public final ConstantSourceMapperBuilder<S, T, K> addMapping(K key, final ColumnDefinition<K, ?> columnDefinition) { final ColumnDefinition<K, ?> composedDefinition = columnDefinition.compose(mapperConfig.columnDefinitions().getColumnDefinition(key)); final K mappedColumnKey = composedDefinition.rename(key); FieldMapperProperty prop = columnDefinition.lookFor(FieldMapperProperty.class); if (prop != null) { addMapper((FieldMapper<S, T>) prop.getFieldMapper()); } else { PropertyMapping<T, ?, K> propertyMapping = propertyMappingsBuilder.addProperty(mappedColumnKey, composedDefinition); if (propertyMapping != null) { ColumnDefinition<K, ?> effectiveColumnDefinition = propertyMapping.getColumnDefinition(); Predicate<PropertyMeta<?, ?>> keyAppliesTo = effectiveColumnDefinition.keyAppliesTo(); if (effectiveColumnDefinition.isKey() && keyAppliesTo.test(propertyMapping.getPropertyMeta())) { Predicate<S> predicate = buildKeyPredicate(propertyMapping.getPropertyMeta(), keyAppliesTo); mappingContextFactoryBuilder.addKey(new KeyAndPredicate<S, K>(mappedColumnKey, predicate)); } } } return this; }
@Override @SuppressWarnings("unchecked") public final ConstantSourceMapperBuilder<S, T, K> addMapping(K key, final ColumnDefinition<K, ?> columnDefinition) { final ColumnDefinition<K, ?> composedDefinition = columnDefinition.compose(mapperConfig.columnDefinitions().getColumnDefinition(key)); final K mappedColumnKey = composedDefinition.rename(key); FieldMapperProperty prop = columnDefinition.lookFor(FieldMapperProperty.class); if (prop != null) { addMapper((FieldMapper<S, T>) prop.getFieldMapper()); } else { PropertyMapping<T, ?, K> propertyMapping = propertyMappingsBuilder.addProperty(mappedColumnKey, composedDefinition); if (propertyMapping != null) { ColumnDefinition<K, ?> effectiveColumnDefinition = propertyMapping.getColumnDefinition(); Predicate<PropertyMeta<?, ?>> keyAppliesTo = effectiveColumnDefinition.keyAppliesTo(); if (effectiveColumnDefinition.isKey() && keyAppliesTo.test(propertyMapping.getPropertyMeta())) { Predicate<S> predicate = buildKeyPredicate(propertyMapping.getPropertyMeta(), keyAppliesTo); mappingContextFactoryBuilder.addKey(new KeyAndPredicate<S, K>(mappedColumnKey, predicate)); } } } return this; }
@Test public void testKeysAndSuppliers() { int i = builder.addSupplier( new ConstantSupplier<String>("hh")); builder.addKey(new KeyAndPredicate<Object[], SampleFieldKey>(new SampleFieldKey("k1", 0), null)); assertFalse(builder.hasNoKeys()); MappingContextFactory<Object[]> mappingContextFactory = builder.build(); assertTrue(mappingContextFactory instanceof BreakDetectorMappingContextFactory); assertEquals("hh", mappingContextFactory.newContext().context(i)); }
@Test public void testKeys() throws Exception { builder.addKey(new KeyAndPredicate<Object[], SampleFieldKey>(new SampleFieldKey("k1", 0), null)); assertFalse(builder.hasNoKeys()); MappingContextFactory<Object[]> mappingContextFactory = builder.build(); assertTrue(mappingContextFactory instanceof BreakDetectorMappingContextFactory); assertNull(mappingContextFactory.newContext().context(0)); assertTrue(builder.nullChecker().test(new Object[] { null})); assertFalse(builder.nullChecker().test(new Object[] { 123 })); }