You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/12/03 13:22:20 UTC
[4/4] git commit: ISIS-284: maven plugin
ISIS-284: maven plugin
* first cut attempt, which performs validation of an Isis metamodel
* delegating to helpers
* better error handling
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/4fc1336a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/4fc1336a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/4fc1336a
Branch: refs/heads/master
Commit: 4fc1336a0f616583605a4cd28a9ceb8bfb129f59
Parents: 73178db
Author: Dan Haywood <da...@apache.org>
Authored: Sun Dec 2 16:42:20 2012 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Sun Dec 2 16:42:20 2012 +0000
----------------------------------------------------------------------
.../specloader/ObjectReflectorDefault.java | 16 +-
.../specloader/validator/ValidationFailures.java | 28 ++-
.../isis/core/progmodel/app/IsisMetaModel.java | 9 +-
framework/isis-maven-plugin/pom.xml | 168 +++++++++++
.../isis/tools/mavenplugin/ValidateMojo.java | 221 +++++++++++++++
.../isis/tools/mavenplugin/util/ClassRealms.java | 26 ++
.../isis/tools/mavenplugin/util/ClassWorlds.java | 32 ++
.../tools/mavenplugin/util/IsisMetaModels.java | 30 ++
.../apache/isis/tools/mavenplugin/util/Log4j.java | 35 +++
.../isis/tools/mavenplugin/util/MavenProjects.java | 25 ++
.../isis/tools/mavenplugin/util/Xpp3Doms.java | 18 ++
.../dflt/ProgrammingModelFacetsJava5.java | 2 +-
framework/tck/tck-dom/pom.xml | 9 +
13 files changed, 608 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 811bfbb..aced5bf 100644
--- a/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -231,6 +231,17 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
*/
@Override
public void init() {
+ ValidationFailures validationFailures = initAndValidate();
+
+ validationFailures.assertNone();
+
+ cacheBySpecId();
+ }
+
+ /**
+ * For benefit of <tt>IsisMetaModel</tt>.
+ */
+ public ValidationFailures initAndValidate() {
if (LOG.isDebugEnabled()) {
LOG.debug("initialising " + this);
}
@@ -261,10 +272,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
ValidationFailures validationFailures = new ValidationFailures();
metaModelValidator.validate(validationFailures);
-
- validationFailures.assertNone();
-
- cacheBySpecId();
+ return validationFailures;
}
private void cacheBySpecId() {
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/ValidationFailures.java
----------------------------------------------------------------------
diff --git a/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/ValidationFailures.java b/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/ValidationFailures.java
index eb8e3af..4e556d1 100644
--- a/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/ValidationFailures.java
+++ b/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/ValidationFailures.java
@@ -19,11 +19,13 @@
package org.apache.isis.core.metamodel.specloader.validator;
import java.text.MessageFormat;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import com.google.common.collect.Lists;
-public final class ValidationFailures {
+public final class ValidationFailures implements Iterable<String> {
private final List<String> messages = Lists.newArrayList();
@@ -33,17 +35,33 @@ public final class ValidationFailures {
}
public void assertNone() {
- if (messages.isEmpty()) {
+ if (!occurred()) {
return;
}
-
+ throw new MetaModelInvalidException(getMessages());
+ }
+
+ public boolean occurred() {
+ return !messages.isEmpty();
+ }
+
+ private String getMessages() {
final StringBuilder buf = new StringBuilder();
int i=0;
for (String message : messages) {
buf.append(++i).append(": ").append(message).append("\n");
}
-
- throw new MetaModelInvalidException(buf.toString());
+ String messages = buf.toString();
+ return messages;
+ }
+
+ public int getNumberOfMessages() {
+ return messages.size();
+ }
+
+ @Override
+ public Iterator<String> iterator() {
+ return Collections.unmodifiableList(messages).iterator();
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/app/IsisMetaModel.java
----------------------------------------------------------------------
diff --git a/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/app/IsisMetaModel.java b/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/app/IsisMetaModel.java
index b53597d..7b204bf 100644
--- a/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/app/IsisMetaModel.java
+++ b/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/app/IsisMetaModel.java
@@ -53,6 +53,7 @@ import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.Collecti
import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
import org.apache.isis.core.progmodel.layout.dflt.MemberLayoutArrangerDefault;
import org.apache.isis.core.progmodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
@@ -87,6 +88,8 @@ public class IsisMetaModel implements ApplicationScopedComponent {
private DomainObjectContainer container;
+ private ValidationFailures validationFailures;
+
public static class Builder {
private final RuntimeContext runtimeContext;
@@ -173,7 +176,7 @@ public class IsisMetaModel implements ApplicationScopedComponent {
runtimeContext.injectInto(reflector);
reflector.injectInto(runtimeContext);
- reflector.init();
+ validationFailures = reflector.initAndValidate();
runtimeContext.init();
for (final Object service : services) {
@@ -182,6 +185,10 @@ public class IsisMetaModel implements ApplicationScopedComponent {
}
state = State.INITIALIZED;
}
+
+ public ValidationFailures getValidationFailures() {
+ return validationFailures;
+ }
@Override
public void shutdown() {
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/pom.xml
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/pom.xml b/framework/isis-maven-plugin/pom.xml
new file mode 100644
index 0000000..ca87abf
--- /dev/null
+++ b/framework/isis-maven-plugin/pom.xml
@@ -0,0 +1,168 @@
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-parent</artifactId>
+ <version>22</version>
+ </parent>
+
+ <groupId>org.apache.isis.tools</groupId>
+ <artifactId>isis-maven-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>0.3.1-incubating-SNAPSHOT</version>
+
+ <name>isis-maven-plugin Maven Mojo</name>
+ <url>http://maven.apache.org</url>
+
+ <prerequisites>
+ <maven>2.0.9</maven>
+ </prerequisites>
+
+ <properties>
+ <mavenVersion>2.0.9</mavenVersion>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.2</version>
+ <configuration>
+ <goalPrefix>configurator</goalPrefix>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default-descriptor</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ <phase>process-classes</phase>
+ </execution>
+ <execution>
+ <id>help-descriptor</id>
+ <goals>
+ <goal>helpmojo</goal>
+ </goals>
+ <phase>process-classes</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <!--
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-toolchains-plugin</artifactId>
+ <version>1.0</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>toolchain</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <toolchains>
+ <jdk>
+ <version>1.5</version>
+ </jdk>
+ </toolchains>
+ </configuration>
+ </plugin>
+ -->
+ </plugins>
+ </build>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.isis.core</groupId>
+ <artifactId>runtime</artifactId>
+ <version>0.3.1-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.isis.progmodels</groupId>
+ <artifactId>dflt</artifactId>
+ <version>0.3.1-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.0</version>
+ </dependency>
+
+<!--
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-api</artifactId>
+ <version>1.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-util</artifactId>
+ <version>1.8</version>
+ </dependency>
+ -->
+
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-toolchain</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+
+
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <profiles>
+ <profile>
+ <id>m2e</id>
+ <activation>
+ <property>
+ <name>m2e.version</name>
+ </property>
+ </activation>
+ <build>
+ <directory>target-ide</directory>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/ValidateMojo.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/ValidateMojo.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/ValidateMojo.java
new file mode 100644
index 0000000..d9685df
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/ValidateMojo.java
@@ -0,0 +1,221 @@
+package org.apache.isis.tools.mavenplugin;
+
+/*
+ * 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 java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
+import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
+import org.apache.isis.core.progmodel.app.IsisMetaModel;
+import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
+import org.apache.isis.tools.mavenplugin.util.ClassRealms;
+import org.apache.isis.tools.mavenplugin.util.ClassWorlds;
+import org.apache.isis.tools.mavenplugin.util.IsisMetaModels;
+import org.apache.isis.tools.mavenplugin.util.Log4j;
+import org.apache.isis.tools.mavenplugin.util.MavenProjects;
+import org.apache.isis.tools.mavenplugin.util.Xpp3Doms;
+import org.apache.log4j.BasicConfigurator;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.classworlds.ClassRealm;
+import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.classworlds.DuplicateRealmException;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import com.google.common.collect.Lists;
+
+/**
+ *
+ *
+ *
+ */
+@Mojo(name = "validate", defaultPhase = LifecyclePhase.TEST, requiresProject = true, requiresDependencyResolution = ResolutionScope.COMPILE, requiresDependencyCollection = ResolutionScope.COMPILE)
+public class ValidateMojo extends AbstractMojo {
+
+ private static final String CURRENT_PLUGIN_KEY = "org.apache.isis.tools:isis-maven-plugin";
+ private static final String ISIS_REALM = "isis";
+
+ @Component
+ protected MavenProject mavenProject;
+
+ public void execute() throws MojoExecutionException, MojoFailureException {
+
+ Log4j.configureIfRequired();
+
+ ValidationFailures validationFailures = bootIsisThenShutdown();
+
+ if (validationFailures.occurred()) {
+ throwFailureException(validationFailures.getNumberOfMessages() + " problems found.", validationFailures.getMessages());
+ }
+ }
+
+ private ValidationFailures bootIsisThenShutdown() throws MojoExecutionException, MojoFailureException {
+ ClassWorld classWorld = null;
+ IsisMetaModel isisMetaModel = null;
+ try {
+ classWorld = new ClassWorld();
+ final ClassRealm isisRealm = classWorld.newRealm(ISIS_REALM);
+
+ addClassesToRealm(isisRealm);
+
+ List<Object> serviceList = createServicesFromConfiguration(isisRealm);
+
+ isisMetaModel = bootstrapIsis(isisRealm, serviceList);
+ return isisMetaModel.getValidationFailures();
+
+ } catch (DuplicateRealmException e) {
+ throwExecutionException("Error building classworld", e);
+ return null; // never reached, since exception thrown above
+ } finally {
+ ClassWorlds.disposeSafely(classWorld, ISIS_REALM);
+ IsisMetaModels.disposeSafely(isisMetaModel);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void addClassesToRealm(final ClassRealm isisRealm) throws MojoExecutionException {
+
+ // first add all dependencies (including transitive)...
+ Set<Artifact> artifacts = mavenProject.getArtifacts();
+ for (Artifact artifact : artifacts) {
+ File file = artifact.getFile();
+ try {
+ ClassRealms.addFileToRealm(isisRealm, file, getLog());
+ } catch (MalformedURLException e) {
+ throwExecutionException("Error adding classes for artifact '" + artifact + "' to class realm", e);
+ } catch (IOException e) {
+ throwExecutionException("Error adding classes for artifact '" + artifact + "' to class realm", e);
+ }
+ }
+
+ // ... then all classpath elements
+ // (there is substantial overlap with getArtifacts() here, but neither
+ // appears to
+ // provide the comprehensive set of class path elements).
+ List<String> classpathElements;
+ try {
+ classpathElements = mavenProject.getRuntimeClasspathElements();
+ } catch (DependencyResolutionRequiredException e) {
+ throwExecutionException("Error obtaining runtime classpath", e);
+ return;
+ }
+ for (String classpathElement : classpathElements) {
+ final File file = new File(classpathElement);
+ try {
+ ClassRealms.addFileToRealm(isisRealm, file, getLog());
+ } catch (MalformedURLException e) {
+ throwExecutionException("Error adding classes for classpath element '" + classpathElement + "' to class realm", e);
+ } catch (IOException e) {
+ throwExecutionException("Error adding classes for classpath element '" + classpathElement + "' to class realm", e);
+ }
+ }
+ }
+
+ private List<Object> createServicesFromConfiguration(final ClassRealm isisRealm) throws MojoFailureException {
+ final List<String> serviceEls = getServiceClassNamesFromConfiguration();
+ return createServiceInstances(isisRealm, serviceEls);
+ }
+
+ private List<String> getServiceClassNamesFromConfiguration() throws MojoFailureException {
+ final Xpp3Dom configuration = (Xpp3Dom) MavenProjects.lookupPlugin(mavenProject, CURRENT_PLUGIN_KEY).getConfiguration();
+ if (configuration == null) {
+ throwFailureException("Configuration error", "No <configuration> element found");
+ }
+ final Xpp3Dom servicesEl = configuration.getChild("services");
+ if (servicesEl == null) {
+ throwFailureException("Configuration error", "No <configuration>/<services> element found");
+ }
+ final Xpp3Dom[] serviceEls = servicesEl.getChildren("service");
+ if (serviceEls == null || serviceEls.length == 0) {
+ throwFailureException("Configuration error", "No <configuration>/<services>/<service> elements found");
+ }
+ return Lists.transform(Arrays.asList(serviceEls), Xpp3Doms.GET_VALUE);
+ }
+
+ private List<Object> createServiceInstances(final ClassRealm isisRealm, final List<String> serviceClassNames) throws MojoFailureException {
+ final List<Object> serviceList = Lists.newArrayList();
+ final List<String> logMessages = Lists.newArrayList();
+ for (String serviceClassName : serviceClassNames) {
+ try {
+ serviceList.add(isisRealm.loadClass(serviceClassName).newInstance());
+ } catch (ClassNotFoundException e) {
+ logMessages.add("Error loading class '" + serviceClassName + "' from classrealm");
+ } catch (InstantiationException e) {
+ logMessages.add("Error instantiating loaded class '" + serviceClassName + "'");
+ } catch (IllegalAccessException e) {
+ logMessages.add("Error instantiating loaded class '" + serviceClassName + "'");
+ }
+ }
+ if (!logMessages.isEmpty()) {
+ throwFailureException("Unable to load configured services", logMessages);
+ }
+ return serviceList;
+ }
+
+ private static IsisMetaModel bootstrapIsis(final ClassRealm isisRealm, List<Object> serviceList) {
+ Thread.currentThread().setContextClassLoader(isisRealm.getClassLoader());
+
+ IsisMetaModel isisMetaModel = IsisMetaModel.builder(new RuntimeContextNoRuntime(), new ProgrammingModelFacetsJava5()).withServices(serviceList).build();
+ isisMetaModel.init();
+
+ return isisMetaModel;
+ }
+
+ private void throwFailureException(String errorMessage, List<String> logMessages) throws MojoFailureException {
+ logErrors(logMessages);
+ throw new MojoFailureException(errorMessage);
+ }
+
+ private void throwFailureException(String errorMessage, String... logMessages) throws MojoFailureException {
+ logErrors(logMessages);
+ throw new MojoFailureException(errorMessage);
+ }
+
+ private void throwExecutionException(String errorMessage, Exception e) throws MojoExecutionException {
+ logErrors(errorMessage);
+ throw new MojoExecutionException(errorMessage, e);
+ }
+
+ private void logErrors(String... logMessages) {
+ getLog().error("");
+ for (String logMessage : logMessages) {
+ getLog().error(logMessage);
+ }
+ getLog().error("");
+ }
+
+ private void logErrors(List<String> logMessages) {
+ logErrors(logMessages.toArray(new String[] {}));
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassRealms.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassRealms.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassRealms.java
new file mode 100644
index 0000000..87d6089
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassRealms.java
@@ -0,0 +1,26 @@
+package org.apache.isis.tools.mavenplugin.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.classworlds.ClassRealm;
+
+public final class ClassRealms {
+
+ private ClassRealms(){}
+
+ public static void addFileToRealm(ClassRealm isisRealm, final File file, Log log) throws IOException, MalformedURLException {
+ log.info(file.getCanonicalPath());
+
+ final URL url = file.toURI().toURL();
+ isisRealm.addConstituent(url);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassWorlds.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassWorlds.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassWorlds.java
new file mode 100644
index 0000000..6c79e55
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/ClassWorlds.java
@@ -0,0 +1,32 @@
+package org.apache.isis.tools.mavenplugin.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.classworlds.ClassRealm;
+import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.classworlds.NoSuchRealmException;
+
+public final class ClassWorlds {
+
+ private ClassWorlds(){}
+
+ public static void disposeSafely(ClassWorld classWorld, String realmId) {
+ if (classWorld == null) {
+ return;
+ }
+ try {
+ classWorld.disposeRealm(realmId);
+ } catch (NoSuchRealmException e) {
+ // ignore
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/IsisMetaModels.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/IsisMetaModels.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/IsisMetaModels.java
new file mode 100644
index 0000000..9a8aaaa
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/IsisMetaModels.java
@@ -0,0 +1,30 @@
+package org.apache.isis.tools.mavenplugin.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.List;
+
+import org.apache.isis.core.progmodel.app.IsisMetaModel;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.classworlds.ClassRealm;
+import org.codehaus.classworlds.ClassWorld;
+import org.codehaus.classworlds.NoSuchRealmException;
+
+public final class IsisMetaModels {
+
+ private IsisMetaModels(){}
+
+ public static void disposeSafely(IsisMetaModel isisMetaModel) {
+ if (isisMetaModel == null) {
+ return;
+ }
+ isisMetaModel.shutdown();
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Log4j.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Log4j.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Log4j.java
new file mode 100644
index 0000000..010d279
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Log4j.java
@@ -0,0 +1,35 @@
+package org.apache.isis.tools.mavenplugin.util;
+
+import java.util.Enumeration;
+
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+
+public final class Log4j {
+
+ private Log4j(){}
+
+ public static void configureIfRequired() {
+ if(isConfigured()) return;
+ BasicConfigurator.configure();
+ LogManager.getRootLogger().setLevel(Level.INFO);
+ }
+
+ private static boolean isConfigured() {
+ Enumeration<?> appenders = LogManager.getRootLogger().getAllAppenders();
+ if (appenders.hasMoreElements()) {
+ return true;
+ }
+ Enumeration<?> loggers = LogManager.getCurrentLoggers();
+ while (loggers.hasMoreElements()) {
+ Logger c = (Logger) loggers.nextElement();
+ if (c.getAllAppenders().hasMoreElements())
+ return true;
+ }
+ return false;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/MavenProjects.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/MavenProjects.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/MavenProjects.java
new file mode 100644
index 0000000..2b08085
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/MavenProjects.java
@@ -0,0 +1,25 @@
+package org.apache.isis.tools.mavenplugin.util;
+
+import java.util.List;
+
+import org.apache.maven.model.Plugin;
+import org.apache.maven.project.MavenProject;
+
+public final class MavenProjects {
+
+ private MavenProjects(){}
+
+ public static Plugin lookupPlugin(MavenProject mavenProject, String key) {
+
+ @SuppressWarnings("unchecked")
+ List<Plugin> plugins = mavenProject.getBuildPlugins();
+
+ for (Plugin plugin : plugins) {
+ if (key.equalsIgnoreCase(plugin.getKey())) {
+ return plugin;
+ }
+ }
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Xpp3Doms.java
----------------------------------------------------------------------
diff --git a/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Xpp3Doms.java b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Xpp3Doms.java
new file mode 100644
index 0000000..5f94609
--- /dev/null
+++ b/framework/isis-maven-plugin/src/main/java/org/apache/isis/tools/mavenplugin/util/Xpp3Doms.java
@@ -0,0 +1,18 @@
+package org.apache.isis.tools.mavenplugin.util;
+
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import com.google.common.base.Function;
+
+public final class Xpp3Doms {
+
+ private Xpp3Doms(){}
+
+ public static Function<Xpp3Dom, String> GET_VALUE = new Function<Xpp3Dom, String>(){
+
+ public String apply(Xpp3Dom el) {
+ return el.getValue();
+ }};
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 3f9a4fd..fbff124 100644
--- a/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -194,7 +194,7 @@ import org.apache.isis.core.progmodel.facets.value.timestampsql.JavaSqlTimeStamp
public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract {
public ProgrammingModelFacetsJava5() {
-
+
// must be first, so any Facets created can be replaced by other
// FacetFactorys later.
addFactory(FallbackFacetFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/4fc1336a/framework/tck/tck-dom/pom.xml
----------------------------------------------------------------------
diff --git a/framework/tck/tck-dom/pom.xml b/framework/tck/tck-dom/pom.xml
index 7f7cca4..4b1b06a 100644
--- a/framework/tck/tck-dom/pom.xml
+++ b/framework/tck/tck-dom/pom.xml
@@ -49,6 +49,15 @@
</execution>
</executions>
</plugin>
+
+ <!--
+ <plugin>
+ <groupId>org.apache.isis.tools</groupId>
+ <artifactId>isis-maven-plugin</artifactId>
+ <version>0.3.1-SNAPSHOT</version>
+ </plugin>
+ -->
+
</plugins>
<pluginManagement>
<plugins>