1 package jp.sourceforge.stigmata.birthmarks;
7 import java.io.ByteArrayInputStream;
8 import java.io.InputStream;
10 import jp.sourceforge.stigmata.Birthmark;
11 import jp.sourceforge.stigmata.BirthmarkContext;
12 import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
13 import jp.sourceforge.stigmata.BirthmarkExtractor;
14 import jp.sourceforge.stigmata.ExtractionUnit;
15 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
18 * Abstract class for extracting birthmark.
19 * @author Haruaki TAMADA
22 public abstract class AbstractBirthmarkExtractor implements BirthmarkExtractor{
26 private BirthmarkSpi spi;
29 * default constructor.
30 * @deprecated this constructor does not support service provider.
32 public AbstractBirthmarkExtractor(){
37 * @param spi service provider.
39 public AbstractBirthmarkExtractor(BirthmarkSpi spi){
44 * returns the provider of this extractor.
47 public BirthmarkSpi getProvider(){
52 * extract birthmark given stream with given environment.
55 public final Birthmark extract(InputStream in, BirthmarkContext context) throws BirthmarkExtractionFailedException{
56 return extract(createBirthmark(), in, context);
60 * extract birthmark given byte array with given environment.
63 public final Birthmark extract(Birthmark birthmark, byte[] bytecode, BirthmarkContext context) throws BirthmarkExtractionFailedException{
64 return extract(birthmark, new ByteArrayInputStream(bytecode), context);
68 * extract birthmark given byte array with given environment.
71 public final Birthmark extract(byte[] bytecode, BirthmarkContext context) throws BirthmarkExtractionFailedException{
72 return extract(createBirthmark(), new ByteArrayInputStream(bytecode), context);
76 * extract birthmark given stream with given environment.
79 public abstract Birthmark extract(Birthmark birthmark, InputStream in, BirthmarkContext context) throws BirthmarkExtractionFailedException;
83 * @see jp.sourceforge.stigmata.BirthmarkExtractor#createBirthmark()
86 public Birthmark createBirthmark(){
87 return new PlainBirthmark(getProvider().getType());
91 public abstract ExtractionUnit[] getAcceptableUnits();
94 public boolean isAcceptable(ExtractionUnit unit){
95 ExtractionUnit[] units = getAcceptableUnits();
97 for(int i = 0; i < units.length; i++){