package com.googlecode.gwtphonegap.server.log.rebind; import java.io.PrintWriter; import java.util.List; import com.google.gwt.core.ext.BadPropertyValueException; import com.google.gwt.core.ext.ConfigurationProperty; import com.google.gwt.core.ext.Generator; import com.google.gwt.core.ext.GeneratorContext; import com.google.gwt.core.ext.PropertyOracle; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.core.ext.typeinfo.JClassType; import com.google.gwt.core.ext.typeinfo.NotFoundException; import com.google.gwt.user.rebind.ClassSourceFileComposerFactory; import com.google.gwt.user.rebind.SourceWriter; public class PhoneGapLogValueGenerator extends Generator { @Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { PropertyOracle propertyOracle = context.getPropertyOracle(); ConfigurationProperty property = null; int value = 100; try { property = propertyOracle.getConfigurationProperty("phonegap.logging.maxentries"); List<String> values = property.getValues(); if (values.size() < 1) { logger.log(TreeLogger.WARN, "can not resolve phonegap.logging.maxentries variable - defaulting to 100"); } else { String stringValue = values.get(0); try { value = Integer.parseInt(stringValue); } catch (Exception e) { logger.log(TreeLogger.WARN, "can not prase phonegap.logging.maxentries variable - value: '" + stringValue + "' - defaulting to 100"); } } } catch (BadPropertyValueException e) { logger.log(TreeLogger.WARN, "can not resolve phonegap.logging.maxentries variable - defaulting to 100", e); } JClassType classType = null; try { classType = context.getTypeOracle().getType(typeName); } catch (NotFoundException e) { logger.log(TreeLogger.ERROR, "can not find type: '" + typeName + "'", e); throw new UnableToCompleteException(); } String packageName = classType.getPackage().getName(); String simpleName = classType.getSimpleSourceName() + "_" + value; String fullName = packageName + "." + simpleName; ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(packageName, simpleName); composer.addImplementedInterface(typeName); composer.addImport(typeName); PrintWriter printWriter = context.tryCreate(logger, packageName, simpleName); if (printWriter == null) { return fullName; } SourceWriter writer = composer.createSourceWriter(context, printWriter); writer.println("public int getMaxEntries() {"); writer.println("return " + value + ";"); writer.println("}"); writer.commit(logger); return fullName; } }