| /* | |
| * Copyright 2011 Google Inc. | |
| * | |
| * Licensed 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. | |
| */ | |
| package com.google.gwt.codegen.server; | |
| import java.util.ArrayList; | |
| import java.util.LinkedHashSet; | |
| import java.util.List; | |
| import java.util.Set; | |
| import java.util.TreeSet; | |
| /** | |
| * A builder for {@link JavaSourceWriter} instances. | |
| * <p> | |
| * Experimental API - subject to change. | |
| */ | |
| public class JavaSourceWriterBuilder { | |
| private final String className; | |
| private final String packageName; | |
| private final AbortablePrintWriter printWriter; | |
| private final List<String> annotations = new ArrayList<String>(); | |
| private boolean isClass = true; | |
| private String classComment; | |
| private final Set<String> imports = new TreeSet<String>(); | |
| private final Set<String> interfaceNames = new LinkedHashSet<String>(); | |
| private String superClassName; | |
| /** | |
| * @param printWriter | |
| * @param packageName | |
| * @param className | |
| */ | |
| public JavaSourceWriterBuilder(AbortablePrintWriter printWriter, String packageName, | |
| String className) { | |
| this.printWriter = printWriter; | |
| this.packageName = packageName; | |
| this.className = className; | |
| } | |
| /** | |
| * Add an class/interface annotation. | |
| * | |
| * @param declaration | |
| */ | |
| public void addAnnotationDeclaration(String declaration) { | |
| annotations.add(declaration); | |
| } | |
| /** | |
| * Add an implemented/extended interface. | |
| * | |
| * @param intfName | |
| */ | |
| public void addImplementedInterface(String intfName) { | |
| interfaceNames.add(intfName); | |
| } | |
| /** | |
| * Add an import entry. | |
| * | |
| * @param typeName fully-qualified source name | |
| */ | |
| public void addImport(String typeName) { | |
| imports.add(typeName); | |
| } | |
| /** | |
| * Creates an implementation of {@link JavaSourceWriter} that can be used to write | |
| * the innards of a class. Note that the subsequent changes to this factory do | |
| * not affect the returned instance. | |
| * | |
| * @return a {@link JavaSourceWriter} instance | |
| * @throws RuntimeException If the settings on this factory are inconsistent | |
| * or invalid | |
| */ | |
| public SourceWriter createSourceWriter() { | |
| return new JavaSourceWriter(printWriter, packageName, imports, isClass, classComment, | |
| annotations, className, superClassName, interfaceNames); | |
| } | |
| /** | |
| * Get the annotations. | |
| * | |
| * @return list of annotations | |
| */ | |
| public Iterable<String> getAnnotationDeclarations() { | |
| return annotations; | |
| } | |
| /** | |
| * Get the simple name of the class being created. | |
| * | |
| * @return class name | |
| */ | |
| public String getClassName() { | |
| return className; | |
| } | |
| /** | |
| * Get the fully-qualified source name of the class being created. | |
| * | |
| * @return fqcn | |
| */ | |
| public String getFullyQualifiedClassName() { | |
| return getPackageName() + "." + getClassName(); | |
| } | |
| /** | |
| * Get the implemented/extended interfaces for the class being created. | |
| * | |
| * @return list of interface names | |
| */ | |
| public Iterable<String> getInterfaceNames() { | |
| return interfaceNames; | |
| } | |
| /** | |
| * Get the package of the class being created. | |
| * | |
| * @return package name | |
| */ | |
| public String getPackageName() { | |
| return packageName; | |
| } | |
| /** | |
| * Get the superclass for the class being created. | |
| * | |
| * @return superclass name | |
| */ | |
| public String getSuperclassName() { | |
| return superClassName; | |
| } | |
| /** | |
| * We are creating an interface instead of a class. | |
| */ | |
| public void makeInterface() { | |
| isClass = false; | |
| } | |
| /** | |
| * Sets the java doc comment for <code>this</code>. | |
| * | |
| * @param comment java doc comment. | |
| */ | |
| public void setJavaDocCommentForClass(String comment) { | |
| classComment = comment; | |
| } | |
| /** | |
| * Set the superclass of the class being created. | |
| * | |
| * @param superclassName | |
| */ | |
| public void setSuperclass(String superclassName) { | |
| superClassName = superclassName; | |
| } | |
| } |