--- /dev/null
+/*\r
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.controller.model.parser.builder;\r
+\r
+import java.util.List;\r
+\r
+import org.opendaylight.controller.model.parser.api.SchemaNodeBuilder;\r
+import org.opendaylight.controller.model.parser.api.TypeAwareBuilder;\r
+import org.opendaylight.controller.model.parser.api.TypeDefinitionBuilder;\r
+import org.opendaylight.controller.model.util.UnknownType;\r
+import org.opendaylight.controller.model.util.YangTypesConverter;\r
+import org.opendaylight.controller.yang.common.QName;\r
+import org.opendaylight.controller.yang.model.api.ExtensionDefinition;\r
+import org.opendaylight.controller.yang.model.api.SchemaPath;\r
+import org.opendaylight.controller.yang.model.api.Status;\r
+import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
+\r
+\r
+public class TypedefBuilder implements TypeDefinitionBuilder, SchemaNodeBuilder, TypeAwareBuilder {\r
+\r
+ private final QName qname;\r
+ private SchemaPath schemaPath;\r
+ private TypeDefinition<?> baseType;\r
+\r
+ private String description;\r
+ private String reference;\r
+ private Status status;\r
+\r
+ TypedefBuilder(QName qname) {\r
+ this.qname = qname;\r
+ }\r
+\r
+ @Override\r
+ public TypeDefinition<? extends TypeDefinition<?>> build() {\r
+ final TypeDefinition<?> type = YangTypesConverter.javaTypeForBaseYangType(qname);\r
+ if(type != null) {\r
+ return type;\r
+ } else {\r
+ if(baseType != null) {\r
+ // typedef\r
+ TypeDefinitionImpl instance = new TypeDefinitionImpl(qname);\r
+ instance.setDescription(description);\r
+ instance.setReference(reference);\r
+ instance.setStatus(status);\r
+ instance.setPath(schemaPath);\r
+ instance.setBaseType(baseType);\r
+ return instance;\r
+ } else {\r
+ // type\r
+ final UnknownType.Builder unknownBuilder = new UnknownType.Builder(qname, description, reference);\r
+ unknownBuilder.status(status);\r
+ return unknownBuilder.build();\r
+ }\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public QName getQName() {\r
+ return qname;\r
+ }\r
+\r
+ @Override\r
+ public void setPath(final SchemaPath schemaPath) {\r
+ this.schemaPath = schemaPath;\r
+ }\r
+\r
+ @Override\r
+ public void setDescription(final String description) {\r
+ this.description = description;\r
+ }\r
+\r
+ @Override\r
+ public void setReference(final String reference) {\r
+ this.reference = reference;\r
+ }\r
+\r
+ @Override\r
+ public void setStatus(final Status status) {\r
+ if(status != null) {\r
+ this.status = status;\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public TypeDefinition<?> getType() {\r
+ return baseType;\r
+ }\r
+\r
+ @Override\r
+ public void setType(TypeDefinition<?> baseType) {\r
+ this.baseType = baseType;\r
+ }\r
+\r
+ @Override\r
+ public TypeDefinition<?> getBaseType() {\r
+ return baseType;\r
+ }\r
+\r
+\r
+\r
+ private static class TypeDefinitionImpl<T extends TypeDefinition<T>> implements TypeDefinition<T> {\r
+\r
+ private final QName qname;\r
+ private SchemaPath path;\r
+ private String description;\r
+ private String reference;\r
+ private Status status = Status.CURRENT;\r
+ private T baseType;\r
+\r
+ private TypeDefinitionImpl(QName qname) {\r
+ this.qname = qname;\r
+ }\r
+\r
+ @Override\r
+ public QName getQName() {\r
+ return qname;\r
+ }\r
+\r
+ @Override\r
+ public SchemaPath getPath() {\r
+ return path;\r
+ }\r
+ private void setPath(SchemaPath path) {\r
+ this.path = path;\r
+ }\r
+\r
+ @Override\r
+ public String getDescription() {\r
+ return description;\r
+ }\r
+ private void setDescription(String description) {\r
+ this.description = description;\r
+ }\r
+\r
+ @Override\r
+ public String getReference() {\r
+ return reference;\r
+ }\r
+ private void setReference(String reference) {\r
+ this.reference = reference;\r
+ }\r
+\r
+ @Override\r
+ public Status getStatus() {\r
+ return status;\r
+ }\r
+ private void setStatus(Status status) {\r
+ this.status = status;\r
+ }\r
+\r
+ @Override\r
+ public T getBaseType() {\r
+ return baseType;\r
+ }\r
+ private void setBaseType(T type) {\r
+ this.baseType = type;\r
+ }\r
+\r
+ @Override\r
+ public String getUnits() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public Object getDefaultValue() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public List<ExtensionDefinition> getExtensionSchemaNodes() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ final StringBuilder sb = new StringBuilder(TypeDefinitionImpl.class.getSimpleName());\r
+ sb.append("[");\r
+ sb.append("qname="+ qname);\r
+ sb.append(", path="+ path);\r
+ sb.append(", description="+ description);\r
+ sb.append(", reference="+ reference);\r
+ sb.append(", status="+ status);\r
+ sb.append(", baseType="+ baseType +"]");\r
+ return sb.toString();\r
+ }\r
+ }\r
+\r
+}\r