From 1b57686445182e186e402a7c51d93d1124c1ea66 Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Fri, 21 Aug 2009 15:04:07 +0000 Subject: [PATCH] o Restored some more backward-compat git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@806585 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 1 + maven-compat/pom.xml | 1 + .../ExpressionDocumentationException.java | 37 ++++ .../plugin/ExpressionDocumenter.java | 173 ++++++++++++++++++ maven-compat/src/main/mdo/paramdoc.mdo | 154 ++++++++++++++++ .../plugin-expressions/project.paramdoc.xml | 0 .../plugin-expressions/rootless.paramdoc.xml | 0 .../plugin-expressions/settings.paramdoc.xml | 0 .../main/resources/META-INF/maven/plugin.xml | 0 9 files changed, 366 insertions(+) create mode 100644 maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java create mode 100644 maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java create mode 100644 maven-compat/src/main/mdo/paramdoc.mdo rename {maven-core => maven-compat}/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml (100%) rename {maven-core => maven-compat}/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml (100%) rename {maven-core => maven-compat}/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml (100%) rename {maven-core => maven-compat}/src/main/resources/META-INF/maven/plugin.xml (100%) diff --git a/build.xml b/build.xml index a41aa22866..398b867a24 100644 --- a/build.xml +++ b/build.xml @@ -185,6 +185,7 @@ END SNIPPET: ant-bootstrap --> + diff --git a/maven-compat/pom.xml b/maven-compat/pom.xml index 01c843a9d8..7c3ba07bb8 100644 --- a/maven-compat/pom.xml +++ b/maven-compat/pom.xml @@ -78,6 +78,7 @@ src/main/mdo/metadata.mdo src/main/mdo/profiles.mdo + src/main/mdo/paramdoc.mdo diff --git a/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java b/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java new file mode 100644 index 0000000000..050d135cae --- /dev/null +++ b/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java @@ -0,0 +1,37 @@ +package org.apache.maven.usability.plugin; + +/* + * 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. + */ + +public class ExpressionDocumentationException + extends Exception +{ + static final long serialVersionUID = 1; + + public ExpressionDocumentationException( String message, Throwable cause ) + { + super( message, cause ); + } + + public ExpressionDocumentationException( String message ) + { + super( message ); + } + +} diff --git a/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java b/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java new file mode 100644 index 0000000000..b6c992286b --- /dev/null +++ b/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java @@ -0,0 +1,173 @@ +package org.apache.maven.usability.plugin; + +/* + * 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. + */ + +import org.apache.maven.usability.plugin.io.xpp3.ParamdocXpp3Reader; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.ReaderFactory; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class ExpressionDocumenter +{ + + private static final String[] EXPRESSION_ROOTS = { "project", "settings", "session", "plugin", "rootless" }; + + private static final String EXPRESSION_DOCO_ROOTPATH = "META-INF/maven/plugin-expressions/"; + + private static Map expressionDocumentation; + + public static Map load() + throws ExpressionDocumentationException + { + if ( expressionDocumentation == null ) + { + expressionDocumentation = new HashMap(); + + ClassLoader docLoader = initializeDocLoader(); + + for ( int i = 0; i < EXPRESSION_ROOTS.length; i++ ) + { + InputStream docStream = null; + try + { + docStream = docLoader + .getResourceAsStream( EXPRESSION_DOCO_ROOTPATH + EXPRESSION_ROOTS[i] + ".paramdoc.xml" ); + + if ( docStream != null ) + { + Map doco = parseExpressionDocumentation( docStream ); + + expressionDocumentation.putAll( doco ); + } + } + catch ( IOException e ) + { + throw new ExpressionDocumentationException( "Failed to read documentation for expression root: " + EXPRESSION_ROOTS[i], e ); + } + catch ( XmlPullParserException e ) + { + throw new ExpressionDocumentationException( "Failed to parse documentation for expression root: " + EXPRESSION_ROOTS[i], e ); + } + finally + { + IOUtil.close( docStream ); + } + } + } + + return expressionDocumentation; + } + + /** + * + * + * project.distributionManagementArtifactRepository + * + * + * some-repo + * scp://host/path + * + * + * some-snap-repo + * scp://host/snapshot-path + * + * + * ]]> + * + * + * + * @throws IOException + * @throws XmlPullParserException + */ + private static Map parseExpressionDocumentation( InputStream docStream ) + throws IOException, XmlPullParserException + { + Reader reader = new BufferedReader( ReaderFactory.newXmlReader( docStream ) ); + + ParamdocXpp3Reader paramdocReader = new ParamdocXpp3Reader(); + + ExpressionDocumentation documentation = paramdocReader.read( reader, true ); + + List expressions = documentation.getExpressions(); + + Map bySyntax = new HashMap(); + + if ( expressions != null && !expressions.isEmpty() ) + { + for ( Iterator it = expressions.iterator(); it.hasNext(); ) + { + Expression expr = (Expression) it.next(); + + bySyntax.put( expr.getSyntax(), expr ); + } + } + + return bySyntax; + } + + private static ClassLoader initializeDocLoader() + throws ExpressionDocumentationException + { + String myResourcePath = ExpressionDocumenter.class.getName().replace( '.', '/' ) + ".class"; + + URL myResource = ExpressionDocumenter.class.getClassLoader().getResource( myResourcePath ); + + String myClasspathEntry = myResource.getPath(); + + myClasspathEntry = myClasspathEntry.substring( 0, myClasspathEntry.length() - ( myResourcePath.length() + 2 ) ); + + if ( myClasspathEntry.startsWith( "file:" ) ) + { + myClasspathEntry = myClasspathEntry.substring( "file:".length() ); + } + + URL docResource; + try + { + docResource = new File( myClasspathEntry ).toURL(); + } + catch ( MalformedURLException e ) + { + throw new ExpressionDocumentationException( + "Cannot construct expression documentation classpath resource base.", + e ); + } + + return new URLClassLoader( new URL[] { docResource } ); + } + +} diff --git a/maven-compat/src/main/mdo/paramdoc.mdo b/maven-compat/src/main/mdo/paramdoc.mdo new file mode 100644 index 0000000000..ab253316db --- /dev/null +++ b/maven-compat/src/main/mdo/paramdoc.mdo @@ -0,0 +1,154 @@ + + + + + + paramdoc + Paramdoc + + + + package + org.apache.maven.usability.plugin + + + + + 1.0.0 + ExpressionDocumentation + The root of a parameter plugin expression document. + + + 1.0.0 + expressions + The list of plugin parameter expressions described by this + document. + + Expression + * + + + + + + 1.0.0 + + + + + + 1.0.0 + Expression + A plugin parameter expression supported by Maven + + + 1.0.0 + syntax + The syntax of the expression + String + true + + + 1.0.0 + description + The description of what this expression references, and what it's generally used for. + String + true + + + 1.0.0 + configuration + The place and syntax used to change the value of this expression. + String + + + 1.0.0 + cliOptions + The command-line switches used to change the value of this expression. + Properties + + String + * + + + + 1.0.0 + apiMethods + The programmatic methods used to change the value of this expression. + Properties + + String + * + + + + 1.0.0 + deprecation + A preferred alternative to this expression, in the case where it's deprecated. + String + + + 1.0.0 + ban + A preferred alternative to this expression, in the case where it's banned from use. + String + + + 1.0.0 + editable + Whether the value of this expression can be changed. + boolean + true + + + + + diff --git a/maven-core/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml b/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml similarity index 100% rename from maven-core/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml rename to maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml diff --git a/maven-core/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml b/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml similarity index 100% rename from maven-core/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml rename to maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml diff --git a/maven-core/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml b/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml similarity index 100% rename from maven-core/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml rename to maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml diff --git a/maven-core/src/main/resources/META-INF/maven/plugin.xml b/maven-compat/src/main/resources/META-INF/maven/plugin.xml similarity index 100% rename from maven-core/src/main/resources/META-INF/maven/plugin.xml rename to maven-compat/src/main/resources/META-INF/maven/plugin.xml