* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.mdsal.binding.dom.codec.gen.impl;
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.requireNonNull;
+
import java.util.HashMap;
import java.util.Map;
+import org.opendaylight.mdsal.binding.dom.codec.util.BindingSchemaMapping;
import org.opendaylight.mdsal.binding.dom.codec.util.ChoiceDispatchSerializer;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.model.api.MethodSignature;
import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
import org.opendaylight.mdsal.binding.model.api.Type;
-import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.yang.binding.BindingSerializer;
import org.opendaylight.yangtools.yang.binding.BindingStreamEventWriter;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Deprecated
abstract class DataNodeContainerSerializerSource extends DataObjectSerializerSource {
private static final Logger LOG = LoggerFactory.getLogger(DataNodeContainerSerializerSource.class);
DataNodeContainerSerializerSource(final AbstractGenerator generator, final GeneratedType type,
final DataNodeContainer node) {
super(generator);
- this.dtoType = Preconditions.checkNotNull(type);
- this.schemaNode = Preconditions.checkNotNull(node);
+ this.dtoType = requireNonNull(type);
+ this.schemaNode = requireNonNull(node);
}
/**
@Override
protected CharSequence getSerializerBody() {
- final StringBuilder sb = new StringBuilder();
- sb.append("{\n");
- sb.append(statement(assign(DataObjectSerializerRegistry.class.getName(), REGISTRY, "$1")));
- sb.append(statement(assign(dtoType.getFullyQualifiedName(), INPUT,
- cast(dtoType.getFullyQualifiedName(), "$2"))));
- sb.append(statement(assign(BindingStreamEventWriter.class.getName(), STREAM,
- cast(BindingStreamEventWriter.class.getName(), "$3"))));
- sb.append(statement(assign(BindingSerializer.class.getName(), SERIALIZER, null)));
- sb.append("if (");
- sb.append(STREAM);
- sb.append(" instanceof ");
- sb.append(BindingSerializer.class.getName());
- sb.append(") {");
- sb.append(statement(assign(SERIALIZER, cast(BindingSerializer.class.getName(), STREAM))));
- sb.append('}');
- sb.append(statement(emitStartEvent()));
+ final StringBuilder sb = new StringBuilder()
+ .append("{\n")
+ .append(statement(assign(DataObjectSerializerRegistry.class, REGISTRY, "$1")))
+ .append(statement(assign(dtoType, INPUT, cast(dtoType, "$2"))))
+ .append(statement(assign(BindingStreamEventWriter.class, STREAM,
+ cast(BindingStreamEventWriter.class, "$3"))))
+ .append(statement(assign(BindingSerializer.class, SERIALIZER, null)))
+ .append("if (")
+ .append(STREAM)
+ .append(" instanceof ")
+ .append(BindingSerializer.class.getName())
+ .append(") {")
+ .append(statement(assign(SERIALIZER, cast(BindingSerializer.class, STREAM))))
+ .append('}')
+ .append(statement(emitStartEvent()));
emitBody(sb);
emitAfterBody(sb);
- sb.append(statement(endNode()));
- sb.append(statement("return null"));
- sb.append('}');
- return sb;
+
+ return sb.append(statement(endNode()))
+ .append(statement("return null"))
+ .append('}');
}
/**
return hashMap;
}
- private static String getGetterName(final DataSchemaNode node) {
- final TypeDefinition<?> type;
- if (node instanceof TypedDataSchemaNode) {
- type = ((TypedDataSchemaNode) node).getType();
- } else {
- type = null;
- }
-
- final String prefix;
- // Bug 8903: If it is a derived type of boolean or empty, not an inner type, then the return type
- // of method would be the generated type of typedef not build-in types, so here it should be 'get'.
- if ((type instanceof BooleanTypeDefinition || type instanceof EmptyTypeDefinition)
- && (type.getPath().equals(node.getPath()) || type.getBaseType() == null)) {
- prefix = "is";
- } else {
- prefix = "get";
- }
- return prefix + BindingMapping.getGetterSuffix(node.getQName());
- }
-
private void emitBody(final StringBuilder sb) {
final Map<String, Type> getterToType = collectAllProperties(dtoType, new HashMap<String, Type>());
for (final DataSchemaNode schemaChild : schemaNode.getChildNodes()) {
if (!schemaChild.isAugmenting()) {
- final String getter = getGetterName(schemaChild);
+ final String getter = BindingSchemaMapping.getGetterMethodName(schemaChild);
final Type childType = getterToType.get(getter);
- if (childType == null) {
- // FIXME AnyXml nodes are ignored, since their type cannot be found in generated bindnig
- // Bug-706 https://bugs.opendaylight.org/show_bug.cgi?id=706
- if (schemaChild instanceof AnyXmlSchemaNode) {
- LOG.warn("Node {} will be ignored. AnyXml is not yet supported from binding aware code."
- + "Binding Independent code can be used to serialize anyXml nodes.",
- schemaChild.getPath());
- continue;
- }
-
- throw new IllegalStateException(
- String.format("Unable to find type for child node %s. Expected child nodes: %s",
- schemaChild.getPath(), getterToType));
- }
+ checkState(childType != null, "Unable to find type for child node %s. Expected child nodes: %s",
+ schemaChild.getPath(), getterToType);
emitChild(sb, getter, childType, schemaChild);
}
}
final ListSchemaNode casted = (ListSchemaNode) child;
emitList(sb, getterName, valueType, casted);
} else if (child instanceof ContainerSchemaNode) {
- sb.append(tryToUseCacheElse(getterName,statement(staticInvokeEmitter(childType, getterName))));
+ sb.append(tryToUseCacheElse(getterName, statement(staticInvokeEmitter(childType, getterName))));
} else if (child instanceof ChoiceSchemaNode) {
final String propertyName = CHOICE_PREFIX + childType.getName();
staticConstant(propertyName, DataObjectSerializerImplementation.class,
ChoiceDispatchSerializer.from(loadClass(childType)));
- sb.append(tryToUseCacheElse(getterName,statement(invoke(propertyName,
- StreamWriterGenerator.SERIALIZE_METHOD_NAME, REGISTRY, cast(DataObject.class.getName(), getterName),
- STREAM))));
+ sb.append(tryToUseCacheElse(getterName, statement(invoke(propertyName,
+ StreamWriterGenerator.SERIALIZE_METHOD_NAME, REGISTRY, cast(DataObject.class, getterName), STREAM))));
}
}
private static StringBuilder tryToUseCacheElse(final String getterName, final CharSequence statement) {
- final StringBuilder b = new StringBuilder();
- b.append("if ( ");
- b.append(SERIALIZER).append("== null || ");
- b.append(invoke(SERIALIZER, "serialize", getterName)).append("== null");
- b.append(") {");
- b.append(statement);
- b.append('}');
- return b;
+ return new StringBuilder()
+ .append("if (").append(SERIALIZER).append(" == null || ")
+ .append(invoke(SERIALIZER, "serialize", getterName)).append(" == null) {\n")
+ .append(statement)
+ .append('}');
}
private void emitList(final StringBuilder sb, final String getterName, final Type valueType,