/* * Copyright 2008 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.core.ext.linker; import com.google.gwt.core.ext.Linker; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.dev.util.Util; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * Provides basic functions common to all Linker implementations. */ public abstract class AbstractLinker extends Linker { /** * A helper method to create an artifact from an array of bytes. * * @param logger a TreeLogger * @param what the data to emit * @param partialPath the partial path of the resource * @return an artifact that contains the given data * @throws UnableToCompleteException */ protected final SyntheticArtifact emitBytes(TreeLogger logger, byte[] what, String partialPath) throws UnableToCompleteException { return new SyntheticArtifact(getClass(), partialPath, what); } /** * A helper method to create an artifact from an array of bytes. * * @param logger a TreeLogger * @param what the data to emit * @param partialPath the partial path of the resource * @return an artifact that contains the given data * @param lastModified the last modified time of the new artifact * @throws UnableToCompleteException */ protected final SyntheticArtifact emitBytes(TreeLogger logger, byte[] what, String partialPath, long lastModified) throws UnableToCompleteException { return new SyntheticArtifact(getClass(), partialPath, what, lastModified); } /** * A helper method to create an artifact to emit the contents of an * InputStream. * * @param logger a TreeLogger * @param what the source InputStream * @param partialPath the partial path of the emitted resource * @return an artifact that contains the contents of the InputStream */ protected final SyntheticArtifact emitInputStream(TreeLogger logger, InputStream what, String partialPath) throws UnableToCompleteException { ByteArrayOutputStream out = new ByteArrayOutputStream(); Util.copy(logger, what, out); return emitBytes(logger, out.toByteArray(), partialPath); } /** * A helper method to create an artifact to emit the contents of an * InputStream. * * @param logger a TreeLogger * @param what the source InputStream * @param partialPath the partial path of the emitted resource * @param lastModified the last modified time of the new artifact * @return an artifact that contains the contents of the InputStream */ protected final SyntheticArtifact emitInputStream(TreeLogger logger, InputStream what, String partialPath, long lastModified) throws UnableToCompleteException { ByteArrayOutputStream out = new ByteArrayOutputStream(); Util.copy(logger, what, out); return emitBytes(logger, out.toByteArray(), partialPath, lastModified); } /** * A helper method to create an artifact to emit a String. * * @param logger a TreeLogger * @param what the contents of the Artifact to emit * @param partialPath the partial path of the emitted resource * @return an artifact that contains the contents of the given String */ protected final SyntheticArtifact emitString(TreeLogger logger, String what, String partialPath) throws UnableToCompleteException { return emitBytes(logger, Util.getBytes(what), partialPath); } /** * A helper method to create an artifact to emit a String. * * @param logger a TreeLogger * @param what the contents of the Artifact to emit * @param partialPath the partial path of the emitted resource * @param lastModified the last modified time of the new artifact * @return an artifact that contains the contents of the given String */ protected final SyntheticArtifact emitString(TreeLogger logger, String what, String partialPath, long lastModified) throws UnableToCompleteException { return emitBytes(logger, Util.getBytes(what), partialPath, lastModified); } /** * A helper method to create an artifact from an array of bytes with a strong * name. * * @param logger a TreeLogger * @param what the data to emit * @param prefix a non-null string to prepend to the hash to determine the * Artifact's partial path * @param suffix a non-null string to append to the hash to determine the * Artifact's partial path * @return an artifact that contains the given data */ protected final SyntheticArtifact emitWithStrongName(TreeLogger logger, byte[] what, String prefix, String suffix) throws UnableToCompleteException { String strongName = prefix + Util.computeStrongName(what) + suffix; return emitBytes(logger, what, strongName); } /** * A helper method to create an artifact from an array of bytes with a strong * name. * * @param logger a TreeLogger * @param what the data to emit * @param prefix a non-null string to prepend to the hash to determine the * Artifact's partial path * @param suffix a non-null string to append to the hash to determine the * Artifact's partial path * @param lastModified the last modified time of the new artifact * @return an artifact that contains the given data */ protected final SyntheticArtifact emitWithStrongName(TreeLogger logger, byte[] what, String prefix, String suffix, long lastModified) throws UnableToCompleteException { String strongName = prefix + Util.computeStrongName(what) + suffix; return emitBytes(logger, what, strongName, lastModified); } }