import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
import org.opendaylight.yangtools.yang.model.util.BaseTypes;
import org.opendaylight.yangtools.yang.model.util.UnionType;
-import org.opendaylight.yangtools.yang.parser.builder.api.AbstractTypeAwareBuilder;
import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.util.AbstractTypeAwareBuilder;
import org.opendaylight.yangtools.yang.parser.util.YangParseException;
/**
* types.
*/
public final class UnionTypeBuilder extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
- private final static String NAME = "union";
+ private static final SchemaPath SCHEMA_PATH = SchemaPath.create(true, BaseTypes.UNION_QNAME);
+ private static final String NAME = "union";
private final List<TypeDefinition<?>> types;
private final List<TypeDefinitionBuilder> typedefs;
private UnionType instance;
private boolean isBuilt;
- private SchemaPath path;
+ private List<QName> baseTypesQNames = new ArrayList<>();
public UnionTypeBuilder(final String moduleName, final int line) {
- super(moduleName, line, BaseTypes.constructQName(NAME));
- types = new ArrayList<TypeDefinition<?>>();
- typedefs = new ArrayList<TypeDefinitionBuilder>();
+ super(moduleName, line, BaseTypes.UNION_QNAME);
+ types = new ArrayList<>();
+ typedefs = new ArrayList<>();
+ }
+
+ public List<QName> getBaseTypeQNames() {
+ return baseTypesQNames;
+ }
+
+ @Override
+ public void setTypeQName(final QName qname) {
+ baseTypesQNames.add(qname);
}
public List<TypeDefinition<?>> getTypes() {
return types;
}
+ @Override
+ public void setQName(final QName qname) {
+ throw new UnsupportedOperationException("Can not set qname to union type");
+ }
+
@Override
public TypeDefinition<?> getType() {
return null;
@Override
public UnionType build() {
if (!isBuilt) {
- instance = new UnionType(path, types);
for (TypeDefinitionBuilder tdb : typedefs) {
types.add(tdb.build());
}
+ instance = UnionType.create(types);
isBuilt = true;
}
return instance;
}
- @Override
- public void setPath(final SchemaPath schemaPath) {
- this.path = schemaPath;
- }
-
@Override
public void setDescription(final String description) {
- throw new YangParseException(moduleName, line, "Can not set description to " + NAME);
+ throw new YangParseException(getModuleName(), getLine(), "Can not set description to " + NAME);
}
@Override
public void setReference(final String reference) {
- throw new YangParseException(moduleName, line, "Can not set reference to " + NAME);
+ throw new YangParseException(getModuleName(), getLine(), "Can not set reference to " + NAME);
}
@Override
public void setStatus(final Status status) {
- throw new YangParseException(moduleName, line, "Can not set status to " + NAME);
+ throw new YangParseException(getModuleName(), getLine(), "Can not set status to " + NAME);
}
@Override
@Override
public void setAddedByUses(final boolean addedByUses) {
- throw new YangParseException(moduleName, line, "Union type can not be added by uses.");
- }
-
- @Override
- public List<UnknownSchemaNode> getUnknownNodes() {
- return Collections.emptyList();
+ throw new YangParseException(getModuleName(), getLine(), "Union type can not be added by uses.");
}
@Override
@Override
public SchemaPath getPath() {
- return path;
+ return SCHEMA_PATH;
+ }
+
+ @Override
+ public void setPath(final SchemaPath path) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set path to " + NAME);
}
@Override
}
@Override
- public void setRanges(List<RangeConstraint> ranges) {
- throw new YangParseException(moduleName, line, "Can not set ranges to " + NAME);
+ public void setRanges(final List<RangeConstraint> ranges) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set ranges to " + NAME);
}
@Override
}
@Override
- public void setLengths(List<LengthConstraint> lengths) {
- throw new YangParseException(moduleName, line, "Can not set lengths to " + NAME);
+ public void setLengths(final List<LengthConstraint> lengths) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set lengths to " + NAME);
}
@Override
}
@Override
- public void setPatterns(List<PatternConstraint> patterns) {
- throw new YangParseException(moduleName, line, "Can not set patterns to " + NAME);
+ public void setPatterns(final List<PatternConstraint> patterns) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set patterns to " + NAME);
}
@Override
}
@Override
- public void setFractionDigits(Integer fractionDigits) {
- throw new YangParseException(moduleName, line, "Can not set fraction digits to " + NAME);
+ public void setFractionDigits(final Integer fractionDigits) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set fraction digits to " + NAME);
}
@Override
- public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
+ public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
return Collections.emptyList();
}
}
@Override
- public void setDefaultValue(Object defaultValue) {
- throw new YangParseException(moduleName, line, "Can not set default value to " + NAME);
+ public void setDefaultValue(final Object defaultValue) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set default value to " + NAME);
}
@Override
}
@Override
- public void setUnits(String units) {
- throw new YangParseException(moduleName, line, "Can not set units to " + NAME);
+ public void setUnits(final String units) {
+ throw new YangParseException(getModuleName(), getLine(), "Can not set units to " + NAME);
}
@Override
public String toString() {
- final StringBuilder result = new StringBuilder(UnionTypeBuilder.class.getSimpleName() + "[");
- result.append("types=" + types);
- result.append(", typedefs=" + typedefs);
+ final StringBuilder result = new StringBuilder(UnionTypeBuilder.class.getSimpleName());
+ result.append("[");
+ result.append("types=");
+ result.append(types);
+ result.append(", typedefs=");
+ result.append(typedefs);
result.append("]");
return result.toString();
}