blob: e8313f489f58ef1465ae6b83c96dc80724e233fc [file] [log] [blame]
/*
* 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);
}
}