OSDN Git Service

プラットフォームごとのStigmataのホームディレクトリの場所を返す一連のクラスをリファクタリングした.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / birthmarks / AbstractBirthmarkExtractor.java
1 package jp.sourceforge.stigmata.birthmarks;
2
3 /*
4  * $Id$
5  */
6
7 import java.io.ByteArrayInputStream;
8 import java.io.InputStream;
9
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;
16
17 /**
18  * Abstract class for extracting birthmark.
19  * @author  Haruaki TAMADA
20  * @version  $Revision$ 
21  */
22 public abstract class AbstractBirthmarkExtractor implements BirthmarkExtractor{
23     /**
24      * provider.
25      */
26     private BirthmarkSpi spi;
27
28     /**
29      * default constructor.
30      * @deprecated this constructor does not support service provider.
31      */
32     public AbstractBirthmarkExtractor(){
33     }
34
35     /**
36      * constructor.
37      * @param spi service provider.
38      */
39     public AbstractBirthmarkExtractor(BirthmarkSpi spi){
40         this.spi = spi;
41     }
42
43     /**
44      * returns the provider of this extractor.
45      */
46     @Override
47     public BirthmarkSpi getProvider(){
48         return spi;
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 }