Java tutorial
package org.codehaus.mojo.gwt.shell; /* * 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.FileWriter; import java.io.IOException; import java.util.List; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang.SystemUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Resource; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.codehaus.plexus.util.cli.StreamConsumer; /** * Creates CSS interfaces for css files. * Will use the utility tool provided in gwt sdk which create a corresponding Java interface for accessing * the classnames used in the file. * @goal css * @author Stale Undheim <undheim@corporater.com> * @author olamy * @since 2.1.0-1 */ public class CSSMojo extends AbstractGwtShellMojo { /** * List of resourceBundles that should be used to generate CSS interfaces. * * @parameter */ private String[] cssFiles; /** * Shortcut for a single cssFile * * @parameter */ private String cssFile; public void doExecute() throws MojoExecutionException, MojoFailureException { setup(); boolean generated = false; // java -cp gwt-dev.jar:gwt-user.jar // com.google.gwt.resources.css.InterfaceGenerator -standalone -typeName some.package.MyCssResource -css // input.css if (cssFiles != null) { for (String file : cssFiles) { final String typeName = FilenameUtils.separatorsToSystem(file).substring(0, file.lastIndexOf('.')) .replace(File.separatorChar, '.'); final File javaOutput = new File(getGenerateDirectory(), typeName.replace('.', File.separatorChar) + ".java"); final StringBuilder content = new StringBuilder(); out = new StreamConsumer() { public void consumeLine(String line) { content.append(line).append(SystemUtils.LINE_SEPARATOR); } }; for (Resource resource : (List<Resource>) getProject().getResources()) { final File candidate = new File(resource.getDirectory(), file); if (candidate.exists()) { getLog().info("Generating " + javaOutput + " with typeName " + typeName); ensureTargetPackageExists(getGenerateDirectory(), typeName); try { new JavaCommand("com.google.gwt.resources.css.InterfaceGenerator") .withinScope(Artifact.SCOPE_COMPILE).arg("-standalone").arg("-typeName") .arg(typeName).arg("-css").arg(candidate.getAbsolutePath()) .withinClasspath(getGwtDevJar()).withinClasspath(getGwtUserJar()).execute(); final FileWriter outputWriter = new FileWriter(javaOutput); outputWriter.write(content.toString()); outputWriter.close(); } catch (IOException e) { throw new MojoExecutionException("Failed to write to file: " + javaOutput); } generated = true; break; } } if (content.length() == 0) { throw new MojoExecutionException("cannot generate java source from file " + file + "."); } } } if (generated) { getLog().debug("add compile source root " + getGenerateDirectory()); addCompileSourceRoot(getGenerateDirectory()); } } private void setup() throws MojoExecutionException { if (cssFiles == null && cssFile != null) { cssFiles = new String[] { cssFile }; } } private void ensureTargetPackageExists(File generateDirectory, String targetName) { targetName = targetName.contains(".") ? targetName.substring(0, targetName.lastIndexOf('.')) : targetName; String targetPackage = targetName.replace('.', File.separatorChar); getLog().debug( "ensureTargetPackageExists, targetName : " + targetName + ", targetPackage : " + targetPackage); File targetPackageDirectory = new File(generateDirectory, targetPackage); if (!targetPackageDirectory.exists()) { targetPackageDirectory.mkdirs(); } } }