Added Yin view. 08/37108/1
authorDavid M. Karr <davidmichaelkarr@gmail.com>
Mon, 4 Apr 2016 20:52:56 +0000 (13:52 -0700)
committerDavid M. Karr <davidmichaelkarr@gmail.com>
Mon, 4 Apr 2016 20:55:27 +0000 (13:55 -0700)
Upgraded artifacts in generated projects to 0.8.0-Beryllium.

Change-Id: Ice191b5182b928d50d075627333166fb26bd0d73
Signed-off-by: David M. Karr <davidmichaelkarr@gmail.com>
38 files changed:
.gitignore
features/com.cisco.yangide.feature/feature.xml
plugins/com.cisco.yangide.core.tests/.classpath
plugins/com.cisco.yangide.core.tests/projects/yang/yang-p001/pom.xml
plugins/com.cisco.yangide.core.tests/projects/yang/yang-p002/pom.xml
plugins/com.cisco.yangide.core/.classpath
plugins/com.cisco.yangide.editor/.classpath
plugins/com.cisco.yangide.ext.model.editor/.classpath
plugins/com.cisco.yangide.ext.model.editor/META-INF/MANIFEST.MF
plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/ModuleApiProxy.java [new file with mode: 0644]
plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/YangMultiPageEditorPart.java
plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/YinBuilder.java [new file with mode: 0644]
plugins/com.cisco.yangide.ext.model/.classpath
plugins/com.cisco.yangide.ext.refactoring/.classpath
plugins/com.cisco.yangide.m2e.yang.tests/.classpath
plugins/com.cisco.yangide.m2e.yang.tests/projects/yang/yang-p001/pom.xml
plugins/com.cisco.yangide.m2e.yang/.classpath
plugins/com.cisco.yangide.ui/.classpath
plugins/com.cisco.yangide.ui/src/com/cisco/yangide/ui/wizards/YangProjectWizard.java
plugins/com.cisco.yangide.ui/src/com/cisco/yangide/ui/wizards/YangProjectWizardPage.java
plugins/com.cisco.yangide.yangparser/.classpath [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/.options [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/.project [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/META-INF/MANIFEST.MF [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/build.properties [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/plugin.xml [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/pom.xml [new file with mode: 0644]
plugins/com.cisco.yangide.yangparser/src/com/cisco/yangide/yangparser/YangParserPlugin.java [new file with mode: 0644]
pom.xml
product/target-platform/com.cisco.yangide.target-platform.target
samples/yang-module1/.classpath
samples/yang-module1/pom.xml
samples/yang-module2/.classpath
samples/yang-module2/pom.xml
tests/com.cisco.yangide.editor.test/TestCases/Wizards/NewYangProjectTest.test

index ea5abb72710bdc4c857726debfc08423d311d0b2..d0eba68bfc84a25d7fc9bf27ce5e06bbb25c70b2 100644 (file)
@@ -2,3 +2,4 @@
 /.settings/
 bin/
 libs/
+*~
index e7ddb7193c39cc79be1e42a500e1d9ea3722a644..8d3e279a1a8551491565fa291e0c600f58caa36c 100644 (file)
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="com.cisco.yangide.yangparser"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
index 7641f12dac1af4c72cdd06b6c4d3f3aed6b36472..46cec6ed2a0bc1805bdc5252d405d5e0ead9bd36 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry including="**/*.java" kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="src" path="src/"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index fb7fb386d997c77b5be853744d9a25c50dd2ad7f..5ea29ae1cb87f05167b00f3bf22574ea339a66e9 100644 (file)
@@ -49,9 +49,9 @@
 
               <dependencies>
                   <dependency>
-                      <groupId>org.opendaylight.yangtools</groupId>
+                      <groupId>org.opendaylight.mdsal</groupId>
                       <artifactId>maven-sal-api-gen-plugin</artifactId>
-                      <version>0.6.2-Helium</version>
+                      <version>0.8.0-Beryllium</version>
                       <type>jar</type>
                   </dependency>
               </dependencies>
@@ -77,9 +77,9 @@
   </build>
   <dependencies>
       <dependency>
-          <groupId>org.opendaylight.yangtools</groupId>
+          <groupId>org.opendaylight.mdsal</groupId>
           <artifactId>yang-binding</artifactId>
-          <version>0.6.2-Helium</version>
+          <version>0.8.0-Beryllium</version>
       </dependency>
   </dependencies>
 </project>
index 68eb255772f2ade3ad65fd1065b4e1341e4a1b9e..f9e1b78de767b8d329c68d6751c7285d807df8c8 100644 (file)
@@ -49,9 +49,9 @@
 
               <dependencies>
                   <dependency>
-                      <groupId>org.opendaylight.yangtools</groupId>
+                      <groupId>org.opendaylight.mdsal</groupId>
                       <artifactId>maven-sal-api-gen-plugin</artifactId>
-                      <version>0.6.2-Helium</version>
+                      <version>0.8.0-Beryllium</version>
                       <type>jar</type>
                   </dependency>
               </dependencies>
@@ -77,9 +77,9 @@
   </build>
   <dependencies>
       <dependency>
-          <groupId>org.opendaylight.yangtools</groupId>
+          <groupId>org.opendaylight.mdsal</groupId>
           <artifactId>yang-binding</artifactId>
-          <version>0.6.2-Helium</version>
+          <version>0.8.0-Beryllium</version>
       </dependency>
   </dependencies>
 </project>
index 527f7228e1c69fddff5f0b3c43c42ac8c4ad37e9..7205ad0d058c972d6317b6a1eb3ac59c3f0c1232 100644 (file)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry including="**/*.java" kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src/"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-parser-impl-0.6.1.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-model-api-0.6.1.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/antlr4-runtime-4.0.jar"/>
        <classpathentry exported="true" kind="lib" path="libs/mapdb-1.0.4.jar"/>
-       <classpathentry exported="true" kind="lib" path="libs/yang-model-api-0.6.1.jar"/>
-       <classpathentry exported="true" kind="lib" path="libs/yang-parser-impl-0.6.1.jar"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index af2a43e054d6b9b5277db0b4f99a925c785c4fb1..46cec6ed2a0bc1805bdc5252d405d5e0ead9bd36 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="src" path="src/"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index 16d067f284a04bd79b54ea2e7764ca0d39ccc351..46cec6ed2a0bc1805bdc5252d405d5e0ead9bd36 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="src" path="src"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-       <classpathentry kind="output" path="bin"/>
+       <classpathentry kind="src" path="src/"/>
+       <classpathentry kind="output" path="target/classes"/>
 </classpath>
index 8486bcd80b9e60ab045a353a6afb4c5399efb4d7..522782485352460a02a0d5ac9aee1065682a0115 100644 (file)
@@ -31,6 +31,9 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.jface.databinding,
  org.eclipse.core.databinding,
  org.eclipse.core.databinding.property,
- org.eclipse.emf.databinding
+ org.eclipse.emf.databinding,
+ org.eclipse.wst.sse.ui;bundle-version="1.3.400",
+ com.cisco.yangide.yangparser;bundle-version="1.1.1",
+ com.google.guava;bundle-version="15.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-ActivationPolicy: lazy
diff --git a/plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/ModuleApiProxy.java b/plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/ModuleApiProxy.java
new file mode 100644 (file)
index 0000000..79ebdce
--- /dev/null
@@ -0,0 +1,914 @@
+/*******************************************************************************
+ * Copyright (c) 2016 AT&T, Inc.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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 com.cisco.yangide.ext.model.editor;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
+import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Deviation;
+import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
+import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
+import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.UsesNode;
+import org.opendaylight.yangtools.yang.model.util.ModuleImportImpl;
+
+import com.cisco.yangide.core.YangCorePlugin;
+import com.cisco.yangide.core.dom.ASTNode;
+import com.cisco.yangide.core.dom.ContrainerSchemaNode;
+import com.cisco.yangide.core.dom.LeafListSchemaNode;
+import com.cisco.yangide.core.dom.LeafSchemaNode;
+import com.cisco.yangide.core.dom.ListSchemaNode;
+import com.cisco.yangide.core.dom.RevisionNode;
+
+public class ModuleApiProxy implements org.opendaylight.yangtools.yang.model.api.Module {
+    private com.cisco.yangide.core.dom.Module module;
+    
+    public ModuleApiProxy(com.cisco.yangide.core.dom.Module module) {
+        this.module = module;
+    }
+
+    private static Date revisionStringToDate(String revision) {
+        Date    result  = null;
+        SimpleDateFormat    sdf = new SimpleDateFormat("yyyy-mm-dd");
+        try {
+            result  = sdf.parse(revision);
+        }
+        catch (ParseException ex) {
+            YangCorePlugin.log(ex);
+        }
+        return result;
+    }
+
+    @Override
+    public Collection<DataSchemaNode> getChildNodes() {
+        Collection<DataSchemaNode>  childNodes  = new ArrayList<>();
+        for (ASTNode node : module.getChildren()) {
+            //System.out.println("node.type[" + node.getClass().getName() + "]");
+            if (node instanceof RevisionNode) {
+                RevisionNode    revisionNode    = (RevisionNode) node;
+                //System.out.println("revisionNode[" + revisionNode + "]");
+            }
+            else if (node instanceof ContrainerSchemaNode) {
+                ContrainerSchemaNode    containerNode   = (ContrainerSchemaNode) node;
+                //System.out.println("containerNode[" + containerNode + "]");
+                // Create ContainerSchemaNode.
+                ContainerSchemaNode containerSchemaNode  =
+                        constructContainerSchemaNode(getQNameModule(), containerNode);
+                childNodes.add(containerSchemaNode);
+            }
+            else {
+                //System.out.println("Actual type is not handled: " + node.getClass().getName());
+            }
+        }
+        return childNodes;
+    }
+
+    @Override
+    public DataSchemaNode getDataChildByName(QName name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public DataSchemaNode getDataChildByName(String name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Set<GroupingDefinition> getGroupings() {
+        Set<GroupingDefinition> groupings   = new HashSet<>();
+        // TODO populate this.
+        return groupings;
+    }
+
+    @Override
+    public Set<TypeDefinition<?>> getTypeDefinitions() {
+        Set<TypeDefinition<?>>  typeDefinitions = new HashSet<>();
+        // TODO populate this.
+        return typeDefinitions;
+    }
+
+    @Override
+    public Set<UsesNode> getUses() {
+        Set<UsesNode>   uses    = new HashSet<>();
+        // TODO populate this.
+        return uses;
+    }
+
+    @Override
+    public String getModuleSourcePath() { return module.getSourcePath().getValue(); }
+
+    @Override
+    public String getName() { return module.getName(); }
+
+    @Override
+    public java.net.URI getNamespace() { return java.net.URI.create(module.getNamespace()); }
+
+    @Override
+    public QNameModule getQNameModule() {
+        return QNameModule.create(java.net.URI.create(module.getNamespace()),
+                                  revisionStringToDate(module.getRevision()));
+    }
+
+    @Override
+    public Date getRevision() {
+        return revisionStringToDate(module.getRevision());
+    }
+
+    @Override
+    public Set<AugmentationSchema> getAugmentations() {
+        Set<AugmentationSchema> augmentations   = new HashSet<>();
+        // TODO populate this.
+        return augmentations;
+    }
+
+    @Override
+    public String getContact() { return module.getContact().getValue(); }
+
+    @Override
+    public String getDescription() { return module.getDescription(); }
+
+    @Override
+    public Set<Deviation> getDeviations() {
+        Set<Deviation>  deviations  = new HashSet<>();
+        // TODO populate this.
+        return deviations;
+    }
+
+    @Override
+    public List<ExtensionDefinition> getExtensionSchemaNodes() {
+        List<ExtensionDefinition>   extensionSchemaNodes    = new ArrayList<>();
+        // TODO Populate this.
+        return extensionSchemaNodes;
+    }
+
+    @Override
+    public Set<FeatureDefinition> getFeatures() {
+        Set<FeatureDefinition>  features    = new HashSet<>();
+        // TODO populate this.
+        return features;
+    }
+
+    @Override
+    public Set<IdentitySchemaNode> getIdentities() {
+        Set<IdentitySchemaNode> identities  = new HashSet<>();
+        // TODO populate this.
+        return identities;
+    }
+
+    @Override
+    public Set<org.opendaylight.yangtools.yang.model.api.ModuleImport> getImports() {
+        Set<org.opendaylight.yangtools.yang.model.api.ModuleImport> imports = new HashSet<>();
+        for (Map.Entry<String, com.cisco.yangide.core.dom.ModuleImport> entry : module.getImports().entrySet()) {
+            imports.add(new ModuleImportImpl(entry.getValue().getName(),
+                                             revisionStringToDate(entry.getValue().getRevision()),
+                                             entry.getValue().getPrefix()));
+        }
+        return imports;
+    }
+
+    @Override
+    public Set<NotificationDefinition> getNotifications() {
+        Set<NotificationDefinition> notifications   = new HashSet<>();
+        // TODO populate this.
+        return notifications;
+    }
+
+    @Override
+    public String getOrganization() { return module.getOrganization().getValue(); }
+
+    @Override
+    public String getPrefix() { return module.getPrefix().getValue(); }
+
+    @Override
+    public String getReference() { return module.getReference(); }
+
+    @Override
+    public Set<RpcDefinition> getRpcs() {
+        Set<RpcDefinition>  rpcs    = new HashSet<>();
+        // TODO populate this.
+        return rpcs;
+    }
+
+    @Override
+    public String getSource() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Set<org.opendaylight.yangtools.yang.model.api.Module> getSubmodules() {
+        Set<org.opendaylight.yangtools.yang.model.api.Module>   subModules  = new HashSet<>();
+        // TODO populate this.
+        return subModules;
+    }
+
+    @Override
+    public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+        List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+        // TODO populate this.
+        return unknownSchemaNodes;
+    }
+
+    @Override
+    public String getYangVersion() {
+        // The RFC says that "yang-version" is OPTIONAL, but the yangtools machinery expects a parsed module to contain
+        // the default value of "1" if it doesn't find it.
+        if (module.getYangVersion() != null)
+            return module.getYangVersion().getValue();
+        else
+            return "1";
+    }
+    
+    private org.opendaylight.yangtools.yang.model.api.Status    constructStatus(String status) {
+        if (status == null)
+            return null;
+        switch (status) {
+        case    "CURRENT":      return org.opendaylight.yangtools.yang.model.api.Status.CURRENT;
+        case    "DEPRECATED":   return org.opendaylight.yangtools.yang.model.api.Status.DEPRECATED;
+        case    "OBSOLETE":     return org.opendaylight.yangtools.yang.model.api.Status.OBSOLETE;
+        default:
+            return null;
+        }
+    }
+    
+    private ContainerSchemaNode constructContainerSchemaNode(final QNameModule qnameModule,
+                                                             final ContrainerSchemaNode containerNode) {
+        return new ContainerSchemaNode() {
+            @Override
+            public org.opendaylight.yangtools.yang.model.api.Status getStatus() {
+                return constructStatus(containerNode.getStatus());
+            }
+            
+            @Override
+            public String getReference() { return containerNode.getReference(); }
+            
+            @Override
+            public String getDescription() { return containerNode.getDescription(); }
+            
+            @Override
+            public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+                List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+                // TODO populate this.
+                return unknownSchemaNodes;
+            }
+            
+            @Override
+            public QName getQName() { return QName.create(qnameModule, containerNode.getName()); }
+            
+            @Override
+            public SchemaPath getPath() {
+                SchemaPath  schemaPath  = SchemaPath.create(true, getQName());
+                // TODO fix this.
+                return schemaPath;
+            }
+            
+            @Override
+            public boolean isConfiguration() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAugmenting() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAddedByUses() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public ConstraintDefinition getConstraints() {
+                return constructConstraints(qnameModule, containerNode);
+            }
+            
+            @Override
+            public Set<AugmentationSchema> getAvailableAugmentations() {
+                Set<AugmentationSchema> availableAugmentations  = new HashSet<>();
+                // TODO populate this.
+                return availableAugmentations;
+            }
+            
+            @Override
+            public Set<UsesNode> getUses() {
+                Set<UsesNode>   uses    = new HashSet<>();
+                // TODO populate this.
+                return uses;
+            }
+            
+            @Override
+            public Set<TypeDefinition<?>> getTypeDefinitions() {
+                Set<TypeDefinition<?>>  typeDefinitions = new HashSet<>();
+                // TODO populate this.
+                return typeDefinitions;
+            }
+            
+            @Override
+            public Set<GroupingDefinition> getGroupings() {
+                Set<GroupingDefinition> groupings   = new HashSet<>();
+                // TODO populate this.
+                return groupings;
+            }
+            
+            @Override
+            public DataSchemaNode getDataChildByName(String paramString) {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public DataSchemaNode getDataChildByName(QName paramQName) {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Collection<DataSchemaNode> getChildNodes() {
+                Collection<DataSchemaNode>  childNodes  = new ArrayList<>();
+                for (ASTNode node : containerNode.getChildren()) {
+                    if (node instanceof ContrainerSchemaNode) {
+                        ContrainerSchemaNode    containerNode       = (ContrainerSchemaNode) node;
+                        ContainerSchemaNode     containerSchemaNode =
+                                constructContainerSchemaNode(qnameModule, containerNode);
+                        childNodes.add(containerSchemaNode);
+                    }
+                    else if (node instanceof LeafSchemaNode) {
+                        LeafSchemaNode  leafNode    = (LeafSchemaNode) node;
+                        org.opendaylight.yangtools.yang.model.api.LeafSchemaNode    leafSchemaNode  =
+                                constructLeafSchemaNode(qnameModule, leafNode);
+                        childNodes.add(leafSchemaNode);
+                    }
+                    else if (node instanceof LeafListSchemaNode) {
+                        LeafListSchemaNode  leafListNode    = (LeafListSchemaNode) node;
+                        org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode    leafListSchemaNode  =
+                                constructLeafListSchemaNode(qnameModule, leafListNode);
+                        childNodes.add(leafListSchemaNode);
+                    }
+                    else if (node instanceof ListSchemaNode) {
+                        ListSchemaNode  listNode    = (ListSchemaNode) node;
+                        org.opendaylight.yangtools.yang.model.api.ListSchemaNode    listSchemaNode  =
+                                constructListSchemaNode(qnameModule, listNode);
+                        childNodes.add(listSchemaNode);
+                    }
+                    else {
+                        //System.out.println("Unexpected node type of \"" + node.getClass().getName() + "\".");
+                    }
+                    
+                }
+                return childNodes;
+            }
+            
+            @Override
+            public boolean isPresenceContainer() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+        };
+    }
+    
+    private ConstraintDefinition constructConstraints(QNameModule qnameModule, ContrainerSchemaNode containerNode) {
+        return new ConstraintDefinition() {
+            @Override
+            public boolean isMandatory() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public RevisionAwareXPath getWhenCondition() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Set<MustDefinition> getMustConstraints() {
+                Set<MustDefinition> mustConstraints = new HashSet<>();
+                // TODO populate this.
+                return mustConstraints;
+            }
+            
+            @Override
+            public Integer getMinElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Integer getMaxElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+    private ConstraintDefinition constructConstraints(QNameModule qnameModule, LeafSchemaNode leafNode) {
+        return new ConstraintDefinition() {
+            @Override
+            public boolean isMandatory() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public RevisionAwareXPath getWhenCondition() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Set<MustDefinition> getMustConstraints() {
+                Set<MustDefinition> mustConstraints = new HashSet<>();
+                return mustConstraints;
+            }
+            
+            @Override
+            public Integer getMinElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Integer getMaxElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+    private ConstraintDefinition constructConstraints(QNameModule qnameModule, LeafListSchemaNode leafListNode) {
+        return new ConstraintDefinition() {
+            @Override
+            public boolean isMandatory() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public RevisionAwareXPath getWhenCondition() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Set<MustDefinition> getMustConstraints() {
+                Set<MustDefinition> mustConstraints = new HashSet<>();
+                return mustConstraints;
+            }
+            
+            @Override
+            public Integer getMinElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Integer getMaxElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+    private ConstraintDefinition constructConstraints(QNameModule qnameModule, ListSchemaNode listNode) {
+        return new ConstraintDefinition() {
+            @Override
+            public boolean isMandatory() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public RevisionAwareXPath getWhenCondition() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Set<MustDefinition> getMustConstraints() {
+                Set<MustDefinition> mustConstraints = new HashSet<>();
+                return mustConstraints;
+            }
+            
+            @Override
+            public Integer getMinElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public Integer getMaxElements() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+    private org.opendaylight.yangtools.yang.model.api.LeafSchemaNode    constructLeafSchemaNode(final QNameModule qnameModule, final LeafSchemaNode leafNode) {
+        return new org.opendaylight.yangtools.yang.model.api.LeafSchemaNode() {
+            @Override
+            public org.opendaylight.yangtools.yang.model.api.Status getStatus() {
+                return constructStatus(leafNode.getStatus());
+            }
+            
+            @Override
+            public String getReference() { return leafNode.getReference(); }
+            
+            @Override
+            public String getDescription() { return leafNode.getDescription(); }
+            
+            @Override
+            public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+                List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+                // TODO populate this.
+                return unknownSchemaNodes;
+           }
+            
+            @Override
+            public QName getQName() { return QName.create(qnameModule, leafNode.getName()); }
+            
+            @Override
+            public SchemaPath getPath() {
+                SchemaPath  schemaPath  = SchemaPath.create(true, getQName());
+                // TODO fix this.
+                return schemaPath;
+            }
+            
+            @Override
+            public boolean isConfiguration() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAugmenting() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAddedByUses() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public ConstraintDefinition getConstraints() { return constructConstraints(qnameModule, leafNode); }
+            
+            @Override
+            public String getUnits() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+            @Override
+            public TypeDefinition<?> getType() {
+                for (ASTNode node : leafNode.getChildren()) {
+                    if (node instanceof com.cisco.yangide.core.dom.TypeReference) {
+                        com.cisco.yangide.core.dom.TypeReference    typeReferenceNode   = (com.cisco.yangide.core.dom.TypeReference) node;
+                        return constructTypeDefinitionSchemaNode(qnameModule, typeReferenceNode);
+                    }
+                }
+                // TODO fix this.
+                return null;
+            }
+
+            @Override
+            public String getDefault() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+    private org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode    constructLeafListSchemaNode(final QNameModule qnameModule, final LeafListSchemaNode leafListNode) {
+        return new org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode() {
+            @Override
+            public org.opendaylight.yangtools.yang.model.api.Status getStatus() {
+                return constructStatus(leafListNode.getStatus());
+            }
+            
+            @Override
+            public String getReference() { return leafListNode.getReference(); }
+            
+            @Override
+            public String getDescription() { return leafListNode.getDescription(); }
+            
+            @Override
+            public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+                List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+                // TODO populate this.
+                return unknownSchemaNodes;
+           }
+            
+            @Override
+            public QName getQName() { return QName.create(qnameModule, leafListNode.getName()); }
+            
+            @Override
+            public SchemaPath getPath() {
+                SchemaPath  schemaPath  = SchemaPath.create(true, getQName());
+                // TODO fix this.
+                return schemaPath;
+            }
+            
+            @Override
+            public boolean isConfiguration() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAugmenting() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAddedByUses() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public ConstraintDefinition getConstraints() { return constructConstraints(qnameModule, leafListNode); }
+            
+            @Override
+            public TypeDefinition<?> getType() {
+                for (ASTNode node : leafListNode.getChildren()) {
+                    if (node instanceof com.cisco.yangide.core.dom.TypeReference) {
+                        com.cisco.yangide.core.dom.TypeReference    typeReferenceNode   = (com.cisco.yangide.core.dom.TypeReference) node;
+                        return constructTypeDefinitionSchemaNode(qnameModule, typeReferenceNode);
+                    }
+                }
+                // TODO fix this.
+                return null;
+            }
+
+            @Override
+            public boolean isUserOrdered() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+        };
+    }
+
+    private org.opendaylight.yangtools.yang.model.api.ListSchemaNode    constructListSchemaNode(final QNameModule qnameModule,
+                                                                                                final ListSchemaNode listNode) {
+        return new org.opendaylight.yangtools.yang.model.api.ListSchemaNode() {
+            @Override
+            public org.opendaylight.yangtools.yang.model.api.Status getStatus() {
+                return constructStatus(listNode.getStatus());
+            }
+            
+            @Override
+            public String getReference() { return listNode.getReference(); }
+            
+            @Override
+            public String getDescription() { return listNode.getDescription(); }
+            
+            @Override
+            public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+                List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+                // TODO populate this.
+                return unknownSchemaNodes;
+           }
+            
+            @Override
+            public QName getQName() { return QName.create(qnameModule, listNode.getName()); }
+            
+            @Override
+            public SchemaPath getPath() {
+                SchemaPath  schemaPath  = SchemaPath.create(true, getQName());
+                // TODO fix this.
+                return schemaPath;
+            }
+            
+            @Override
+            public boolean isConfiguration() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAugmenting() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public boolean isAddedByUses() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+            
+            @Override
+            public ConstraintDefinition getConstraints() { return constructConstraints(qnameModule, listNode); }
+            
+            @Override
+            public boolean isUserOrdered() {
+                // TODO Auto-generated method stub
+                return false;
+            }
+
+            @Override
+            public Set<TypeDefinition<?>> getTypeDefinitions() {
+                Set<TypeDefinition<?>>  typeDefinitions = new HashSet<>();
+                // TODO populate this.
+                return typeDefinitions;
+            }
+
+            @Override
+            public Collection<DataSchemaNode> getChildNodes() {
+                Collection<DataSchemaNode>  childNodes  = new ArrayList<>();
+                for (ASTNode node : listNode.getChildren()) {
+                    //System.out.println("node.type[" + node.getClass().getName() + "]");
+                    if (node instanceof ContrainerSchemaNode) {
+                        ContrainerSchemaNode    containerNode   = (ContrainerSchemaNode) node;
+                        ContainerSchemaNode containerSchemaNode  =
+                                constructContainerSchemaNode(getQNameModule(), containerNode);
+                        childNodes.add(containerSchemaNode);
+                    }
+                    else if (node instanceof LeafSchemaNode) {
+                        LeafSchemaNode  leafNode    = (LeafSchemaNode) node;
+                        org.opendaylight.yangtools.yang.model.api.LeafSchemaNode leafSchemaNode =
+                                constructLeafSchemaNode(getQNameModule(), leafNode);
+                        childNodes.add(leafSchemaNode);
+                    }
+                    else {
+                        //System.out.printlns("Actual type is not handled: " + node.getClass().getName());
+                    }
+                }
+                return childNodes;
+            }
+
+            @Override
+            public Set<GroupingDefinition> getGroupings() {
+                Set<GroupingDefinition> groupings   = new HashSet<>();
+                // TODO populate this.
+                return groupings;
+            }
+
+            @Override
+            public DataSchemaNode getDataChildByName(QName paramQName) {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public DataSchemaNode getDataChildByName(String paramString) {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public Set<UsesNode> getUses() {
+                Set<UsesNode>   uses    = new HashSet<>();
+                // TODO populate this.
+                return uses;
+            }
+
+            @Override
+            public Set<AugmentationSchema> getAvailableAugmentations() {
+                Set<AugmentationSchema> availableAugmentations  = new HashSet<>();
+                // TODO populate this.
+                return availableAugmentations;
+            }
+
+            @Override
+            public List<QName> getKeyDefinition() { 
+                List<QName> keyDefinitionList   = new ArrayList<>();
+                keyDefinitionList.add(QName.create(listNode.getKey().getName()));
+                return keyDefinitionList;
+            }
+        };
+    }
+
+    public TypeDefinition<?> constructTypeDefinitionSchemaNode(final QNameModule qnameModule, final com.cisco.yangide.core.dom.TypeDefinition typeDefinitionNode) {
+        return new TypeDefinition() {
+            @Override
+            public QName getQName() { return QName.create(qnameModule, typeDefinitionNode.getName()); }
+
+            @Override
+            public SchemaPath getPath() {
+                SchemaPath  schemaPath  = SchemaPath.create(true, getQName());
+                // TODO fix this.
+                return schemaPath;
+            }
+
+            @Override
+            public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+                List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+                // TODO populate this.
+                return unknownSchemaNodes;
+            }
+
+            @Override
+            public String getDescription() { return typeDefinitionNode.getDescription(); }
+
+            @Override
+            public String getReference() { return typeDefinitionNode.getReference(); }
+
+            @Override
+            public org.opendaylight.yangtools.yang.model.api.Status getStatus() { return constructStatus(typeDefinitionNode.getStatus()); }
+
+            @Override
+            public TypeDefinition getBaseType() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public String getUnits() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public Object getDefaultValue() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+    public TypeDefinition<?> constructTypeDefinitionSchemaNode(final QNameModule qnameModule, final com.cisco.yangide.core.dom.TypeReference typeReferenceNode) {
+        return new TypeDefinition() {
+            @Override
+            public QName getQName() { return QName.create(qnameModule, typeReferenceNode.getName()); }
+
+            @Override
+            public SchemaPath getPath() {
+                SchemaPath  schemaPath  = SchemaPath.create(true, getQName());
+                // TODO fix this.
+                return schemaPath;
+            }
+
+            @Override
+            public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+                List<UnknownSchemaNode> unknownSchemaNodes  = new ArrayList<>();
+                // TODO populate this.
+                return unknownSchemaNodes;
+            }
+
+            @Override
+            public String getDescription() { return typeReferenceNode.getDescription(); }
+
+            @Override
+            public String getReference() { return typeReferenceNode.getReference(); }
+
+            @Override
+            public org.opendaylight.yangtools.yang.model.api.Status getStatus() { return constructStatus(typeReferenceNode.getStatus()); }
+
+            @Override
+            public TypeDefinition getBaseType() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public String getUnits() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public Object getDefaultValue() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+        };
+    }
+
+}
\ No newline at end of file
index 0e470623e1989fd2dce389dd0680aed289282eb7..42a647630be19770d96191bb9de28aa7f7f7987c 100644 (file)
@@ -7,20 +7,48 @@
  *******************************************************************************/
 package com.cisco.yangide.ext.model.editor;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IStorageEditorInput;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.MultiPageEditorPart;
 import org.eclipse.ui.part.MultiPageEditorSite;
+import org.eclipse.wst.sse.ui.StructuredTextEditor;
 
 import com.cisco.yangide.core.YangCorePlugin;
 import com.cisco.yangide.editor.YangEditorPlugin;
@@ -32,6 +60,9 @@ import com.cisco.yangide.ext.model.editor.editors.YangDiagramEditor;
 import com.cisco.yangide.ext.model.editor.editors.YangDiagramEditorInput;
 import com.cisco.yangide.ext.model.editor.sync.ModelSynchronizer;
 
+import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException;
+
 /**
  * @author Konstantin Zaitsev
  * date: Aug 7, 2014
@@ -42,14 +73,24 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
     private YangSourceViewer yangSourceViewer;
     private YangDiagramEditor yangDiagramEditor;
     private ModelSynchronizer modelSynchronizer;
-
+    private StructuredTextEditor    yinSourcePage;
+    private YinViewInput    yinViewInput;
+    private boolean disposed;
+    
+    private static final int    INDEX_SOURCE_PAGE   = 0;
+    private static final int    INDEX_DIAGRAM_PAGE  = 1;
+    private static final int    INDEX_YIN_PAGE      = 2;
+    private static final String MSG_LOADING_YIN_VIEW = "Loading Yin View ...";
+    
     @Override
     protected void createPages() {
         yangSourceEditor = new YangEditor();
         yangDiagramEditor = new YangDiagramEditor(yangSourceEditor);
         modelSynchronizer = new ModelSynchronizer(yangSourceEditor, yangDiagramEditor);
+        yinSourcePage   = new StructuredTextEditor();
         initSourcePage();
         initDiagramPage();
+        initYinPage();
         modelSynchronizer.init();
         modelSynchronizer.enableNotification();
     }
@@ -92,8 +133,8 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
             Module diagModule = modelSynchronizer.getDiagramModule();
             YangDiagramEditorInput input = new YangDiagramEditorInput(URI.createURI("tmp:/local"), getFile(),
                     "com.cisco.yangide.ext.model.editor.editorDiagramTypeProvider", diagModule);
-            addPage(1, yangDiagramEditor, input);
-            setPageText(1, "Diagram");
+            addPage(INDEX_DIAGRAM_PAGE, yangDiagramEditor, input);
+            setPageText(INDEX_DIAGRAM_PAGE, "Diagram");
 
             yangDiagramEditor.setSourceModelManager(modelSynchronizer.getSourceModelManager());
         } catch (PartInitException e) {
@@ -113,8 +154,8 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
 
     private void initSourcePage() {
         try {
-            addPage(0, yangSourceEditor, getEditorInput());
-            setPageText(0, "Source");
+            addPage(INDEX_SOURCE_PAGE, yangSourceEditor, getEditorInput());
+            setPageText(INDEX_SOURCE_PAGE, "Source");
             yangSourceViewer = (YangSourceViewer) yangSourceEditor.getViewer();
         } catch (PartInitException e) {
             YangEditorPlugin.log(e);
@@ -122,28 +163,64 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
         setPartName(yangSourceEditor.getPartName());
     }
 
+    private void initYinPage() {
+        yinSourcePage.setEditorPart(this);
+        try {
+            // Second parameter is an IEditorPart.  Third parameter is an IEditorInput.
+            addPage(INDEX_YIN_PAGE, yinSourcePage, getYinViewInput());
+            setPageText(INDEX_YIN_PAGE, "Yin");
+        } catch (PartInitException e) {
+            YangEditorPlugin.log(e);
+        }
+    }
+    
+    private IEditorInput getYinViewInput() {
+        if (yinViewInput == null) {
+            String  content = MSG_LOADING_YIN_VIEW;
+            String  name    = getPartName() + "yin";
+            try {
+                yinViewInput    = new YinViewInput(name, name, content.getBytes("UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                yinViewInput    = new YinViewInput(name, name, content.getBytes());
+            }
+        }
+        return yinViewInput;
+    }
+    
     @Override
     protected void pageChange(int newPageIndex) {
-        if (newPageIndex == 1) {
+        if (newPageIndex != INDEX_DIAGRAM_PAGE) {
+            yangDiagramEditor.stopSourceSelectionUpdater();
+        }
+        else if (newPageIndex != INDEX_SOURCE_PAGE) {
+            yangSourceViewer.disableProjection();
+            if (yangSourceViewer.getReconciler() != null) {
+                yangSourceViewer.getReconciler().uninstall();
+            }
+            yangSourceViewer.disableTextListeners();
+        }
+        
+        if (newPageIndex == INDEX_DIAGRAM_PAGE) {
             modelSynchronizer.syncWithSource();
             if (modelSynchronizer.isSourceInvalid()) {
                 MessageDialog.openWarning(getSite().getShell(), "Yang source is invalid",
                         "Yang source has syntax error and diagram view cannot be synchronized correctly.\n"
                                 + "Please correct syntax error first.");
             }
-            yangSourceViewer.disableProjection();
-            if (yangSourceViewer.getReconciler() != null) {
-                yangSourceViewer.getReconciler().uninstall();
-            }
-            yangSourceViewer.disableTextListeners();
+//            yangSourceViewer.disableProjection();
+//            if (yangSourceViewer.getReconciler() != null) {
+//                yangSourceViewer.getReconciler().uninstall();
+//            }
+//            yangSourceViewer.disableTextListeners();
             try {
                 getEditorSite().getPage().showView("org.eclipse.ui.views.PropertySheet");
             } catch (PartInitException e) {
                 YangEditorPlugin.log(e);
             }
             yangDiagramEditor.startSourceSelectionUpdater();
-        } else {
-            yangDiagramEditor.stopSourceSelectionUpdater();
+        }
+        else if (newPageIndex == INDEX_SOURCE_PAGE) {
+//            yangDiagramEditor.stopSourceSelectionUpdater();
             IRegion highlightRange = yangSourceEditor.getHighlightRange();
             yangSourceViewer.enableTextListeners();
             yangSourceViewer.updateDocument();
@@ -154,9 +231,26 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
             }
             setSourceSelection(highlightRange);
         }
+        else if (newPageIndex == INDEX_YIN_PAGE) {
+            storeContentInYinView(MSG_LOADING_YIN_VIEW);
+            loadYinView();
+        }
         super.pageChange(newPageIndex);
     }
 
+    public void loadYinView() {
+        if (disposed)
+            return;
+    
+        LoadYinViewJob  job = new LoadYinViewJob(this, yangSourceEditor, "loadYinView");
+        job.schedule();
+    }
+    
+    public void storeContentInYinView(String content) {
+        IDocument   doc     = yinSourcePage.getDocumentProvider().getDocument(getYinViewInput());
+        doc.set(content);
+    }
+    
     private void setSourceSelection(IRegion highlightRange) {
         if (highlightRange != null) {
             Point selectedRange = yangSourceViewer.getSelectedRange();
@@ -182,6 +276,7 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
 
     @Override
     public void dispose() {
+        disposed    = true;
         try {
             modelSynchronizer.dispose();
         } catch (Exception e) {
@@ -194,4 +289,151 @@ public class YangMultiPageEditorPart extends MultiPageEditorPart implements IYan
     public void selectAndReveal(int offset, int length) {
         yangSourceEditor.selectAndReveal(offset, length);
     }
+
+    public static class YinViewInput implements IStorageEditorInput {
+        private final String name;
+        private final String tooltip;
+        private final byte[] content;
+
+        public YinViewInput(String name, String tooltip, byte[] content) {
+            this.name       = name;
+            this.tooltip    = tooltip;
+            this.content    = content;
+        }
+
+        @Override
+        public boolean exists() { return true; }
+
+        @Override
+        public ImageDescriptor getImageDescriptor() { return null; }
+
+        @Override
+        public String getName() { return this.name; }
+
+        @Override
+        public IPersistableElement getPersistable() { return null; }
+
+        @Override
+        public String getToolTipText() { return this.tooltip; }
+
+        @Override
+        public <T> T getAdapter(Class<T> adapter) { return null; }
+
+        @Override
+        public IStorage getStorage() throws CoreException { return new YinStorage(name, content); }
+    }
+    
+    public static class YinStorage implements IStorage {
+        private String  name;
+        private byte[]  content;
+        
+        public YinStorage(String name, byte[] content) {
+            this.name       = name;
+            this.content    = content;
+        }
+        
+        @Override
+        public <T> T getAdapter(Class<T> adapter) { return null; }
+
+        @Override
+        public InputStream getContents() throws CoreException { return new ByteArrayInputStream(this.content); }
+
+        @Override
+        public IPath getFullPath() { return null; }
+
+        @Override
+        public String getName() { return this.name; }
+
+        @Override
+        public boolean isReadOnly() { return true; }
+    }
+    
+    public static class LoadYinViewJob extends Job {
+        private YinBuilder              yinBuilder;
+        private YangMultiPageEditorPart editor;
+        public LoadYinViewJob(YangMultiPageEditorPart editor, YangEditor yangSourceEditor, String name) {
+            super(name);
+            this.editor     = editor;
+            this.yinBuilder = new YinBuilder(yangSourceEditor);
+        }
+        
+        @Override
+        protected IStatus run(IProgressMonitor monitor) {
+            // Now we start the real work of generating the Yin view.
+            // Get the module from parsing the content of the source view.  If that fails, present
+            // simple content that says it failed.
+            // There's a YangIDE "Module" class and a Yangtools "Module" class.  Convert from the former
+            // to the latter to use it.
+            // Construct a SharedSchemaRepository.
+            // This will use YinExportUtils to write the Yin file to an OutputStream.
+            // Specifically, YinExportUtils.writeModuleToOutputStream(SchemaContext, Module, OutputStream)
+
+            try {
+                ByteArrayOutputStream   baos    = new ByteArrayOutputStream();
+                yinBuilder.build(baos);
+                editor.storeContentInYinView(prettyPrintXML(baos.toString()));
+            }
+            catch (XMLStreamException | SchemaSourceException | IOException | YangSyntaxErrorException ex) {
+                YangCorePlugin.log(ex);
+                return new Status(Status.ERROR, YangCorePlugin.PLUGIN_ID, "Failed to generate Yin file");
+            }
+
+//            YangTextSchemaContextResolver   resolver    = YangTextSchemaContextResolver.create("yangide");
+//
+//            try {
+//                com.cisco.yangide.core.dom.Module   module  =
+//                        YangParserUtil.parseYangFile(this.getDocument().get().toCharArray());
+//                List<SourceIdentifier>  sourceIdentifiers   = collectSourceIds(module);
+//                if (sourceIdentifiers.size() == 1) {
+//                    resolver.registerSource(YangTextSchemaSource.delegateForByteSource(sourceIdentifiers.get(0),
+//                            ByteSource.wrap(data.yangSourceEditor.getDocument().get().getBytes())));
+//                }
+//                else {
+//                    for (SourceIdentifier id : sourceIdentifiers) {
+//                        System.out.println("id[" + id + "]");
+//                        // delegate will be a ByteArrayByteSource.
+//                        //                YangTextSchemaSource    source  = YangTextSchemaSource.delegateForByteSource(id, delegate);
+//                        //                resolver.registerSource(source);
+//                    }
+//                }
+//                ByteArrayOutputStream   baos    = new ByteArrayOutputStream();
+//                YinExportUtils.writeModuleToOutputStream(resolver.getSchemaContext().get(), new ModuleApiProxy(module), baos);
+//                data.editor.storeContentInYinView(prettyPrintXML(baos.toString()));
+//            }
+//            catch (XMLStreamException | SchemaSourceException | IOException | YangSyntaxErrorException ex) {
+//                YangCorePlugin.log(ex);
+//                return new Status(Status.ERROR, YangCorePlugin.PLUGIN_ID, "Failed to generate Yin file");
+//            }
+
+            return Status.OK_STATUS;
+        }
+        
+        private String prettyPrintXML(String xml) {
+            String  result  = null;
+            try {
+                TransformerFactory  factory = TransformerFactory.newInstance();
+                Transformer         transformer = factory.newTransformer();
+                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+                transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
+                StringWriter formattedStringWriter = new StringWriter();
+                transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(formattedStringWriter));
+                result  = formattedStringWriter.getBuffer().toString();; 
+            } catch (TransformerException e) {
+                YangCorePlugin.log(e);
+            }
+            return result;
+        }
+        
+//        private List<SourceIdentifier> collectSourceIds(com.cisco.yangide.core.dom.Module module) {
+//            List<SourceIdentifier>  sourceIdList    = new ArrayList<>();
+//            sourceIdList.add(new SourceIdentifier(module.getName(), module.getRevision()));
+//            for (ModuleImport moduleImport : module.getImports().values()) {
+//                sourceIdList.add(new SourceIdentifier(moduleImport.getName(), moduleImport.getRevision()));
+//            }
+//            for (SubModuleInclude subModuleInclude : module.getIncludes().values()) {
+//                sourceIdList.add(new SourceIdentifier(subModuleInclude.getName(), subModuleInclude.getRevision()));
+//            }
+//            return sourceIdList;
+//        }
+    }
 }
diff --git a/plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/YinBuilder.java b/plugins/com.cisco.yangide.ext.model.editor/src/com/cisco/yangide/ext/model/editor/YinBuilder.java
new file mode 100644 (file)
index 0000000..c4e028e
--- /dev/null
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2016 AT&T, Inc.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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 com.cisco.yangide.ext.model.editor;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.opendaylight.yangtools.yang.model.export.YinExportUtils;
+import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException;
+import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
+import org.opendaylight.yangtools.yang.parser.repo.YangTextSchemaContextResolver;
+
+import com.cisco.yangide.core.dom.ModuleImport;
+import com.cisco.yangide.core.dom.SubModuleInclude;
+import com.cisco.yangide.core.parser.YangParserUtil;
+import com.cisco.yangide.editor.editors.YangEditor;
+import com.google.common.io.ByteSource;
+
+public class YinBuilder {
+    private YangEditor  yangSourceEditor;
+
+    public YinBuilder(YangEditor yangSourceEditor) {
+        this.yangSourceEditor   = yangSourceEditor;
+    }
+
+    public void build(OutputStream outputStream) throws XMLStreamException, SchemaSourceException, IOException, YangSyntaxErrorException {
+        YangTextSchemaContextResolver   resolver    = YangTextSchemaContextResolver.create("yangide");
+
+        com.cisco.yangide.core.dom.Module   module  =
+                YangParserUtil.parseYangFile(yangSourceEditor.getDocument().get().toCharArray());
+        List<SourceIdentifier>  sourceIdentifiers   = collectSourceIds(module);
+        if (sourceIdentifiers.size() == 1) {
+            resolver.registerSource(YangTextSchemaSource.delegateForByteSource(sourceIdentifiers.get(0),
+                    ByteSource.wrap(yangSourceEditor.getDocument().get().getBytes())));
+        }
+        else {
+            for (SourceIdentifier id : sourceIdentifiers) {
+                //System.out.println("id[" + id + "]");
+                // delegate will be a ByteArrayByteSource.
+                //                YangTextSchemaSource    source  = YangTextSchemaSource.delegateForByteSource(id, delegate);
+                //                resolver.registerSource(source);
+            }
+        }
+        YinExportUtils.writeModuleToOutputStream(resolver.getSchemaContext().get(), new ModuleApiProxy(module), outputStream);
+    }
+
+    private List<SourceIdentifier> collectSourceIds(com.cisco.yangide.core.dom.Module module) {
+        List<SourceIdentifier>  sourceIdList    = new ArrayList<>();
+        sourceIdList.add(new SourceIdentifier(module.getName(), module.getRevision()));
+        for (ModuleImport moduleImport : module.getImports().values()) {
+            sourceIdList.add(new SourceIdentifier(moduleImport.getName(), moduleImport.getRevision()));
+        }
+        for (SubModuleInclude subModuleInclude : module.getIncludes().values()) {
+            sourceIdList.add(new SourceIdentifier(subModuleInclude.getName(), subModuleInclude.getRevision()));
+        }
+        return sourceIdList;
+    }
+}
\ No newline at end of file
index 065ac06e197692d54ca4890fd3674df11d41c8c0..46cec6ed2a0bc1805bdc5252d405d5e0ead9bd36 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-       <classpathentry kind="output" path="bin"/>
+       <classpathentry kind="src" path="src/"/>
+       <classpathentry kind="output" path="target/classes"/>
 </classpath>
index 387a55d99a68fb39391227832e97d381dc71954c..46cec6ed2a0bc1805bdc5252d405d5e0ead9bd36 100644 (file)
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" path="src"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="src" path="src/"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index 7641f12dac1af4c72cdd06b6c4d3f3aed6b36472..cf36b561195a3e4e3849ff022040558ccc6c3074 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry including="**/*.java" kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="src" path="src/"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index fb7fb386d997c77b5be853744d9a25c50dd2ad7f..5ea29ae1cb87f05167b00f3bf22574ea339a66e9 100644 (file)
@@ -49,9 +49,9 @@
 
               <dependencies>
                   <dependency>
-                      <groupId>org.opendaylight.yangtools</groupId>
+                      <groupId>org.opendaylight.mdsal</groupId>
                       <artifactId>maven-sal-api-gen-plugin</artifactId>
-                      <version>0.6.2-Helium</version>
+                      <version>0.8.0-Beryllium</version>
                       <type>jar</type>
                   </dependency>
               </dependencies>
@@ -77,9 +77,9 @@
   </build>
   <dependencies>
       <dependency>
-          <groupId>org.opendaylight.yangtools</groupId>
+          <groupId>org.opendaylight.mdsal</groupId>
           <artifactId>yang-binding</artifactId>
-          <version>0.6.2-Helium</version>
+          <version>0.8.0-Beryllium</version>
       </dependency>
   </dependencies>
 </project>
index 7641f12dac1af4c72cdd06b6c4d3f3aed6b36472..46cec6ed2a0bc1805bdc5252d405d5e0ead9bd36 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry including="**/*.java" kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="src" path="src/"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index af2a43e054d6b9b5277db0b4f99a925c785c4fb1..cf36b561195a3e4e3849ff022040558ccc6c3074 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="src" path="src/"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index cb52a12f39f98c0af055f0756ed94da5db926ce3..1d2ccb3713321f627876d68f8d17f0f3c0cc8235 100644 (file)
@@ -218,7 +218,7 @@ public class YangProjectWizard extends MavenProjectWizard {
         model.getProperties().put("maven.compiler.target", "1.8");
 
         Dependency dependency2 = new Dependency();
-        dependency2.setGroupId("org.opendaylight.yangtools");
+        dependency2.setGroupId("org.opendaylight.mdsal");
         dependency2.setArtifactId("yang-binding");
         dependency2.setVersion(yangVersion);
         dependency2.setType("jar");
index 37d7c89fc5c68848d08b83c58de4150334691770..6d9b7655d9bfd0aba845ce826bbec84a14dabe99 100644 (file)
@@ -84,15 +84,12 @@ class YangProjectWizardPage extends WizardPage {
 
         // add default values
         // TODO KOS: load version from repository
-        yangVersion.add("0.6.2-Helium");
-        yangVersion.add("0.6.1");
-        yangVersion.add("0.6.0");
-        yangVersion.add("0.5.8");
+        yangVersion.add("0.8.0-Beryllium");
         yangVersion.select(0);
 
         // default generator
         CodeGeneratorConfig config = new CodeGeneratorConfig();
-        config.setGroupId("org.opendaylight.yangtools");
+        config.setGroupId("org.opendaylight.mdsal");
         config.setArtifactId("maven-sal-api-gen-plugin");
         config.setVersion(yangVersion.getText());
         config.setGenClassName("org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl");
diff --git a/plugins/com.cisco.yangide.yangparser/.classpath b/plugins/com.cisco.yangide.yangparser/.classpath
new file mode 100644 (file)
index 0000000..144d59e
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src/"/>
+       <classpathentry exported="true" kind="lib" path="libs/concepts-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/object-cache-api-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/util-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-model-api-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-model-export-0.8.0-Beryllium.jar" sourcepath="/home/opnfv/git/opendaylight/yangtools/yang/yang-model-export/src/main/java"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-model-util-0.8.0-Beryllium.jar" sourcepath="/home/opnfv/git/opendaylight/yangtools/yang/yang-model-util/src/main/java"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-parser-impl-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-parser-api-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/yang-common-0.8.0-Beryllium.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/guava-18.0.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/antlr4-runtime-4.5.1.jar"/>
+       <classpathentry exported="true" kind="lib" path="libs/jsr305-3.0.0.jar"/>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/com.cisco.yangide.yangparser/.options b/plugins/com.cisco.yangide.yangparser/.options
new file mode 100644 (file)
index 0000000..329e86e
--- /dev/null
@@ -0,0 +1,2 @@
+org.eclipse.osgi/resolver/debug=true
+org.eclipse.osgi/resolver/wiring=true
diff --git a/plugins/com.cisco.yangide.yangparser/.project b/plugins/com.cisco.yangide.yangparser/.project
new file mode 100644 (file)
index 0000000..e35193b
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>com.cisco.yangide.yangparser</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.m2e.core.maven2Builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.m2e.core.maven2Nature</nature>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.core.resources.prefs b/plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..99f26c0
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.jdt.core.prefs b/plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..0c68a61
--- /dev/null
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.m2e.core.prefs b/plugins/com.cisco.yangide.yangparser/.settings/org.eclipse.m2e.core.prefs
new file mode 100644 (file)
index 0000000..f897a7f
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/plugins/com.cisco.yangide.yangparser/META-INF/MANIFEST.MF b/plugins/com.cisco.yangide.yangparser/META-INF/MANIFEST.MF
new file mode 100644 (file)
index 0000000..9b5844d
--- /dev/null
@@ -0,0 +1,43 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: com.cisco.yangide.yangparser
+Bundle-SymbolicName: com.cisco.yangide.yangparser;singleton:=true
+Bundle-Version: 1.1.1.qualifier
+Bundle-Activator: com.cisco.yangide.yangparser.YangParserPlugin
+Bundle-Vendor: Cisco Systems, Inc.
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.jdt.core;visibility:=reexport,
+ org.eclipse.text,
+ org.eclipse.core.resources,
+ org.eclipse.core.filesystem,
+ com.google.guava;bundle-version="15.0.0",
+ org.slf4j.api;bundle-version="1.7.2"
+Bundle-ClassPath: .,
+ libs/concepts-0.8.0-Beryllium.jar,
+ libs/object-cache-api-0.8.0-Beryllium.jar,
+ libs/util-0.8.0-Beryllium.jar,
+ libs/yang-model-api-0.8.0-Beryllium.jar,
+ libs/yang-model-export-0.8.0-Beryllium.jar,
+ libs/yang-model-util-0.8.0-Beryllium.jar,
+ libs/yang-parser-impl-0.8.0-Beryllium.jar,
+ libs/yang-parser-api-0.8.0-Beryllium.jar,
+ libs/yang-common-0.8.0-Beryllium.jar,
+ libs/guava-18.0.jar,
+ libs/antlr4-runtime-4.5.1.jar,
+ libs/jsr305-3.0.0.jar
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: org.antlr.v4.runtime,
+ org.opendaylight.yangtools.concepts,
+ org.opendaylight.yangtools.yang.common,
+ org.opendaylight.yangtools.yang.model.api,
+ org.opendaylight.yangtools.yang.model.api.meta,
+ org.opendaylight.yangtools.yang.model.api.stmt,
+ org.opendaylight.yangtools.yang.model.api.type,
+ org.opendaylight.yangtools.yang.model.export,
+ org.opendaylight.yangtools.yang.model.parser.api,
+ org.opendaylight.yangtools.yang.model.repo.api,
+ org.opendaylight.yangtools.yang.model.repo.spi,
+ org.opendaylight.yangtools.yang.model.repo.util,
+ org.opendaylight.yangtools.yang.model.util,
+ org.opendaylight.yangtools.yang.parser.repo
diff --git a/plugins/com.cisco.yangide.yangparser/build.properties b/plugins/com.cisco.yangide.yangparser/build.properties
new file mode 100644 (file)
index 0000000..66d71f5
--- /dev/null
@@ -0,0 +1,25 @@
+###############################################################################
+# Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
+#  
+#  This program and the accompanying materials are made available under the
+#  terms of the Eclipse Public License v1.0 which accompanies this distribution,
+#  and is available at http://www.eclipse.org/legal/epl-v10.html
+#  
+###############################################################################
+source.. = src/
+output.. = target/classes
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               libs/concepts-0.8.0-Beryllium.jar,\
+               libs/object-cache-api-0.8.0-Beryllium.jar,\
+               libs/util-0.8.0-Beryllium.jar,\
+               libs/yang-model-api-0.8.0-Beryllium.jar,\
+               libs/yang-model-export-0.8.0-Beryllium.jar,\
+               libs/yang-model-util-0.8.0-Beryllium.jar,\
+               libs/yang-parser-impl-0.8.0-Beryllium.jar,\
+               libs/yang-parser-api-0.8.0-Beryllium.jar,\
+               libs/yang-common-0.8.0-Beryllium.jar,\
+               libs/guava-18.0.jar,\
+               libs/antlr4-runtime-4.5.1.jar,\
+               libs/jsr305-3.0.0.jar
diff --git a/plugins/com.cisco.yangide.yangparser/plugin.xml b/plugins/com.cisco.yangide.yangparser/plugin.xml
new file mode 100644 (file)
index 0000000..8a55b50
--- /dev/null
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
+     
+     This program and the accompanying materials are made available under the
+     terms of the Eclipse Public License v1.0 which accompanies this distribution,
+     and is available at http://www.eclipse.org/legal/epl-v10.html
+     
+ -->
+<!--                                                                                -->
+<!-- This program and the accompanying materials are made available under the       -->
+<!-- terms of the Eclipse Public License v1.0 which accompanies this distribution,  -->
+<!-- and is available at http://www.eclipse.org/legal/epl-v10.html                  -->
+<!-- ============================================================================== -->
+<plugin>
+    <extension point="org.eclipse.core.contenttype.contentTypes">
+        <content-type 
+            id="com.cisco.yangide.core.yangFile" 
+            name="YANG File" 
+            base-type="org.eclipse.core.runtime.text"
+            priority="high"/>
+        <file-association content-type="yangFile" file-extensions="yang"/>
+    </extension>
+    
+   <extension point="org.eclipse.core.resources.markers"
+         id="problem"
+         name="YANG Problem">
+      <persistent value="true"/>
+      <super type="org.eclipse.core.resources.problemmarker"/>
+      <super type="org.eclipse.core.resources.textmarker"/>
+   </extension>
+
+   <extension point="org.eclipse.core.resources.markers"
+         id="syntaxproblem"
+         name="YANG Syntax Problem">
+      <super type="org.eclipse.core.resources.textmarker"/>
+   </extension>
+   
+    <extension
+      point="org.eclipse.ui.editors.markerAnnotationSpecification">
+      
+        <specification
+            annotationType="com.cisco.yangide.core.error"
+            symbolicIcon="error"
+            includeOnPreferencePage="true"
+            label="YANG Problem"
+            colorPreferenceKey="com.cisco.yangide.core.error.color"
+            colorPreferenceValue="192,255,192"
+            overviewRulerPreferenceKey="com.cisco.yangide.core.error.overview"
+            textPreferenceKey="com.cisco.yangide.core.error.text"
+            >
+        </specification>
+    </extension>
+    
+    <extension
+          point="org.eclipse.ui.editors.annotationTypes">
+        <type
+            name="com.cisco.yangide.core.error"
+            super="org.eclipse.ui.workbench.texteditor.error"
+            markerType="com.cisco.yangide.core.problem"
+            markerSeverity="2">
+        </type>
+      <type
+            name="com.cisco.yangide.core.syntax"
+            super="org.eclipse.ui.workbench.texteditor.error"
+            markerType="com.cisco.yangide.core.syntaxproblem"
+            markerSeverity="2">
+      </type>
+    </extension>
+</plugin>
diff --git a/plugins/com.cisco.yangide.yangparser/pom.xml b/plugins/com.cisco.yangide.yangparser/pom.xml
new file mode 100644 (file)
index 0000000..e30904d
--- /dev/null
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
+     
+     This program and the accompanying materials are made available under the
+     terms of the Eclipse Public License v1.0 which accompanies this distribution,
+     and is available at http://www.eclipse.org/legal/epl-v10.html
+     
+ -->
+<!--                                                                                -->
+<!-- This program and the accompanying materials are made available under the       -->
+<!-- terms of the Eclipse Public License v1.0 which accompanies this distribution,  -->
+<!-- and is available at http://www.eclipse.org/legal/epl-v10.html                  -->
+<!-- ============================================================================== -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.opendaylight.yangide</groupId>
+    <artifactId>com.cisco.yangide.parent</artifactId>
+    <version>1.1.1-SNAPSHOT</version>
+    <relativePath>../..</relativePath>
+  </parent>
+
+  <artifactId>com.cisco.yangide.yangparser</artifactId>
+  <packaging>eclipse-plugin</packaging>
+  <version>1.1.1-SNAPSHOT</version>
+  <properties>
+    <odl-version>0.8.0-Beryllium</odl-version>
+  </properties>
+  <build>
+    <sourceDirectory>src</sourceDirectory>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-clean-plugin</artifactId>
+            <configuration>
+                <filesets>
+                    <fileset>
+                        <directory>libs</directory>
+                    </fileset>
+                </filesets>
+            </configuration>
+        </plugin>
+        <plugin>
+            <!-- Tycho cannot use Maven dependencies directly, and we can't store the jars directly
+            in the project (as they were originally), so we use this goal to copy the required
+            dependencies into the location expected in the manifest.
+             -->
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-dependency-plugin</artifactId>
+            <executions>
+                <execution>
+                    <id>copy</id>
+                    <phase>process-resources</phase>
+                    <goals>
+                        <goal>copy</goal>
+                    </goals>
+                    <configuration>
+                        <outputDirectory>./libs</outputDirectory>
+                        <artifactItems>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>yang-model-api</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>yang-model-api-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>yang-model-util</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>yang-model-util-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>yang-parser-impl</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>yang-parser-impl-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>yang-parser-api</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>yang-parser-api-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>concepts</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>concepts-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>util</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>util-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>object-cache-api</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>object-cache-api-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>yang-model-export</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>yang-model-export-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.opendaylight.yangtools</groupId>
+                                <artifactId>yang-common</artifactId>
+                                <version>${odl-version}</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>yang-common-${odl-version}.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>org.antlr</groupId>
+                                <artifactId>antlr4-runtime</artifactId>
+                                <version>4.5.1</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>antlr4-runtime-4.5.1.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <groupId>com.google.guava</groupId>
+                                <artifactId>guava</artifactId>
+                                <version>18.0</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>guava-18.0.jar</destFileName>
+                            </artifactItem>
+                            <artifactItem>
+                                <!-- The only reason to provide this artifact is so that calling methods in the
+                                Eclipse debugger "Display" view can work.  Otherwise, it reports errors about not finding
+                                Nullable and other related classes.
+                                 -->
+                                <groupId>com.google.code.findbugs</groupId>
+                                <artifactId>jsr305</artifactId>
+                                <version>3.0.0</version>
+                                <type>jar</type>
+                                <overWrite>true</overWrite>
+                                <destFileName>jsr305-3.0.0.jar</destFileName>
+                            </artifactItem>
+                        </artifactItems>
+                    </configuration>
+                </execution>
+            </executions>
+        </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/plugins/com.cisco.yangide.yangparser/src/com/cisco/yangide/yangparser/YangParserPlugin.java b/plugins/com.cisco.yangide.yangparser/src/com/cisco/yangide/yangparser/YangParserPlugin.java
new file mode 100644 (file)
index 0000000..0716e49
--- /dev/null
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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 com.cisco.yangide.yangparser;
+
+import java.io.File;
+
+import org.eclipse.core.filesystem.URIUtil;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class YangParserPlugin extends Plugin {
+
+    /** The plug-in ID */
+    public static final String PLUGIN_ID = "com.cisco.yangide.yangparser"; //$NON-NLS-1$
+
+    /** The shared instance */
+    private static YangParserPlugin plugin;
+
+    @Override
+    public void start(BundleContext context) throws Exception {
+        super.start(context);
+        plugin = this;
+    }
+
+    @Override
+    public void stop(BundleContext context) throws Exception {
+        plugin = null;
+    }
+
+    /**
+     * Returns the shared instance
+     *
+     * @return the shared instance
+     */
+    public static YangParserPlugin getDefault() {
+        return plugin;
+    }
+}
diff --git a/pom.xml b/pom.xml
index 0fd0b1fd3a149d38762eefae2ae81fee69662119..5a46e9670136134b232773a8e6c202cb271cd5e4 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -28,6 +28,7 @@
 
   <modules>
     <!-- plugins -->
+    <module>plugins/com.cisco.yangide.yangparser</module>
     <module>plugins/com.cisco.yangide.core</module>
     <module>plugins/com.cisco.yangide.ui</module>
     <module>plugins/com.cisco.yangide.editor</module>
index 08ae9753a6f93de761e93c74148160e404e050b3..5c2a0626385a5ead8ce89f64c62b88fc599086f9 100644 (file)
@@ -2,8 +2,6 @@
 <?pde version="3.8"?><target includeMode="feature" name="YANG IDE Target Platform" sequenceNumber="26">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="com.google.guava" version="15.0.0.v201403281430"/>
-<unit id="com.google.guava.source" version="15.0.0.v201403281430"/>
 <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140525021250/repository/"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
index 17b023cb2d82613f0bdd483465cecc2e6568f81b..1c43a3531baa7ef8da57d5e33934d0ac57a9e701 100644 (file)
                        <attribute name="maven.pomderived" value="true"/>
                </attributes>
        </classpathentry>
-       <classpathentry kind="src" output="target/classes" path="src/main/yang">
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
                <attributes>
-                       <attribute name="ignore_optional_problems" value="true"/>
-                       <attribute name="optional" value="true"/>
                        <attribute name="maven.pomderived" value="true"/>
                </attributes>
        </classpathentry>
-       <classpathentry kind="src" output="target/classes" path="target/generated-sources/sal">
+       <classpathentry kind="src" output="target/classes" path="src/main/yang">
                <attributes>
-                       <attribute name="ignore_optional_problems" value="true"/>
                        <attribute name="optional" value="true"/>
                        <attribute name="maven.pomderived" value="true"/>
+                       <attribute name="ignore_optional_problems" value="true"/>
                </attributes>
        </classpathentry>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+       <classpathentry kind="src" output="target/classes" path="target/generated-sources/sal">
                <attributes>
+                       <attribute name="optional" value="true"/>
                        <attribute name="maven.pomderived" value="true"/>
+                       <attribute name="ignore_optional_problems" value="true"/>
                </attributes>
        </classpathentry>
        <classpathentry kind="output" path="target/classes"/>
index 31650ae493b0c370bc3fa159898210e59344ddda..7f7837c882235afb38647db599b3ebc159f96967 100644 (file)
@@ -10,9 +10,9 @@
        </properties>
        <dependencies>
                <dependency>
-                       <groupId>org.opendaylight.yangtools</groupId>
+                       <groupId>org.opendaylight.mdsal</groupId>
                        <artifactId>yang-binding</artifactId>
-                       <version>0.6.2-Helium</version>
+                       <version>0.8.0-Beryllium</version>
                </dependency>
                <dependency>
                        <groupId>yang-test</groupId>
                                </executions>
                                <dependencies>
                                        <dependency>
-                                               <groupId>org.opendaylight.yangtools</groupId>
+                                               <groupId>org.opendaylight.mdsal</groupId>
                                                <artifactId>maven-sal-api-gen-plugin</artifactId>
-                                               <version>0.6.2-Helium</version>
+                                               <version>0.8.0-Beryllium</version>
                                        </dependency>
                                </dependencies>
                        </plugin>
                </plugins>
        </build>
-</project>
\ No newline at end of file
+</project>
index bdc48c2200905fa519f9472038e15fff2f09d844..9959c4b81276923dbbaffc08e1d790b4e536ed04 100644 (file)
                        <attribute name="maven.pomderived" value="true"/>
                </attributes>
        </classpathentry>
-       <classpathentry kind="src" output="target/classes" path="src/main/yang">
-               <attributes>
-                       <attribute name="ignore_optional_problems" value="true"/>
-                       <attribute name="optional" value="true"/>
-                       <attribute name="maven.pomderived" value="true"/>
-               </attributes>
-       </classpathentry>
-       <classpathentry kind="src" output="target/classes" path="target/generated-sources/sal">
-               <attributes>
-                       <attribute name="ignore_optional_problems" value="true"/>
-                       <attribute name="optional" value="true"/>
-                       <attribute name="maven.pomderived" value="true"/>
-               </attributes>
-       </classpathentry>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
        <classpathentry kind="output" path="target/classes"/>
 </classpath>
index 197278195db89558ffd471f339c00251c462f518..74a29e5e83745e6de5ac3b867ead23ecc45cd548 100644 (file)
@@ -9,9 +9,9 @@
   </properties>
   <dependencies>
     <dependency>
-      <groupId>org.opendaylight.yangtools</groupId>
+      <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>yang-binding</artifactId>
-      <version>0.6.2-Helium</version>
+      <version>0.8.0-Beryllium</version>
     </dependency>
   </dependencies>
   <repositories>
         </executions>
         <dependencies>
           <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
+            <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>maven-sal-api-gen-plugin</artifactId>
-            <version>0.6.2-Helium</version>
+            <version>0.8.0-Beryllium</version>
           </dependency>
         </dependencies>
       </plugin>
     </plugins>
   </build>
-</project>
\ No newline at end of file
+</project>
index e26ecdaddc07d3bb58ebee317b8e46272d07c955..063b2574653d54bfd3c7574a7959f843f8ae2b39 100644 (file)
@@ -65,9 +65,9 @@ get-editor "org.test.yang.example/pom.xml" | get-text-viewer | get-property text
     + "  </properties>\n"
     + "  <dependencies>\n"
     + "    <dependency>\n"
-    + "      <groupId>org.opendaylight.yangtools</groupId>\n"
+    + "      <groupId>org.opendaylight.mdsal</groupId>\n"
     + "      <artifactId>yang-binding</artifactId>\n"
-    + "      <version>0.6.1</version>\n"
+    + "      <version>0.8.0-Beryllium</version>\n"
     + "    </dependency>\n"
     + "  </dependencies>\n"
     + "  <repositories>\n"
@@ -120,9 +120,9 @@ get-editor "org.test.yang.example/pom.xml" | get-text-viewer | get-property text
     + "        </executions>\n"
     + "        <dependencies>\n"
     + "          <dependency>\n"
-    + "            <groupId>org.opendaylight.yangtools</groupId>\n"
+    + "            <groupId>org.opendaylight.mdsal</groupId>\n"
     + "            <artifactId>maven-sal-api-gen-plugin</artifactId>\n"
-    + "            <version>0.6.1</version>\n"
+    + "            <version>0.8.0-Beryllium</version>\n"
     + "          </dependency>\n"
     + "        </dependencies>\n"
     + "      </plugin>\n"