servicemix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ge...@apache.org
Subject svn commit: r657765 - in /servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd: ./ SpringSchemasMojo.java
Date Mon, 19 May 2008 09:08:41 GMT
Author: gertv
Date: Mon May 19 02:08:41 2008
New Revision: 657765

URL: http://svn.apache.org/viewvc?rev=657765&view=rev
Log:
SM-992: Fix XSD location for use with plain Spring

Added:
    servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd/
    servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd/SpringSchemasMojo.java

Added: servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd/SpringSchemasMojo.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd/SpringSchemasMojo.java?rev=657765&view=auto
==============================================================================
--- servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd/SpringSchemasMojo.java
(added)
+++ servicemix/smx3/trunk/build/src/main/java/org/apache/servicemix/maven/plugin/xsd/SpringSchemasMojo.java
Mon May 19 02:08:41 2008
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.maven.plugin.xsd;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Mojo to add schema location mapping for earlier versions to the spring.schemas file
+ * 
+ * @goal spring.schemas
+ * @phase process-resources
+ */
+public class SpringSchemasMojo extends AbstractMojo {
+
+    /**
+     * Maven project property containing previous releases
+     */
+    private static final String PREVIOUS_RELEASES = "previous.releases";
+
+    /**
+     * Previously released versions of ServiceMix
+     */
+    private String[] previous = {};
+
+    /**
+     * Location URIs
+     */
+    @SuppressWarnings("serial")
+    private List<String> locations = new ArrayList<String>() {
+        @Override
+        public boolean add(String element) {
+            getLog().info("Adding location " + element);
+            return super.add(element);
+        }
+    };
+
+    /**
+     * Name of the XSD file
+     */
+    private String schema;
+
+    /**
+     * A reference to the Maven project
+     * 
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+
+    /**
+     * {@inheritDoc}
+     */
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if (!getSpringSchemas().exists()) {
+            getLog().info("Skipping - spring.schemas file does not exist in " + project.getArtifactId());
+            return;
+        }
+        readOriginalSpringSchemas();
+        getLog().info("Adding spring.schemas entries for earlier versions");
+        if (project.getProperties().containsKey(PREVIOUS_RELEASES)) {
+            previous = ((String) project.getProperties().get(PREVIOUS_RELEASES)).split(",");
+        } else {
+            getLog().warn("No previous version information found");
+            for (Object key : project.getProperties().keySet()) {
+                getLog().info("'" + key.toString() + "'" + " = " + project.getProperties().get(key));
+            }
+        }
+        for (String version : previous) {
+            addVersion(version);
+        }
+        getLog().info("Adding spring.schemas entry for this version");
+        addVersion(project.getVersion());
+        writeNewSpringSchemas();
+    }
+
+    /**
+     * Write the new spring.schemas file
+     * 
+     * @throws MojoExecutionException
+     */
+    private void writeNewSpringSchemas() throws MojoExecutionException {
+        getLog().info("Writing new spring.schemas file");
+        PrintWriter writer = null;
+        try {
+            writer = new PrintWriter(new BufferedWriter(new FileWriter(getSpringSchemas())));
+            for (String location : locations) {
+                writer.println(location + "=" + schema);
+            }
+            writer.flush();
+        } catch (IOException e) {
+            throw new MojoExecutionException("Unable to read spring.schemas file", e);
+        } finally {
+            if (writer != null) {
+                writer.close();
+            }
+        }
+    }
+
+    /**
+     * Read the original spring.schemas file
+     * 
+     * @throws MojoExecutionException
+     */
+    private void readOriginalSpringSchemas() throws MojoExecutionException {
+        getLog().info("Reading information from spring.schemas");
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new FileReader(getSpringSchemas()));
+            String line = reader.readLine();
+            while (line != null) {
+                //skip any lines that don't contain a mapping
+                if (line.contains("=")) {
+                    String[] info = line.split("=");
+                    if (schema == null) {
+                        getLog().info("Schema name is " + info[1]);
+                        schema = info[1];
+                    }
+                    locations.add(info[0]);
+                }
+                line = reader.readLine();
+            }
+        } catch (FileNotFoundException e) {
+            throw new MojoExecutionException("Unable to read spring.schemas file", e);
+        } catch (IOException e) {
+            throw new MojoExecutionException("Unable to read spring.schemas file", e);
+        } finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    throw new MojoExecutionException("Unable to close file reader", e);
+                }
+            }
+        }
+    }
+
+    /**
+     * @return the spring.schemas file generated by xbean
+     */
+    private File getSpringSchemas() {
+        return new File(project.getBasedir().toString() + File.separatorChar + "target" +
File.separatorChar + "classes" + File.separatorChar + "META-INF", "spring.schemas");
+    }
+
+    /**
+     * Add a version of the XSD to the spring.schemas file
+     * 
+     * @param version the version to be added
+     */
+    private void addVersion(String version) {
+        locations.add("http\\://servicemix.apache.org/schema/" + project.getArtifactId()
+ "-" + version + ".xsd");
+    }
+
+}



Mime
View raw message