List of usage examples for com.google.gwt.dev.resource.impl PathPrefixSet PathPrefixSet
public PathPrefixSet()
From source file:com.msco.mil.server.com.sencha.gxt.explorer.rebind.SampleGenerator.java
License:sencha.com license
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { // Get access to metadata about the type to be generated TypeOracle oracle = context.getTypeOracle(); JClassType toGenerate = oracle.findType(typeName).isClass(); // Get the name of the new type String packageName = toGenerate.getPackage().getName(); String simpleSourceName = toGenerate.getName().replace('.', '_') + "Impl"; PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return packageName + "." + simpleSourceName; }//from w ww . j av a2 s . c om // Generate an HTML file resource for every example and write the source JClassType[] types = oracle.getTypes(); // Build a ResourceOracle capable of reading java files sourceOracle = new ResourceOracleImpl(logger.branch(Type.DEBUG, "Gathering sources")); // Clean up these prefixes to not have filters PathPrefixSet prefixes = ((ResourceOracleImpl) context.getResourcesOracle()).getPathPrefixes(); sourceOracle.setPathPrefixes(new PathPrefixSet()); for (PathPrefix p : prefixes.values()) { sourceOracle.getPathPrefixes().add(new PathPrefix(p.getPrefix(), null)); } ResourceOracleImpl.refresh(logger, sourceOracle); // Load the header and footer HTML content try { String slashyPackageName = getClass().getPackage().getName().replace('.', '/'); javaHeader = Utility.getFileFromClassPath(slashyPackageName + "/header.html"); footer = Utility.getFileFromClassPath(slashyPackageName + "/footer.html"); } catch (IOException e) { logger.log(Type.ERROR, "Header or Footer failed to be read", e); throw new UnableToCompleteException(); } // Find all examples, annotated with @Detail Set<ExampleDetailModel> examples = new HashSet<ExampleDetailModel>(); Map<String, List<ExampleDetailModel>> hierarchy = new HashMap<String, List<ExampleDetailModel>>(); Set<SourceModel> exampleSources = new HashSet<SourceModel>(); for (JClassType type : types) { Example.Detail detail = type.getAnnotation(Example.Detail.class); if (detail != null) { ExampleDetailModel example = new ExampleDetailModel(logger, context, type, detail); // Collect sources to be built into html exampleSources.addAll(example.getAllSources()); List<ExampleDetailModel> exampleList = hierarchy.get(detail.category()); if (exampleList == null) { exampleList = new ArrayList<ExampleDetailModel>(); hierarchy.put(detail.category(), exampleList); } examples.add(example); exampleList.add(example); } } // Sort folders, sort within those folders List<String> folders = new ArrayList<String>(hierarchy.keySet()); Collections.sort(folders); for (List<ExampleDetailModel> contents : hierarchy.values()) { Collections.sort(contents); } // Actually build source for each type for (SourceModel type : exampleSources) { TreeLogger l = logger.branch(Type.DEBUG, "Writing HTML file for " + type.getName()); // attempt to create the output file if (type.getType() == FileType.JAVA) { writeTypeToHtml(l, context, type.getJClassType()); } else { writeFileToHtml(l, context, type.getPath()); } } // Start making the class, with basic imports ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleSourceName); factory.setSuperclass(typeName); factory.addImport(Name.getSourceNameForClass(Category.class)); factory.addImport(Name.getSourceNameForClass(ImageResource.class)); factory.addImport(Name.getSourceNameForClass(GWT.class)); factory.addImport(Name.getSourceNameForClass(Example.class)); factory.addImport(Name.getSourceNameForClass(Source.class)); factory.addImport(Name.getSourceNameForClass(Source.FileType.class)); SourceWriter sw = factory.createSourceWriter(context, pw); // Write the ctor sw.println("public %1$s() {", simpleSourceName); sw.indent(); // Declare variables that will be used sw.println("Category c;"); sw.println("ImageResource icon;"); sw.println("Example e;"); sw.println("Source dir;"); Set<String> names = new HashSet<String>(); Map<JClassType, String> bundles = new HashMap<JClassType, String>(); for (String folder : folders) { // TODO escape name sw.println("c = new Category(\"%1$s\");", folder); for (ExampleDetailModel example : hierarchy.get(folder)) { // make sure the bundle to be used exists if (!bundles.containsKey(example.getClientBundleType())) { String bundleName = getNextName("bundle", names); sw.println("%1$s %2$s = GWT.create(%1$s.class);", example.getClientBundleType().getQualifiedSourceName(), bundleName); bundles.put(example.getClientBundleType(), bundleName); } // write out the example, adding it to the current category writeExample(sw, bundles.get(example.getClientBundleType()), example); } sw.println("categories.add(c);"); } sw.outdent(); sw.println("}");// end ctor sw.commit(logger); return factory.getCreatedClassName(); }