Author: abelevich
Date: 2009-01-19 13:20:28 -0500 (Mon, 19 Jan 2009)
New Revision: 12340
Modified:
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/CreateScriptMojo.java
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/utils/PluginUtils.java
Log:
Modified:
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java
===================================================================
---
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java 2009-01-19
15:51:55 UTC (rev 12339)
+++
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java 2009-01-19
18:20:28 UTC (rev 12340)
@@ -1,7 +1,9 @@
package org.richfaces.cdk.rd.handler;
-import java.util.ArrayList;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.richfaces.cdk.rd.Component;
import org.richfaces.cdk.rd.Components;
@@ -14,31 +16,22 @@
*/
public class ComponentsHandler extends DefaultHandler{
- private List <Components> components;
+ private Map <String,Components> components;
- private String tempString;
+ private Set <String> scripts = new LinkedHashSet<String>();
- private List <String> scripts = new ArrayList<String>();
-
- private List <String> styles = new ArrayList<String>();
-
+ private Set <String> styles = new LinkedHashSet<String>();
+
+
@Override
- public void characters(char[] ch, int start, int length) throws SAXException {
- tempString = new String(ch, start, length);
- }
-
- @Override
public void endElement(String uri, String localName, String name) throws SAXException {
- if(components != null) {
- for (Components library: components) {
- if(library.getNamespace().equals(uri)) {
- List <Component> components = library.getComponents();
- for(Component component : components ){
- if(localName.equals(component.getComponentName())) {
- collectScripts(component);
- collectStyles(component);
- }
- }
+ if(components != null && components.containsKey(uri)) {
+ Components library = components.get(uri);
+ List <Component> components = library.getComponents();
+ for(Component component : components ){
+ if(localName.equals(component.getComponentName())) {
+ collectScripts(component);
+ collectStyles(component);
}
}
}
@@ -46,33 +39,29 @@
private void collectStyles(Component component) {
for(String style : component.getStyles()) {
- if(!this.styles.contains(style)) {
- this.styles.add(style);
- }
+ this.styles.add(style);
}
}
private void collectScripts(Component component) {
for(String script : component.getScripts()) {
- if(!this.scripts.contains(script)) {
- this.scripts.add(script);
- }
+ this.scripts.add(script);
}
}
- public List <String> getStyles() {
+ public Set <String> getStyles() {
return this.styles;
}
- public List <String> getScripts() {
+ public Set <String> getScripts() {
return this.scripts;
}
- public List<Components> getComponents() {
+ public Map <String, Components> getComponents() {
return components;
}
- public void setComponents(List<Components> components) {
+ public void setComponents(Map <String, Components> components) {
this.components = components;
}
}
Modified:
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/CreateScriptMojo.java
===================================================================
---
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/CreateScriptMojo.java 2009-01-19
15:51:55 UTC (rev 12339)
+++
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/CreateScriptMojo.java 2009-01-19
18:20:28 UTC (rev 12340)
@@ -22,14 +22,14 @@
package org.richfaces.cdk.rd.mojo;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.lang.reflect.Method;
-import java.util.ArrayList;
+import java.net.URL;
+import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.xml.parsers.SAXParser;
@@ -55,15 +55,10 @@
import org.codehaus.classworlds.ClassRealm;
import org.codehaus.classworlds.ClassWorld;
import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.IOUtil;
-import org.richfaces.cdk.rd.Component;
import org.richfaces.cdk.rd.Components;
-import org.richfaces.cdk.rd.JarResourceScanner;
import org.richfaces.cdk.rd.handler.ComponentsHandler;
import org.richfaces.cdk.rd.utils.PluginUtils;
-import com.sun.swing.internal.plaf.metal.resources.metal;
-
/**
* @author Anton Belevich
*
@@ -85,7 +80,6 @@
* @component
*/
protected MavenProjectBuilder builder;
-
/**
* Used to look up Artifacts in the remote repository.
@@ -126,6 +120,7 @@
*/
private File webSourceDirectory;
+
/**
* namespaces
* @parameter
@@ -134,11 +129,17 @@
private List namespaces;
/**
- * loadOrder
- * @parameter;
+ * beforeIncludes
+ * @parameter
*/
- private String loadOrder;
+ private List beforeIncludes;
+ /**
+ * afterIncludes
+ * @parameter
+ */
+ private List afterIncludes;
+
/**
*
* @component
@@ -150,27 +151,20 @@
public void execute() throws MojoExecutionException {
try {
- Artifact richfacesUI = createDependencyArtifact("richfaces-ui",
project.getVersion(), "jar");
- Artifact richfacesImpl = createDependencyArtifact("richfaces-impl",
project.getVersion(), "jar");
-
- List <FileObject> richfaces = new ArrayList<FileObject>();
- FileObject jarRichfacesUI = resolveArtifact(richfacesUI);
- richfaces.add(jarRichfacesUI);
- FileObject jarRichfacesImpl = resolveArtifact(richfacesImpl);
- richfaces.add(jarRichfacesImpl);
-
- FileObject [] configs = PluginUtils.resolveConfigsFromJar(jarRichfacesUI,
PluginUtils.DEFAULT_CONFIG_PATTERNS);
+ Set <Artifact> artifacts = resolveDependenciesArtifacts();
Digester defaultDigester = getDigester();
- List <Components> components = PluginUtils.processConfigs(configs,
defaultDigester);
+ Map <String, Components> components = new HashMap<String, Components>();
+ for (Artifact artifact : artifacts) {
+ FileObject jar = resolveArtifact(artifact);
+ FileObject [] configs = PluginUtils.resolveConfigsFromJar(jar,
PluginUtils.DEFAULT_CONFIG_PATTERNS);
+ components.putAll(PluginUtils.processConfigs(configs, defaultDigester));
+ }
+
ComponentsHandler handler = findComponents(webSourceDirectory, components,
PluginUtils.DEFAULT_PROCESS_INCLUDES, new String[0]);
- List result = handler.getScripts();
-
- mergeScripts(result, richfaces, outputScriptDirectory);
- for (Iterator iterator = result.iterator(); iterator.hasNext();) {
- getLog().info("collect: " + iterator.next());
- }
-
+ Set <String> result = handler.getScripts();
+ mergeScripts(result,outputScriptDirectory, beforeIncludes, afterIncludes);
+
} catch (Exception e) {
throw new MojoExecutionException(e.getMessage(),e);
}
@@ -181,7 +175,7 @@
return PluginUtils.createDefaultDigester();
}
- public ComponentsHandler findComponents (File webSourceDir, List <Components>
components, String [] includes, String [] excludes) {
+ public ComponentsHandler findComponents (File webSourceDir, Map <String,
Components> components, String [] includes, String [] excludes) {
DirectoryScanner scanner = new DirectoryScanner();
scanner.setBasedir(webSourceDir);
@@ -207,7 +201,7 @@
try {
saxParser.parse(file, handler);
} catch (Exception e) {
- getLog().error("Error process file: " + file.getAbsolutePath(), e);
+ getLog().error("Error process file: " + file.getAbsolutePath() +
"\n" + e.getMessage(), e);
}
}
}
@@ -218,32 +212,14 @@
return handler;
}
-
- protected Artifact createDependencyArtifact(String id, String version, String type)
throws Exception{
-
- List <Dependency> dependencies = project.getDependencies();
- Artifact artifact = null;
- for(Dependency dependency : dependencies) {
- if(dependency.getArtifactId().equals(id) &&
dependency.getVersion().equals(version) && dependency.getType().equals(type)) {
- String groupId = dependency.getGroupId();
- String artifactId = dependency.getArtifactId();
- String artifactVersion = dependency.getVersion();
- String scope = dependency.getScope();
- String artifactType = dependency.getType();
- artifact = factory.createArtifact(groupId, artifactId, artifactVersion, scope,
artifactType);
- break;
- }
- }
-
- return artifact;
- }
-
- protected Set <Artifact> createProjectDependenciesArtifacts() {
+ protected Set <Artifact> resolveDependenciesArtifacts() {
ArtifactResolutionResult result = null;
try {
List <Dependency> dependencies = project.getDependencies();
Set <Artifact> artifacts = MavenMetadataSource.createArtifacts(factory,
dependencies, null, null, project);
+ artifacts.add(project.getArtifact());
+
result = resolver.resolveTransitively(artifacts, project.getArtifact(),
Collections.EMPTY_LIST, localRepository, metadataSource);
} catch (Exception e) {
getLog().error(e);
@@ -253,32 +229,30 @@
protected FileObject resolveArtifact(Artifact artifact) {
- FileObject jarFileObject = null;
-
+ FileObject jarFileObjects = null;
if(artifact != null) {
try {
resolver.resolve(artifact, Collections.EMPTY_LIST, localRepository);
getLog().info("artifact " + artifact.getFile().getAbsolutePath() + "
is resolved");
} catch (ArtifactResolutionException e) {
- getLog().error("Error with resolve artifact " + artifact, e);
+ getLog().error("Error with resolve artifact " +
artifact.getFile().getAbsolutePath() + "\n" + e.getMessage(), e);
} catch (ArtifactNotFoundException e) {
- getLog().error("Not found artifact " + artifact, e);
+ getLog().error("Not found artifact " + artifact.getFile().getAbsolutePath()
+ "\n" + e.getMessage(), e);
}
File file = artifact.getFile();
try {
FileSystemManager manager = VFS.getManager();
- jarFileObject = manager.resolveFile("jar://" + file.getAbsolutePath());
+ jarFileObjects = manager.resolveFile("jar://" + file.getAbsolutePath());
} catch (FileSystemException e) {
- getLog().error("Error during processing file: " + file.getAbsolutePath(),
e);
- }
-
+ getLog().error("Error during processing file: " + file.getAbsolutePath()+
"\n" + e.getMessage(), e);
+ }
}
- return jarFileObject;
+ return jarFileObjects;
}
- protected void mergeScripts(List <String> scripts, List <FileObject>
jarFileObjects, File outputScriptDirectory) {
+ protected void mergeScripts(Set <String> scripts, File outputScriptDirectory, List
<String> beforeIncludes, List <String> afterIncludes) {
File assemblyScriptFile = new File(outputScriptDirectory, scriptPackName +
".js");
@@ -290,52 +264,85 @@
assemblyScriptFile.createNewFile();
} catch (IOException e) {
- getLog().error("Error create file: " + assemblyScriptFile.getAbsolutePath(),
e);
+ getLog().error("Error create file: " + assemblyScriptFile.getAbsolutePath()
+ "\n" + e.getMessage(), e);
}
+
+ try {
+
+ Set <Artifact> artifacts = resolveDependenciesArtifacts();
+
+ //save current ContextClassloader
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+
+ //create a new classloading space
+ ClassWorld world = new ClassWorld();
+
+ //use the existing ContextClassLoader in a realm of the classloading space
+ ClassRealm realm = world.newRealm("org.richfaces.cdk",
Thread.currentThread().getContextClassLoader());
+
+ //create another realm for the app jars
+ ClassRealm childRealm = realm.createChildRealm("jar");
+ for(Artifact jar : artifacts ) {
+ childRealm.addConstituent(jar.getFile().toURL());
+ }
+
+ // add project classes, scripts etc ...
+ List compileClasspathElements = project.getCompileClasspathElements();
+ for (Object path: compileClasspathElements) {
+ childRealm.addConstituent(new File((String)path).toURI().toURL());
+ }
+ //make the child realm the ContextClassLoader
+ Thread.currentThread().setContextClassLoader(childRealm.getClassLoader());
+
+ if(beforeIncludes != null) {
+ merge(assemblyScriptFile, beforeIncludes);
+ }
+
+ merge(assemblyScriptFile, scripts);
+
+ if(afterIncludes != null) {
+ merge(assemblyScriptFile, afterIncludes);
+ }
+
+ //restore old ContextClassLoader
+ Thread.currentThread().setContextClassLoader(oldClassLoader);
- for(String script: scripts) {
- try {
- if(script.endsWith(".js")) {
- getLog().info("merge file: " + script + " in to " +
assemblyScriptFile.getAbsolutePath());
- PluginUtils.mergeFiles(assemblyScriptFile, jarFileObjects, script);
- } else {
-
- Set <Artifact> artifacts = createProjectDependenciesArtifacts();
+ } catch (Exception e) {
+ getLog().error(e);
+ }
- //save current ContextClassloader
- ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ }
- //create a new classloading space
- ClassWorld world = new ClassWorld();
-
- //use the existing ContextClassLoader in a realm of the classloading space
- ClassRealm realm = world.newRealm("org.richfaces.cdk",
Thread.currentThread().getContextClassLoader());
-
- //create another realm for the app jars
- ClassRealm jars = realm.createChildRealm("jar");
- for(Artifact jar : artifacts ) {
- jars.addConstituent(jar.getFile().toURL());
- }
-
- //make the child realm the ContextClassLoader
- Thread.currentThread().setContextClassLoader(jars.getClassLoader());
-
- //resolve framework script path
- Class clazz = Thread.currentThread().getContextClassLoader().loadClass(script);
- Object obj = clazz.newInstance();
- Method method = clazz.getMethod("getPath", new Class [0]);
- String path = (String) method.invoke(obj, new Object[0]);
-
- // restore old ContextClassLoader
- Thread.currentThread().setContextClassLoader(oldClassLoader);
-
- getLog().info("merge file: " + path + " in to " +
assemblyScriptFile.getAbsolutePath());
- PluginUtils.mergeFiles(assemblyScriptFile, jarFileObjects, path);
- }
- } catch (Exception e) {
- getLog().error(e);
+ public void merge(File assembly, Collection <String> resources) {
+ for(String script: resources) {
+ URL resource = getResourceURL(script);
+ if(resource != null) {
+ getLog().info("merge file: " + resource.getFile() + " in to " +
assembly.getAbsolutePath());
+ try {
+ PluginUtils.mergeFiles(assembly, resource);
+ } catch (Exception e) {
+ getLog().error("Error during merge: " + resource.getFile() +
"\n" + e.getMessage(), e);
+ }
}
}
- }
+ }
+
+ protected URL getResourceURL(String resourceName) {
+ URL resource =
Thread.currentThread().getContextClassLoader().getResource(resourceName);
+ try {
+ if(resource == null) {
+ //resolve framework script path
+ Class clazz =
Thread.currentThread().getContextClassLoader().loadClass(resourceName);
+ Object obj = clazz.newInstance();
+ Method method = clazz.getMethod("getPath", new Class [0]);
+ String path = (String) method.invoke(obj, new Object[0]);
+ resource = Thread.currentThread().getContextClassLoader().getResource(path);
+ }
+ } catch (Exception e) {
+ getLog().error("Error process: " + resourceName + "\n" +
e.getMessage(), e);
+ }
+
+ return resource;
+ }
}
Modified:
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/utils/PluginUtils.java
===================================================================
---
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/utils/PluginUtils.java 2009-01-19
15:51:55 UTC (rev 12339)
+++
trunk/sandbox/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/utils/PluginUtils.java 2009-01-19
18:20:28 UTC (rev 12340)
@@ -3,8 +3,9 @@
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.commons.digester.Digester;
import org.apache.commons.vfs.FileObject;
@@ -21,30 +22,21 @@
- public static void mergeFiles(File dest, List <FileObject> jarFileObjects, String
scriptPath) throws Exception{
-
- for(FileObject sourceFileObjects : jarFileObjects){
-
- FileOutputStream out = new FileOutputStream(dest, true);
+ public static void mergeFiles(File dest, URL resource) throws Exception{
+ FileOutputStream out = new FileOutputStream(dest, true);
+ try {
+ InputStream in = resource.openStream();
try {
- FileObject scriptFileObject = sourceFileObjects.resolveFile(scriptPath);
- if(scriptFileObject.exists()) {
- InputStream in = scriptFileObject.getContent().getInputStream();
- try {
- IOUtil.copy(in, out);
- if (true) {
- out.write('\n');
- }
- } finally {
- IOUtil.close(in);
- in = null;
- }
- }
+ IOUtil.copy(in, out);
+ out.write('\n');
} finally {
- IOUtil.close(out);
- out = null;
+ IOUtil.close(in);
+ in = null;
}
- }
+ } finally {
+ IOUtil.close(out);
+ out = null;
+ }
}
public static FileObject [] resolveConfigsFromJar(FileObject jarFileObject, String []
patterns) throws Exception {
@@ -58,15 +50,15 @@
return result;
}
- public static List <Components> processConfigs(FileObject [] configs, Digester
digester) throws Exception{
+ public static Map <String,Components> processConfigs(FileObject [] configs,
Digester digester) throws Exception{
- List collector = new ArrayList<Components>();
+ Map <String, Components>collector = new HashMap <String, Components>();
for (FileObject config: configs) {
InputStream configInputStream = null;
try {
configInputStream = config.getContent().getInputStream();
- collector.add(digester.parse(configInputStream));
-
+ Components components = (Components)digester.parse(configInputStream);
+ collector.put(components.getNamespace(), components);
} finally {
if(configInputStream != null) {
configInputStream.close();