@Override public DataContainer read(final DataContainer parent, final Class<?> childType) { checkArgument(Augmentation.class.isAssignableFrom(childType), "Parent must be Augmentable."); checkArgument(parent instanceof Augmentable<?>, "Parent must be Augmentable."); @SuppressWarnings({ "rawtypes", "unchecked" }) Augmentation potential = ((Augmentable) parent).getAugmentation(childType); checkState(potential instanceof DataContainer, "Readed augmention must be data object"); return (DataContainer) potential; } }
/** * @param data * @return shared grouping */ @SuppressWarnings("unchecked") public Optional<G> getExtension(T data) { for (Class<? extends Augmentation<T>> cls : classes) { Augmentation<T> potential = data.getAugmentation(cls); if (potential != null) { return Optional.of((G) potential); } } return Optional.absent(); } }
/** * @param data expected to match <tt><T extends Augmentable<T>></tt> * @return shared grouping */ @SuppressWarnings("unchecked") public <T extends Augmentable<T>> Optional<G> getExtension(DataObject data) { T guessData = (T) data; for (Class<? extends Augmentation<?>> cls : classes) { Augmentation<T> potential = guessData .getAugmentation((Class<Augmentation<T>>) cls); if (potential != null) { return Optional.of((G) potential); } } return Optional.absent(); } }