1 package jp.sourceforge.stigmata.birthmarks;
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
6 import jp.sourceforge.stigmata.Birthmark;
7 import jp.sourceforge.stigmata.BirthmarkContext;
8 import jp.sourceforge.stigmata.BirthmarkEnvironment;
9 import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;
10 import jp.sourceforge.stigmata.BirthmarkExtractor;
11 import jp.sourceforge.stigmata.ExtractionUnit;
12 import jp.sourceforge.stigmata.spi.BirthmarkService;
15 * Abstract class for extracting birthmark.
16 * @author Haruaki TAMADA
18 public abstract class AbstractBirthmarkExtractor implements BirthmarkExtractor{
22 private BirthmarkService spi;
25 * default constructor.
26 * @deprecated this constructor does not support service provider.
28 public AbstractBirthmarkExtractor(){
33 * @param spi service provider.
35 public AbstractBirthmarkExtractor(BirthmarkService spi){
40 * returns the provider of this extractor.
43 public BirthmarkService getProvider(){
47 public final Birthmark extract(InputStream in) throws BirthmarkExtractionFailedException{
48 return extract(createBirthmark(), in, new BirthmarkContext(BirthmarkEnvironment.getDefaultEnvironment()));
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++){