| /* |
| * Copyright 2009 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.uibinder.rebind; |
| |
| import com.google.gwt.core.ext.GeneratorContext; |
| import com.google.gwt.core.ext.TreeLogger; |
| |
| import java.io.PrintWriter; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| /** |
| * Factory for printwriters creating source files in a particular package. |
| */ |
| class PrintWriterManager { |
| private final GeneratorContext genCtx; |
| private final String packageName; |
| private final TreeLogger logger; |
| private final Set<PrintWriter> writers = new HashSet<PrintWriter>(); |
| |
| PrintWriterManager(GeneratorContext genCtx, TreeLogger logger, |
| String packageName) { |
| this.genCtx = genCtx; |
| this.packageName = packageName; |
| this.logger = logger; |
| } |
| |
| /** |
| * Commit all writers we have vended. |
| */ |
| void commit() { |
| for (PrintWriter writer : writers) { |
| genCtx.commit(logger, writer); |
| } |
| } |
| |
| /** |
| * @param name classname |
| * @return the printwriter |
| * @throws RuntimeException if this class has already been written |
| */ |
| PrintWriter makePrintWriterFor(String name) { |
| PrintWriter writer = tryToMakePrintWriterFor(name); |
| if (writer == null) { |
| throw new RuntimeException(String.format("Tried to write %s.%s twice.", |
| packageName, name)); |
| } |
| return writer; |
| } |
| |
| /** |
| * @param name classname |
| * @return the printwriter, or null if this class has already been written |
| */ |
| PrintWriter tryToMakePrintWriterFor(String name) { |
| PrintWriter writer = genCtx.tryCreate(logger, packageName, name); |
| if (writer != null) { |
| writers.add(writer); |
| } |
| return writer; |
| } |
| } |