OSDN Git Service

Spiという名前をすべてServiceに変更した.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / AbstractBirthmarkExtractor.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
5
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;
13
14 /**
15  * Abstract class for extracting birthmark.
16  * @author  Haruaki TAMADA
17  */
18 public abstract class AbstractBirthmarkExtractor implements BirthmarkExtractor{
19     /**
20      * provider.
21      */
22     private BirthmarkService spi;
23
24     /**
25      * default constructor.
26      * @deprecated this constructor does not support service provider.
27      */
28     public AbstractBirthmarkExtractor(){
29     }
30
31     /**
32      * constructor.
33      * @param spi service provider.
34      */
35     public AbstractBirthmarkExtractor(BirthmarkService spi){
36         this.spi = spi;
37     }
38
39     /**
40      * returns the provider of this extractor.
41      */
42     @Override
43     public BirthmarkService getProvider(){
44         return spi;
45     }
46
47     public final Birthmark extract(InputStream in) throws BirthmarkExtractionFailedException{
48         return extract(createBirthmark(), in, new BirthmarkContext(BirthmarkEnvironment.getDefaultEnvironment()));
49     }
50
51     /**
52      * extract birthmark given stream with given environment.
53      */
54     @Override
55     public final Birthmark extract(InputStream in, BirthmarkContext context) throws BirthmarkExtractionFailedException{
56         return extract(createBirthmark(), in, context);
57     }
58
59     /**
60      * extract birthmark given byte array with given environment.
61      */
62     @Override
63     public final Birthmark extract(Birthmark birthmark, byte[] bytecode, BirthmarkContext context) throws BirthmarkExtractionFailedException{
64         return extract(birthmark, new ByteArrayInputStream(bytecode), context);
65     }
66
67     /**
68      * extract birthmark given byte array with given environment.
69      */
70     @Override
71     public final Birthmark extract(byte[] bytecode, BirthmarkContext context) throws BirthmarkExtractionFailedException{
72         return extract(createBirthmark(), new ByteArrayInputStream(bytecode), context);
73     }
74
75     /**
76      * extract birthmark given stream with given environment.
77      */
78     @Override
79     public abstract Birthmark extract(Birthmark birthmark, InputStream in, BirthmarkContext context) throws BirthmarkExtractionFailedException;
80
81     /**
82      * create birthmark.
83      * @see jp.sourceforge.stigmata.BirthmarkExtractor#createBirthmark()
84      */
85     @Override
86     public Birthmark createBirthmark(){
87         return new PlainBirthmark(getProvider().getType());
88     }
89
90     @Override
91     public abstract ExtractionUnit[] getAcceptableUnits();
92
93     @Override
94     public boolean isAcceptable(ExtractionUnit unit){
95         ExtractionUnit[] units = getAcceptableUnits();
96
97         for(int i = 0; i < units.length; i++){
98             if(units[i] == unit){
99                 return true;
100             }
101         }
102         return false;
103     }
104 }