Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster_dataaccess_refactoring / org.gvsig.raster.lib / org.gvsig.raster.lib.impl / src / main / java / org / gvsig / raster / impl / grid / filter / FilterLoaderImpl.java @ 2315

History | View | Annotate | Download (2.82 KB)

1
package org.gvsig.raster.impl.grid.filter;
2

    
3
import org.gvsig.fmap.dal.coverage.RasterLocator;
4
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
5
import org.gvsig.fmap.dal.coverage.exception.FilterAddException;
6
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
7
import org.gvsig.fmap.dal.coverage.filter.FilterLoader;
8
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
9
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
10
import org.gvsig.fmap.dal.coverage.store.props.Transparency;
11
import org.slf4j.LoggerFactory;
12

    
13
/**
14
 * <P>
15
 * Applies the stack of filters to a buffer. With the same <code>FilterLoader</code>
16
 * you can process different buffers. Each buffer can use a different environment
17
 * </P>
18
 *
19
 * @author Nacho Brodin (nachobrodin@gmail.com)
20
 */
21
public class FilterLoaderImpl implements FilterLoader {
22
        private RasterFilterList     filterList  = null;
23
        private Buffer               inputBuffer = null;
24
        
25
        /**
26
         * Creates a filter loader with a default filter list
27
         * @param dataType
28
         */
29
        public FilterLoaderImpl(int dataType) {
30
                this.filterList = RasterLocator.getManager().createEmptyFilterList(dataType);
31
        }
32
        
33
        /**
34
         * Creates a filter loader with the list of filters passed by parameter
35
         * @param filterList
36
         */
37
        public FilterLoaderImpl(RasterFilterList filterList) {
38
                this.filterList = filterList;
39
        }
40
        
41
        public void addTransparency(Transparency transparency) {
42
                filterList.addEnvParam("Transparency", transparency.cloneTransparency());
43
        }
44
        
45
        public void addSrcDataType(int datatype) {
46
                filterList.addEnvParam("SrcDataType", datatype);
47
        }
48
        
49
        public void addSrcBandCount(int bandcount) {
50
                filterList.addEnvParam("SrcBandCount", bandcount);
51
        }
52
        
53
        public void addSrcStatistics(Statistics statistics) {
54
                filterList.addEnvParam("SrcStatistics", statistics);
55
        }
56
        
57
        public Buffer applyFilters(Buffer buffer) {
58
                this.inputBuffer = buffer;
59
                
60
                //Checks if the transparency is inside the buffer
61
                Transparency transparency = (Transparency)filterList.getEnvParam("Transparency");
62
                if(transparency.existAlphaBand() && transparency.getAlphaBandNumber() >= buffer.getBandCount()) {
63
                        transparency.setTransparencyBand(-1);
64
                        transparency.activeTransparency();
65
                }
66
                filterList.setInitRasterBuf(inputBuffer);
67
                try {
68
                        filterList.execute();
69
                } catch (ProcessInterruptedException e) {
70
                        return inputBuffer;
71
                } catch (FilterAddException e) {
72
                        LoggerFactory.getLogger(this.getClass()).debug("Filters cannot be applied", e);
73
                        return inputBuffer;
74
                }
75
                if(filterList.getResult() != null)
76
                        return (Buffer) filterList.getResult();
77
                return inputBuffer;
78
        }
79
        
80
        public Transparency getTransparency() {
81
                Transparency t = filterList.getTransparency();
82
                t.setDataBuffer(inputBuffer);
83
                return t;
84
        }
85
        
86
        public Buffer getBufferResult() {
87
                if(filterList.getResult() != null)
88
                        return (Buffer) filterList.getResult();
89
                return inputBuffer;
90
        }
91
}