*/
package org.opendaylight.mdsal.binding.dom.codec.impl;
-import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Verify.verify;
import com.google.common.annotations.Beta;
writer.endNode();
}
- @SuppressWarnings("rawtypes")
- private static void emitAugmentation(final Class type, final Augmentation<?> value,
+ private static void emitAugmentation(final Class<? extends Augmentation<?>> type, final Augmentation<?> value,
final BindingStreamEventWriter writer, final DataObjectSerializerRegistry registry) throws IOException {
/*
- * Binding Specification allowed to insert augmentation with null for
- * value, which effectively could be used to remove augmentation
- * from builder / DTO.
+ * Binding Specification allowed to insert augmentation with null for value, which effectively could be used to
+ * remove augmentation from builder / DTO.
*/
if (value != null) {
- checkArgument(value instanceof DataObject);
- @SuppressWarnings("unchecked")
final DataObjectSerializer serializer = registry.getSerializer(type);
if (serializer != null) {
- serializer.serialize((DataObject) value, writer);
+ serializer.serialize(value, writer);
} else {
LOG.warn("DataObjectSerializer is not present for {} in registry {}", type, registry);
}
final GeneratedTypeBuilder augTypeBuilder = typeProvider.newGeneratedTypeBuilder(
JavaTypeName.create(augmentPackageName, augTypeName));
- augTypeBuilder.addImplementsType(DATA_OBJECT);
+ augTypeBuilder.addImplementsType(augmentation(targetTypeRef));
defaultImplementedInterace(augTypeBuilder);
- augTypeBuilder.addImplementsType(augmentation(targetTypeRef));
annotateDeprecatedIfNecessary(augSchema, augTypeBuilder);
addImplementedInterfaceFromUses(augSchema, augTypeBuilder);
import static org.opendaylight.mdsal.binding.model.util.BindingTypes.DATA_OBJECT
import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTABLE_AUGMENTATION_NAME
import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD
+import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME
import com.google.common.collect.ImmutableList
import java.util.ArrayList
«val augmentTypeRef = augmentType.importedName»
«val jlClassRef = CLASS.importedName»
«val hashMapRef = JU_HASHMAP.importedName»
+ public «type.name» add«AUGMENTATION_FIELD_UPPER»(«augmentTypeRef» augmentation) {
+ return add«AUGMENTATION_FIELD_UPPER»(augmentation.«DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME»(), augmentation);
+ }
+
public «type.name» add«AUGMENTATION_FIELD_UPPER»(«jlClassRef»<? extends «augmentTypeRef»> augmentationType, «augmentTypeRef» augmentationValue) {
if (augmentationValue == null) {
return remove«AUGMENTATION_FIELD_UPPER»(augmentationType);
}
@Override
+ @SuppressWarnings({ "rawtypes", "unchecked" })
public DataContainer read(final DataContainer parent, final Class<?> child) {
checkArgument(Augmentation.class.isAssignableFrom(child), "Child must be Augmentation.");
checkArgument(parent instanceof Augmentable<?>, "Parent must be Augmentable.");
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- Augmentation potential = ((Augmentable) parent).augmentation(child);
- checkState(potential instanceof DataContainer, "Readed augmention must be data object");
- return (DataContainer) potential;
+ return ((Augmentable) parent).augmentation(child);
}
}
ListenableFuture<?> rpcMethodTest2() {
return null;
}
+
+ @Override
+ public Class<TestImplementation> implementedInterface() {
+ return TestImplementation.class;
+ }
}
}
\ No newline at end of file
*
* @param <T> Class to which this implementation is extension.
*/
-public interface Augmentation<T> {
-
+public interface Augmentation<T> extends DataObject {
+ @Override
+ Class<? extends Augmentation<T>> implementedInterface();
}