*/
package org.opendaylight.yangtools.concepts;
+import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
}
}
+ public static final class Factory<T, O extends ExtensibleObject<O, E>, E extends ObjectExtension<O, E>> {
+ private final @NonNull ImmutableSet<Class<? extends E>> extensions;
+
+ Factory(final ImmutableSet<Class<? extends E>> extensions) {
+ this.extensions = requireNonNull(extensions);
+ }
+
+ public ClassToInstanceMap<E> newInstance(final T object) {
+ return new ObjectExtensions<>(extensions, object);
+ }
+ }
+
private final @NonNull ImmutableSet<Class<? extends E>> extensions;
- private final @NonNull O object;
+ private final @NonNull Object object;
- public ObjectExtensions(final ImmutableSet<Class<? extends E>> extensions, final O object) {
+ ObjectExtensions(final ImmutableSet<Class<? extends E>> extensions, final Object object) {
this.extensions = requireNonNull(extensions);
this.object = requireNonNull(object);
+ }
+ @SafeVarargs
+ public static <T, O extends ExtensibleObject<O, E>, E extends ObjectExtension<O, E>> Factory<T, O, E> factory(
+ final Class<T> objClass, final Class<? extends E>... extensions) {
+ final ImmutableSet<Class<? extends E>> set = ImmutableSet.copyOf(extensions);
+ for (Class<? extends E> extension : set) {
+ checkArgument(extension.isAssignableFrom(objClass), "%s is not a valid extension %s", objClass, extension);
+ }
+ return new Factory<>(set);
}
@Override