Java tutorial
/** * License Agreement. * * Rich Faces - Natural Ajax for Java Server Faces (JSF) * * Copyright (C) 2007 Exadel, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.ajax4jsf.builder.mojo; import java.beans.PropertyDescriptor; import java.io.File; import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.PropertyUtils; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.model.Parent; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; /** * Compile all xml templates, matched given pattern to Java classes. Sources * will be created in {@link AbstractCDKMojo#outputJavaDirectory} * * @goal compile * @requiresDependencyResolution compile * @phase generate-sources * @author shura * */ public class CompileMojo extends AbstractCDKMojo implements Contextualizable { /** * Project executed by first compile lifecycle. * * @parameter expression="${executedProject}" * @readonly */ private MavenProject executedProject; /** * The reactor projects. * * @parameter expression="${project.parent}" * @readonly */ private MavenProject parentProject; /** * @parameter default-value=${project.groupId} */ private String defaultPackage; /** * A list of inclusion filters for the compiler. By default, include all * files in templates directory. * * @parameter */ private String[] includes; /** * A list of exclusion filters for the compiler. None by default. * * @parameter */ private String[] excludes; /** * The local repository. * * @parameter expression="${localRepository}" */ private ArtifactRepository localRepository; /** * To look up Archiver/UnArchiver implementations * * @component */ private ArchiverManager archiverManager; /** * Project builder * * @component */ private MavenProjectBuilder mavenProjectBuilder; private PlexusContainer container; /* * (non-Javadoc) * * @see org.apache.maven.plugin.Mojo#execute() */ public void execute() throws MojoExecutionException, MojoFailureException { // VelocityTemplates.init(); try { List components = container.lookupList("org.ajax4jsf.templatecompiler.elements.ElementsFactory"); for (Iterator iter = components.iterator(); iter.hasNext();) { Object element = iter.next(); System.out.println(element.getClass().getName()); } System.out.println("Components Map"); Map componentsMap = container.lookupMap("org.ajax4jsf.templatecompiler.elements.ElementsFactory"); for (Iterator iter = componentsMap.entrySet().iterator(); iter.hasNext();) { Map.Entry element = (Map.Entry) iter.next(); System.out.println(element.getKey() + ":" + element.getValue().getClass().getName()); } } catch (ComponentLookupException e) { throw new MojoExecutionException("Error lookup ElementFactory components"); } Parent parentModel = project.getModel().getParent(); if (null != parentModel) { String relativePath = parentModel.getRelativePath(); File parentPom = new File(project.getFile().getParentFile(), relativePath); if (parentPom.isDirectory()) { parentPom = new File(parentPom, "pom.xml"); } if (parentPom.exists()) { try { parentProject = mavenProjectBuilder.build(parentPom, localRepository, null); } catch (ProjectBuildingException e) { throw new MojoExecutionException("Error get parent project for a components library", e); } } else { throw new MojoFailureException("Parent project pom file " + parentPom.getAbsolutePath() + " is not found for a components library"); } } else { throw new MojoFailureException( "Components library project must have parent pom with components modules"); } getLog().info("Parent Project object :\n" + toLog(parentProject) + "\n"); getLog().info("Project object :\n" + toLog(project) + "\n"); getLog().info("Project object Model :\n" + toLog(project.getModel()) + "\n"); getLog().info("Project object Parent Model :\n" + toLog(project.getModel().getParent()) + "\n"); getLog().info("Executed Project object :\n" + toLog(executedProject) + "\n"); } /* * (non-Javadoc) * * @see org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable#contextualize(org.codehaus.plexus.context.Context) */ public void contextualize(Context context) throws ContextException { this.container = (PlexusContainer) context.get(PlexusConstants.PLEXUS_KEY); } private void logBean(Object bean) { StringBuffer content = new StringBuffer(); } /** * Convert any Java Object to JavaScript representation ( as possible ). * * @param obj * @return * @throws MojoExecutionException */ public String toLog(Object obj) throws MojoExecutionException { if (null == obj) { return "null"; } else if (obj.getClass().isArray()) { StringBuffer ret = new StringBuffer("["); boolean first = true; for (int i = 0; i < Array.getLength(obj); i++) { Object element = Array.get(obj, i); if (!first) { ret.append(','); } ret.append(toLog(element)); first = false; } return ret.append("]\n").toString(); } else if (obj instanceof Collection) { // Collections put as JavaScript array. Collection collection = (Collection) obj; StringBuffer ret = new StringBuffer("["); boolean first = true; for (Iterator iter = collection.iterator(); iter.hasNext();) { Object element = iter.next(); if (!first) { ret.append(','); } ret.append(toLog(element)); first = false; } return ret.append("]\n").toString(); } else if (obj instanceof Map) { // Maps put as JavaScript hash. Map map = (Map) obj; StringBuffer ret = new StringBuffer("{"); boolean first = true; for (Iterator iter = map.keySet().iterator(); iter.hasNext();) { Object key = (Object) iter.next(); if (!first) { ret.append(','); } ret.append(key); ret.append(":"); ret.append(toLog(map.get(key))); first = false; } return ret.append("}\n").toString(); } else if (obj instanceof Number || obj instanceof Boolean) { // numbers and boolean put as-is, without conversion return obj.toString(); } else if (obj instanceof String) { // all other put as encoded strings. StringBuffer ret = new StringBuffer(); addEncodedString(ret, obj); return ret.append("\n").toString(); } // All other objects threaded as Java Beans. try { StringBuffer ret = new StringBuffer("{"); PropertyDescriptor[] propertyDescriptors = PropertyUtils.getPropertyDescriptors(obj); boolean first = true; for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor propertyDescriptor = propertyDescriptors[i]; String key = propertyDescriptor.getName(); if ("class".equals(key) || propertyDescriptor.getReadMethod() == null) { continue; } if (!first) { ret.append(",\n\t"); } addEncodedString(ret, key); ret.append(":"); try { ret.append(String.valueOf(PropertyUtils.getProperty(obj, key))); } catch (InvocationTargetException e) { ret.append("Not ACCESIBLE"); } // ret.append(toLog(PropertyUtils.getProperty(obj, key))); first = false; } return ret.append("}\n").toString(); } catch (Exception e) { throw new MojoExecutionException("Error in conversion Java Object to String", e); } } public void addEncodedString(StringBuffer buff, Object obj) { buff.append("'"); buff.append(obj); buff.append("'"); } }