Initial opendaylight infrastructure commit!!
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / model / parser / builder / TypedefBuilder.java
diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/model/parser/builder/TypedefBuilder.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/model/parser/builder/TypedefBuilder.java
new file mode 100644 (file)
index 0000000..a6a3c60
--- /dev/null
@@ -0,0 +1,196 @@
+/*\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