package org.codehaus.mojo.gwt.shell; /* * I18NMojo.java * * Created on August 19th, 2008 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * 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 * */ import java.io.File; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; /** * Creates I18N interfaces for constants and messages files. * * @author <a href="mailto:sascha@kulawik.de">Sascha-Matthias Kulawik</a> * @author ccollins * @version $Id$ */ @Mojo(name = "i18n", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.COMPILE, threadSafe = true) public class I18NMojo extends AbstractGwtShellMojo { /** * List of resourceBundles that should be used to generate i18n Messages interfaces. */ @Parameter(alias = "i18nMessagesNames") private String[] i18nMessagesBundles; /** * Shortcut for a single i18nMessagesBundle */ @Parameter private String i18nMessagesBundle; /** * List of resourceBundles that should be used to generate i18n Constants interfaces. */ @Parameter(alias = "i18nConstantsNames") private String[] i18nConstantsBundles; /** * Shortcut for a single i18nConstantsBundle */ @Parameter private String i18nConstantsBundle; /** * List of resourceBundles that should be used to generate i18n ConstantsWithLookup interfaces. */ @Parameter private String[] i18nConstantsWithLookupBundles; /** * Shortcut for a single i18nConstantsWithLookupBundle */ @Parameter private String i18nConstantsWithLookupBundle; @Override protected boolean isGenerator() { return true; } public void doExecute( ) throws MojoExecutionException, MojoFailureException { setup(); try { // constants with lookup if ( i18nConstantsWithLookupBundles != null ) { for ( String target : i18nConstantsWithLookupBundles ) { ensureTargetPackageExists( getGenerateDirectory(), target ); createJavaCommand() .setMainClass( "com.google.gwt.i18n.tools.I18NSync" ) .addToClasspath( getClasspath( Artifact.SCOPE_COMPILE ) ) .addToClasspath( getGwtUserJar() ) .addToClasspath( getGwtDevJar() ) .arg( "-out", getGenerateDirectory().getAbsolutePath() ) .arg( "-createConstantsWithLookup" ) .arg( target ) .execute(); } } // constants if ( i18nConstantsBundles != null ) { for ( String target : i18nConstantsBundles ) { ensureTargetPackageExists( getGenerateDirectory(), target ); createJavaCommand() .setMainClass( "com.google.gwt.i18n.tools.I18NSync" ) .addToClasspath( getClasspath( Artifact.SCOPE_COMPILE ) ) .addToClasspath( getGwtUserJar() ) .addToClasspath( getGwtDevJar() ) .arg( "-out", getGenerateDirectory().getAbsolutePath() ) .arg( target ) .execute(); } } // messages if ( i18nMessagesBundles != null ) { for ( String target : i18nMessagesBundles ) { ensureTargetPackageExists( getGenerateDirectory(), target ); createJavaCommand() .setMainClass( "com.google.gwt.i18n.tools.I18NSync" ) .addToClasspath( getClasspath( Artifact.SCOPE_COMPILE ) ) .addToClasspath( getGwtUserJar() ) .addToClasspath( getGwtDevJar() ) .arg( "-out", getGenerateDirectory().getAbsolutePath() ) .arg( "-createMessages" ) .arg( target ) .execute(); } } } catch (JavaCommandException e) { throw new MojoExecutionException( e.getMessage(), e ); } } private void setup() throws MojoExecutionException { if ( i18nConstantsWithLookupBundles == null && i18nConstantsWithLookupBundle != null ) { i18nConstantsWithLookupBundles = new String[] { i18nConstantsWithLookupBundle }; } if ( i18nConstantsBundles == null && i18nConstantsBundle != null ) { i18nConstantsBundles = new String[] { i18nConstantsBundle }; } if ( i18nMessagesBundles == null && i18nMessagesBundle != null ) { i18nMessagesBundles = new String[] { i18nMessagesBundle }; } if ( i18nMessagesBundles == null && i18nConstantsBundles == null && i18nConstantsWithLookupBundles == null ) { throw new MojoExecutionException( "neither i18nConstantsBundles, i18nMessagesBundles nor i18nConstantsWithLookupBundles present. \n" + "Cannot execute i18n goal" ); } setupGenerateDirectory(); } private void ensureTargetPackageExists( File generateDirectory, String targetName ) { targetName = targetName.substring( 0, targetName.lastIndexOf( '.' ) ); String targetPackage = targetName.replace( '.', File.separatorChar ); getLog().debug( "ensureTargetPackageExists, targetName : " + targetName + ", targetPackage : " + targetPackage ); File targetPackageDirectory = new File( generateDirectory, targetPackage ); if ( !targetPackageDirectory.exists() ) { targetPackageDirectory.mkdirs(); } } }