package org.tessell.generators.css;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import joist.sourcegen.GClass;
import joist.sourcegen.GMethod;
import org.tessell.generators.Cleanup;
import com.google.gwt.core.ext.Generator;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.css.ast.CssProperty.Value;
/** A utility class for creating a Java interface declaration for a given CSS file. */
public class CssGenerator extends AbstractCssGenerator {
private final GClass cssInterface;
public CssGenerator(final File inputCssFile, Cleanup cleanup, final String interfaceName, final File outputDirectory) {
super(inputCssFile, outputDirectory, cleanup);
cssInterface = new GClass(interfaceName).setInterface().baseClass(CssResource.class);
}
public void run() throws IOException {
addMethods();
markAndSaveIfChanged(cssInterface);
}
private void addMethods() {
for (final Map.Entry<String, String> e : getClassNameToMethodName().entrySet()) {
final String className = e.getKey();
final String methodName = e.getValue();
if (className.equals("*")) {
continue; // skip @external *; declarations
}
final GMethod m = cssInterface.getMethod(methodName).returnType(String.class);
if (!methodName.equals(className)) {
m.addAnnotation("@ClassName(\"{}\")", Generator.escape(className));
}
}
for (final Map.Entry<String, Value> def : getDefs().entrySet()) {
// need stricter matching
if (def.getValue().toString().endsWith("px")) {
cssInterface.getMethod(def.getKey()).returnType(int.class);
}
}
}
}