Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.file / org.gvsig.fmap.dal.file.imageio / src / main / java / org / gvsig / fmap / dal / file / imageio / ImageIOFileSystemServerProvider.java @ 43876

History | View | Annotate | Download (6.03 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2016 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.fmap.dal.file.imageio;
24

    
25
import java.awt.image.BufferedImage;
26
import java.io.File;
27
import java.io.FileOutputStream;
28
import java.io.IOException;
29
import java.lang.reflect.InvocationTargetException;
30
import java.lang.reflect.Method;
31
import java.util.logging.Level;
32
import java.util.logging.Logger;
33
import javax.imageio.IIOImage;
34
import javax.imageio.ImageIO;
35
import javax.imageio.ImageWriteParam;
36
import javax.imageio.ImageWriter;
37

    
38
import org.apache.commons.io.FilenameUtils;
39
import org.apache.commons.io.IOUtils;
40

    
41
import org.gvsig.fmap.dal.DataServerExplorer;
42
import org.gvsig.fmap.dal.NewDataStoreParameters;
43
import org.gvsig.fmap.dal.exception.CreateException;
44
import org.gvsig.fmap.dal.exception.DataException;
45
import org.gvsig.fmap.dal.raster.NewRasterStoreParameters;
46
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
47
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
48
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
49
import org.gvsig.raster.lib.buffer.api.Buffer;
50
import org.gvsig.tools.ToolsLocator;
51
import org.gvsig.tools.dataTypes.CoercionException;
52
import org.gvsig.tools.dataTypes.DataTypes;
53
import org.gvsig.tools.dataTypes.DataTypesManager;
54
import org.gvsig.tools.dynobject.DynField;
55
import org.gvsig.tools.dynobject.DynField_v2;
56

    
57
public class ImageIOFileSystemServerProvider extends AbstractFilesystemServerExplorerProvider {
58

    
59
    protected FilesystemServerExplorerProviderServices serverExplorer;
60

    
61
    protected String[] fileExtensions;
62
    protected boolean canCreate;
63

    
64
    public ImageIOFileSystemServerProvider(
65
            String name, 
66
            String description, 
67
            String[] fileExtensions
68
        ) {
69
        this(name, description, fileExtensions, false);
70
    }
71
    
72
    public ImageIOFileSystemServerProvider(
73
            String name, 
74
            String description, 
75
            String[] fileExtensions,
76
            boolean canCreate
77
        ) {
78
        super(name, description);
79
        this.fileExtensions = fileExtensions;
80
        this.canCreate = canCreate;
81
    }
82
    
83
    @Override
84
    public boolean canCreate() {
85
        return canCreate;
86
    }
87

    
88
    @Override
89
    public NewDataStoreParameters getCreateParameters() throws DataException {
90
        if( !this.canCreate() ) {
91
           throw new UnsupportedOperationException();
92
        }
93
        return null ; // TODO: Falta la creacion de los parametros 
94
    }
95

    
96
    @Override
97
    public void create(NewDataStoreParameters parameters, boolean overwrite) throws CreateException {
98
        if( !this.canCreate() ) {
99
           throw new UnsupportedOperationException();
100
        }
101
        File output = ((FilesystemStoreParameters)parameters).getFile();
102
        if( output==null ) {
103
            throw new IllegalArgumentException("Parameter 'file' can't be null.");
104
        }
105
        Buffer buffer = ((NewRasterStoreParameters)parameters).getBuffer();
106
        if( buffer==null ) {
107
            throw new IllegalArgumentException("Parameter 'buffer' can't be null.");
108
        }
109
        BufferedImage image = buffer.getBufferedImage();
110
        try {
111
            ImageIO.write(image, this.getName(), output);
112
        } catch (IOException ex) {
113
            throw new CreateException(output.getAbsolutePath(), ex);
114
        }
115
        
116
//        DataTypesManager dtm = ToolsLocator.getDataTypesManager();
117
//        ImageWriter writer = getImageWriter();
118
//        ImageWriteParam writerParams = writer.getDefaultWriteParam();
119
//        Class<? extends ImageWriteParam> writerParamsClass = writerParams.getClass();
120
//        for( DynField field : parameters.getDynClass().getDynFields() ) {
121
//            DynField_v2 field2 = (DynField_v2) field;
122
//            try {
123
//                String methodName = (String) field2.getTags().get(
124
//                    "ImageWriteParam", 
125
//                    DataTypes.STRING
126
//                );
127
//                if( methodName!=null ) {
128
//                    Method setter = writerParamsClass.getMethod(
129
//                        methodName, 
130
//                        dtm.getDefaultClass(field.getType())
131
//                    );
132
//                    setter.invoke(
133
//                        writerParams, 
134
//                        parameters.getDynValue(field.getName())
135
//                    );
136
//                }
137
//            } catch (Exception ex) {
138
//            }
139
//        }
140
//        FileOutputStream fos = null;
141
//        try {
142
//            fos = new FileOutputStream(output);
143
//            writer.setOutput(fos);
144
//            writer.write(null, new IIOImage(image, null, null), writerParams);
145
//        } catch (Exception ex) {
146
//            throw new CreateException(output.getAbsolutePath(), ex);
147
//        } finally {
148
//            IOUtils.closeQuietly(fos);
149
//        }
150
        
151
    }
152
    
153
//    private ImageWriter getImageWriter() {
154
//        return null;
155
//    }
156
    
157
    @Override
158
    public int getMode() {
159
        return DataServerExplorer.MODE_RASTER;
160
    }
161

    
162
    @Override
163
    public boolean accept(File pathname) {
164
        return FilenameUtils.isExtension(pathname.getName().toLowerCase(), this.fileExtensions);
165
    }
166

    
167

    
168
}