package org.opendaylight.mdsal.binding.model.api;
import java.util.List;
+import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
/**
boolean isUnionTypeBuilder();
Restrictions getRestrictions();
+
+ default Optional<? extends GeneratedProperty> findProperty(final String name) {
+ final Optional<GeneratedProperty> optProp = getProperties().stream()
+ .filter(prop -> prop.getName().equals(name)).findFirst();
+ if (optProp.isPresent()) {
+ return optProp;
+ }
+
+ final GeneratedTransferObject parent = getSuperType();
+ return parent != null ? parent.findProperty(name) : Optional.empty();
+ }
}
final GeneratedTOBuilder genTOBuilder = typedefToTransferObject(basePackageName, typedef, moduleName);
genTOBuilder.setRestrictions(BindingGeneratorUtil.getRestrictions(typedef));
- final GeneratedPropertyBuilder genPropBuilder = genTOBuilder.addProperty("value");
+ final GeneratedPropertyBuilder genPropBuilder = genTOBuilder.addProperty(TypeConstants.VALUE_PROP);
genPropBuilder.setReturnType(javaType);
genTOBuilder.addEqualsIdentity(genPropBuilder);
genTOBuilder.addHashIdentity(genPropBuilder);
@Override
public String getConstructorPropertyName(final SchemaNode node) {
- return node instanceof TypeDefinition<?> ? "value" : "";
+ return node instanceof TypeDefinition<?> ? TypeConstants.VALUE_PROP : "";
}
@Override
*/
package org.opendaylight.mdsal.binding.model.util;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.binding.ScalarTypeObject;
+
/**
* Contains constants used in relations with <code>Type</code>.
*/
* The map is keyed by Pattern-compatible string and values are XSD-compatible
* strings.
*/
- public static final String PATTERN_CONSTANT_NAME = "PATTERN_CONSTANTS";
+ public static final @NonNull String PATTERN_CONSTANT_NAME = "PATTERN_CONSTANTS";
+
+ /**
+ * Name of the property holding the value encapsulated in a {@link ScalarTypeObject}.
+ */
+ public static final @NonNull String VALUE_PROP = "value";
/**
* Creation of new instance is prohibited.
this.consts = genType.constantDefinitions
if (restrictions !== null && restrictions.rangeConstraint.present) {
- rangeGenerator = requireNonNull(AbstractRangeGenerator.forType(findProperty(genType, "value").returnType))
+ rangeGenerator = requireNonNull(AbstractRangeGenerator.forType(TypeUtils.encapsulatedValueType(genType)))
} else {
rangeGenerator = null
}
«IF restrictions !== null»
«IF restrictions.lengthConstraint.present»
- «LengthGenerator.generateLengthChecker("_value", findProperty(genTO, "value").returnType, restrictions.lengthConstraint.get, this)»
+ «LengthGenerator.generateLengthChecker("_value", TypeUtils.encapsulatedValueType(genTO),
+ restrictions.lengthConstraint.get, this)»
«ENDIF»
«IF restrictions.rangeConstraint.present»
«rangeGenerator.generateRangeChecker("_value", restrictions.rangeConstraint.get, this)»
def protected constructors() '''
«IF genTO.unionType»
«genUnionConstructor»
- «ELSEIF genTO.typedef && allProperties.size == 1 && allProperties.get(0).name.equals("value")»
+ «ELSEIF genTO.typedef && allProperties.size == 1 && allProperties.get(0).name.equals(TypeConstants.VALUE_PROP)»
«typedefConstructor»
«ELSE»
«allValuesConstructor»
'''
def private typedefConstructor() '''
- @«ConstructorParameters.importedName»("value")
- @«ConstructorProperties.importedName»("value")
+ @«ConstructorParameters.importedName»("«TypeConstants.VALUE_PROP»")
+ @«ConstructorProperties.importedName»("«TypeConstants.VALUE_PROP»")
public «type.name»(«allProperties.asArgumentsDeclaration») {
«IF false == parentProperties.empty»
super(«parentProperties.asArguments»);
return type;
}
- static final GeneratedProperty findProperty(final GeneratedTransferObject gto, final String name) {
- final Optional<GeneratedProperty> optProp = gto.getProperties().stream()
- .filter(prop -> prop.getName().equals(name)).findFirst();
- if (optProp.isPresent()) {
- return optProp.get();
- }
-
- final GeneratedTransferObject parent = gto.getSuperType();
- return parent != null ? findProperty(parent, name) : null;
- }
-
final String generateImportBlock() {
verify(javaType instanceof TopLevelJavaGeneratedType);
return ((TopLevelJavaGeneratedType) javaType).imports().map(name -> "import " + name + ";\n")
import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
import org.opendaylight.mdsal.binding.model.api.Type;
+import org.opendaylight.mdsal.binding.model.util.TypeConstants;
/**
* Random utility methods for dealing with {@link Type} objects.
*/
final class TypeUtils {
- private static final String VALUE_PROP = "value";
-
private TypeUtils() {
- throw new UnsupportedOperationException();
+
}
/**
// Look for the 'value' property and return its type
for (GeneratedProperty s : rootGto.getProperties()) {
- if (VALUE_PROP.equals(s.getName())) {
+ if (TypeConstants.VALUE_PROP.equals(s.getName())) {
return (ConcreteType) s.getReturnType();
}
}
// Should never happen
throw new IllegalArgumentException(String.format("Type %s root %s properties %s do not include \"%s\"",
- type, rootGto, rootGto.getProperties(), VALUE_PROP));
+ type, rootGto, rootGto.getProperties(), TypeConstants.VALUE_PROP));
+ }
+
+ static Type encapsulatedValueType(final GeneratedTransferObject gto) {
+ return gto.findProperty(TypeConstants.VALUE_PROP).orElseThrow().getReturnType();
}
}
package org.opendaylight.mdsal.binding.java.api.generator;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import com.google.common.collect.ImmutableList;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
import org.junit.Test;
import org.opendaylight.mdsal.binding.model.api.ConcreteType;
import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
doReturn(ImmutableList.of(property)).when(rootType).getProperties();
TypeUtils.getBaseYangType(innerType);
}
-
- @Test
- public void constructTest() throws ReflectiveOperationException {
- final Constructor<TypeUtils> constructor = TypeUtils.class.getDeclaredConstructor();
- constructor.setAccessible(true);
- try {
- constructor.newInstance();
- fail();
- } catch (InvocationTargetException e) {
- assertTrue(e.getCause() instanceof UnsupportedOperationException);
- }
- }
}
\ No newline at end of file