Added yang-test-plugin maven plugin. 85/3385/1
authorMilos Fabian <milfabia@cisco.com>
Tue, 3 Dec 2013 08:30:38 +0000 (09:30 +0100)
committerMilos Fabian <milfabia@cisco.com>
Tue, 3 Dec 2013 08:38:25 +0000 (09:38 +0100)
Generated source files are deleted before new ones are genarated, after that implemantaion code from stub.txt is inserted.

Change-Id: I24d0748bd9ed10908785ba88341e8a4f4cde6958
Signed-off-by: Milos Fabian <milfabia@cisco.com>
14 files changed:
opendaylight/config/pom.xml
opendaylight/config/yang-test-plugin/pom.xml [new file with mode: 0644]
opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/DeleteSources.java [new file with mode: 0644]
opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/ProcessSources.java [new file with mode: 0644]
opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/Util.java [new file with mode: 0644]
opendaylight/config/yang-test-plugin/src/main/resources/Header.txt [new file with mode: 0644]
opendaylight/config/yang-test/pom.xml
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/DepTestImplModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/DepTestImplModuleFactory.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/NetconfTestImplModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/NetconfTestImplModuleFactory.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/NetconfTestImplModuleUtil.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/TestImplModule.java
opendaylight/config/yang-test/src/main/java/org/opendaylight/controller/config/yang/test/impl/TestImplModuleFactory.java

index c9ed19d..675e5cf 100644 (file)
@@ -39,6 +39,7 @@
         <module>netty-event-executor-config</module>
         <module>netty-timer-config</module>
         <module>config-persister-directory-adapter</module>
+        <module>yang-test-plugin</module>
     </modules>
 
     <profiles>
diff --git a/opendaylight/config/yang-test-plugin/pom.xml b/opendaylight/config/yang-test-plugin/pom.xml
new file mode 100644 (file)
index 0000000..30ac855
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>config-plugin-parent</artifactId>
+        <version>0.2.3-SNAPSHOT</version>
+        <relativePath>../config-plugin-parent</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>maven-plugin</packaging>
+    <artifactId>yang-test-plugin</artifactId>
+
+    <description>Remove generated source files, after new files generation, implementation is inserted.</description>
+    <name>${project.artifactId}</name>
+    <prerequisites>
+        <maven>3.0.4</maven>
+    </prerequisites>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>3.0.5</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/DeleteSources.java b/opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/DeleteSources.java
new file mode 100644 (file)
index 0000000..4610662
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.plugin;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+
+import java.io.File;
+
+/**
+ * Delete all Module/ModuleFactory sources
+ *
+ * @goal delete-sources
+ *
+ * @phase initialize
+ */
+public class DeleteSources extends AbstractMojo{
+    /**
+     * @parameter expression="${project.build.sourceDirectory}"
+     * @readOnly
+     * @required
+     */
+    private File directory;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if (directory == null || !directory.exists()) {
+            super.getLog().error("Directory does not exists.");
+        }
+        File sourceDirectory = new File(directory.getPath() + Util.replaceDots(".org.opendaylight.controller.config.yang.test.impl"));
+        if (sourceDirectory == null || !sourceDirectory.exists()) {
+            super.getLog().error("Source directory does not exists " + sourceDirectory.getPath());
+        }
+        File[] sourceFiles = sourceDirectory.listFiles();
+        for (File sourceFile: sourceFiles) {
+            if(sourceFile.getName().endsWith("Module.java") || sourceFile.getName().endsWith("ModuleFactory.java")) {
+                super.getLog().debug("Source file deleted: " + sourceFile.getName());
+                sourceFile.delete();
+            }
+        }
+    }
+}
diff --git a/opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/ProcessSources.java b/opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/ProcessSources.java
new file mode 100644 (file)
index 0000000..dbb9ddb
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.plugin;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+
+/**
+ * Add implementation code from stub.txt
+ *
+ * @goal process-sources
+ *
+ * @phase process-sources
+ *
+ */
+public class ProcessSources extends AbstractMojo{
+    /**
+     * @parameter expression="${project.build.sourceDirectory}"
+     * @readOnly
+     * @required
+     */
+    private File directory;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if (directory == null || !directory.exists()) {
+            super.getLog().error("Directory does not exists.");
+        }
+        File sourceDirectory = new File(directory.getPath() + Util.replaceDots(".org.opendaylight.controller.config.yang.test.impl"));
+        if (!sourceDirectory.exists()) {
+            super.getLog().error("Source directory does not exists " + sourceDirectory.getPath());
+        }
+        String header = "";
+        try {
+            header = Util.loadHeader();
+        } catch (IOException e) {
+           super.getLog().error("Header.txt not found.");
+        }
+        File[] sourceFiles = sourceDirectory.listFiles();
+        for (File sourceFile: sourceFiles) {
+            if(sourceFile.getName().endsWith("Module.java") || sourceFile.getName().endsWith("ModuleFactory.java")) {
+                File stubFile = new File(sourceFile.getPath().replace(".java", "Stub.txt"));
+                String stubLines = null;
+                try {
+                    if (stubFile.exists()) {
+                        stubLines = Util.loadStubFile(stubFile.getPath());
+                    }
+
+                    InputStream javaIn = new FileInputStream(sourceFile.getPath());
+                    BufferedReader javaBuf = new BufferedReader(new InputStreamReader(javaIn));
+                    StringBuffer output = new StringBuffer();
+                    String line = javaBuf.readLine();
+                    boolean writeLine = false;
+                    while ((line = javaBuf.readLine()) != null) {
+                        if(!writeLine && line.contains("*/")) {
+                            line = header;
+                            writeLine = true;
+                        } else {
+                            if (line.contains("TODO")) {
+                                writeLine = false;
+                            } else {
+                                if (stubLines != null && line.contains("throw new")) {
+                                    line = stubLines.toString();
+                                    writeLine = true;
+                                }
+                            }
+                        }
+                        if(writeLine) {
+                            output.append(line).append(System.lineSeparator());
+                        }
+                    }
+                    javaBuf.close();
+
+                    OutputStream javaOut = new FileOutputStream(sourceFile.getPath());
+                    javaOut.write(output.toString().getBytes());
+                    javaOut.close();
+                } catch (IOException e) {
+                    getLog().error("Error while reading/writing to files.", e);
+                }
+
+            }
+        }
+    }
+}
diff --git a/opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/Util.java b/opendaylight/config/yang-test-plugin/src/main/java/org/opendaylight/controller/config/yang/test/plugin/Util.java
new file mode 100644 (file)
index 0000000..16a41d9
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.plugin;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.regex.Matcher;
+
+public class Util {
+
+    public static String replaceDots(String path) {
+        path = path.replace(".", Matcher.quoteReplacement(File.separator));
+        return path;
+    }
+
+    public static String loadHeader() throws IOException {
+        StringBuffer header = new StringBuffer();
+        InputStream headIn = Util.class.getClassLoader().getResourceAsStream("Header.txt");
+        BufferedReader headBuf = new BufferedReader(new InputStreamReader(headIn));
+        String line = null;
+        while ((line = headBuf.readLine()) != null) {
+            header.append(line).append(System.lineSeparator());
+        }
+        headBuf.close();
+        return header.toString();
+    }
+
+    public static String loadStubFile(String fileName) throws IOException {
+        InputStream stubIn = new FileInputStream(fileName);
+        BufferedReader stubBuf = new BufferedReader(new InputStreamReader(stubIn));
+
+        StringBuffer stubLines = new StringBuffer();
+        String stubLine = null;
+        while ((stubLine = stubBuf.readLine()) != null) {
+            stubLines.append(stubLine).append(System.lineSeparator());
+        }
+        stubBuf.close();
+        return stubLines.toString();
+    }
+}
diff --git a/opendaylight/config/yang-test-plugin/src/main/resources/Header.txt b/opendaylight/config/yang-test-plugin/src/main/resources/Header.txt
new file mode 100644 (file)
index 0000000..068fd26
--- /dev/null
@@ -0,0 +1,7 @@
+/*
+ * Copyright (c) 2013 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
+ */
\ No newline at end of file
index e3737c7..149348d 100644 (file)
                     </dependency>
                 </dependencies>
             </plugin>
+            <plugin>
+                <groupId>org.opendaylight.controller</groupId>
+                <artifactId>yang-test-plugin</artifactId>
+                <version>${config.version}</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>delete-sources</goal>
+                            <goal>process-sources</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 </project>
index 1122c1f..c64f824 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.impl;
 
 /**
@@ -28,5 +36,6 @@ public final class DepTestImplModule extends org.opendaylight.controller.config.
             public void close() throws Exception {
             }
         };
+
     }
 }
index 4152736..c26c29e 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.impl;
 
 /**
index 7e1848d..3594ee0 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.impl;
 
 /**
@@ -23,6 +31,7 @@ public final class NetconfTestImplModule extends org.opendaylight.controller.con
 
     @Override
     public java.lang.AutoCloseable createInstance() {
-        return NetconfTestImplModuleUtil.registerRuntimeBeans(this);
+return NetconfTestImplModuleUtil.registerRuntimeBeans(this);
+
     }
 }
index 7cab528..accc1db 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.impl;
 
 /**
index 58943c9..4de9804 100644 (file)
@@ -1,10 +1,9 @@
-/**
- * @author Tomas Olvecky
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
  *
- * 11 2013
- *
- * Copyright (c) 2013 by Cisco Systems, 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 org.opendaylight.controller.config.yang.test.impl;
 
index 52a7162..9ba1db4 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.impl;
 
 /**
@@ -28,5 +36,6 @@ public final class TestImplModule extends org.opendaylight.controller.config.yan
             public void close() throws Exception {
             }
         };
+
     }
 }
index ce9aa92..a6ce734 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2013 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 org.opendaylight.controller.config.yang.test.impl;
 
 /**