Revision 6489

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.gdal/org.gvsig.raster.gdal.provider/src/main/java/org/gvsig/raster/gdal/provider/RasterGdalStoreProviderCreateCopy.java
16 16

  
17 17
/**
18 18
 * Raster GDAL store provider that stores new raster through createCopy method
19
 *
19 20
 * @author dmartinezizquierdo
20 21
 *
21 22
 */
22
public class RasterGdalStoreProviderCreateCopy extends DefaultRasterGdalStoreProvider{
23
    private final static String AUX_DRIVER_NAME="MEM";
23
public class RasterGdalStoreProviderCreateCopy extends DefaultRasterGdalStoreProvider {
24 24

  
25
    private final static String AUX_DRIVER_NAME = "MEM";
26

  
25 27
    protected RasterGdalStoreProviderCreateCopy(RasterGdalFileStoreParameters params,
26
        DataStoreProviderServices storeServices, DynObject metadata)
27
        throws InitializeException {
28
        DataStoreProviderServices storeServices, DynObject metadata) throws InitializeException {
28 29
        super(params, storeServices, metadata);
29 30
    }
30 31

  
31 32
    /**
32 33
     * Constructor
34
     *
33 35
     * @param params
34 36
     * @param storeServices
35 37
     * @throws InitializeException
......
39 41
        super(params, storeServices);
40 42
    }
41 43

  
42
    protected RasterGdalStoreProviderCreateCopy(NewRasterGdalStoreParameters params,
43
        Driver gdalDriver) {
44
    protected RasterGdalStoreProviderCreateCopy(NewRasterGdalStoreParameters params, Driver gdalDriver) {
44 45
        super(params, gdalDriver);
45 46
    }
46 47

  
47 48
    @Override
48
    public void store(boolean overwrite)
49
        throws CreateException {
50
        NewRasterGdalStoreParameters newRasterParams = (NewRasterGdalStoreParameters)this.getParameters();
51
        File file=newRasterParams.getFile();
52
        Buffer buffer=newRasterParams.getBuffer();
49
    public void store(boolean overwrite) throws CreateException {
50
        NewRasterGdalStoreParameters newRasterParams = (NewRasterGdalStoreParameters) this.getParameters();
51
        File file = newRasterParams.getFile();
52
        Buffer buffer = newRasterParams.getBuffer();
53 53

  
54 54
        String[] options = getStoringOptions(newRasterParams);
55 55

  
56

  
57
        if (file.exists() && !overwrite){
58
            throw new CreateException("File already exists: "+file.toString(), null);
56
        if (file.exists() && !overwrite) {
57
            throw new CreateException("File already exists: " + file.toString(), null);
59 58
        }
60
        Dataset gdalDataset;
61
        //Provider driver doesn't support create
62
        //So we create another raster with a driver that supports it
63
        //and get its copy with our Provider driver
59
        Dataset gdalDataset = null;
60
        // Provider driver doesn't support create
61
        // So we create another raster with a driver that supports it
62
        // and get its copy with our Provider driver
64 63

  
65
        Driver auxDriver = gdal.GetDriverByName( AUX_DRIVER_NAME );
66
        Dataset auxDataset = auxDriver.Create("",buffer.getColumns(), buffer.getRows(), buffer.getBandCount());
64
        try {
65
            Driver auxDriver = gdal.GetDriverByName(AUX_DRIVER_NAME);
66
            Dataset auxDataset = auxDriver.Create("", buffer.getColumns(), buffer.getRows(), buffer.getBandCount());
67 67

  
68
        IProjection projection = buffer.getProjection();
68
            IProjection projection = buffer.getProjection();
69 69

  
70
        if (projection!=null){
71
            String wkt=projection.export(ICRSFactory.FORMAT_WKT_ESRI);
72
            auxDataset.SetProjection(wkt);
73
        }
74
        auxDataset.SetGeoTransform(createGeoTransform(buffer));
70
            if (projection != null) {
71
                String wkt = projection.export(ICRSFactory.FORMAT_WKT_ESRI);
72
                auxDataset.SetProjection(wkt);
73
            }
74
            auxDataset.SetGeoTransform(createGeoTransform(buffer));
75 75

  
76
        fillDataset(buffer, auxDataset);
76
            fillDataset(buffer, auxDataset);
77 77

  
78
        if (options.length== 0) {
79
            gdalDataset = gdalDriver.CreateCopy(file.getAbsolutePath(), auxDataset);
80
        } else {
81
            gdalDataset = gdalDriver.CreateCopy(file.getAbsolutePath(), auxDataset, options);
82
        }
83

  
84
        if (gdalDataset!=null){
78
            if (options.length == 0) {
79
                gdalDataset = gdalDriver.CreateCopy(file.getAbsolutePath(), auxDataset);
80
            } else {
81
                gdalDataset = gdalDriver.CreateCopy(file.getAbsolutePath(), auxDataset, options);
82
            }
85 83
            gdalDataset.FlushCache();
84
        } finally {
85
            if (gdalDataset != null) {
86
                gdalDataset.delete();
87
            }
86 88
        }
87
        //Create WLD
89
        // Create WLD
88 90
        try {
89
            createWorldFile(file,  buffer);
91
            createWorldFile(file, buffer);
90 92
        } catch (IOException e) {
91 93
            throw new CreateException("WLD File", e);
92 94
        }
93 95
    }
94 96

  
95

  
96 97
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.gdal/org.gvsig.raster.gdal.provider/src/main/java/org/gvsig/raster/gdal/provider/RasterGdalGTiffStoreProvider.java
181 181
                Calling this method is generally not sufficient to ensure that the file is in a consistent state. You must call delete() for that
182 182

  
183 183
                */
184
                try {
185
                    gdalDataset.wait();
186
                } catch (InterruptedException e) {
187
                    logger.warn("An error has ocurred waiting for the cache is flushed.", e);
188
                }
184
//                try {
185
//                    gdalDataset.wait();
186
//                } catch (InterruptedException e) {
187
//                    logger.warn("An error has ocurred waiting for the cache is flushed.", e);
188
//                }
189 189
                gdalDataset.delete();
190 190
            }
191 191

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.gdal/org.gvsig.raster.gdal.provider/src/main/java/org/gvsig/raster/gdal/provider/RasterGdalStoreProviderCreate.java
55 55
        if (file.exists() && !overwrite){
56 56
            throw new CreateException("File already exists: "+file.toString(), null);
57 57
        }
58
        Dataset gdalDataset;
59
        if (options.length== 0) {
60
            gdalDataset = gdalDriver.Create(file.getAbsolutePath(),
61
                buffer.getColumns(), buffer.getRows(), buffer.getBandCount());
62
        } else {
63
            gdalDataset =
64
                gdalDriver.Create(file.getAbsolutePath(), buffer.getColumns(),
65
                    buffer.getRows(), buffer.getBandCount(), options);
66
        }
67
        IProjection projection = buffer.getProjection();
58
        Dataset gdalDataset = null;
59
        try {
60
            if (options.length == 0) {
61
                gdalDataset =
62
                    gdalDriver.Create(file.getAbsolutePath(), buffer.getColumns(), buffer.getRows(),
63
                        buffer.getBandCount());
64
            } else {
65
                gdalDataset =
66
                    gdalDriver.Create(file.getAbsolutePath(), buffer.getColumns(), buffer.getRows(),
67
                        buffer.getBandCount(), options);
68
            }
69
            IProjection projection = buffer.getProjection();
68 70

  
69
        if (projection!=null){
70
            String wkt=projection.export(ICRSFactory.FORMAT_WKT_ESRI);
71
            gdalDataset.SetProjection(wkt);
72
        }
73
        gdalDataset.SetGeoTransform(createGeoTransform(buffer));
71
            if (projection != null) {
72
                String wkt = projection.export(ICRSFactory.FORMAT_WKT_ESRI);
73
                gdalDataset.SetProjection(wkt);
74
            }
75
            gdalDataset.SetGeoTransform(createGeoTransform(buffer));
74 76

  
75
        fillDataset(buffer, gdalDataset);
76

  
77
        if (gdalDataset!=null){
77
            fillDataset(buffer, gdalDataset);
78 78
            gdalDataset.FlushCache();
79
        } finally {
80
            if (gdalDataset != null) {
81
                gdalDataset.delete();
82
            }
79 83
        }
80 84
        //Create WLD
81 85
        try {
......
84 88
            throw new CreateException("WLD File", e);
85 89
        }
86 90
    }
87

  
88

  
89

  
90

  
91 91
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.gdal/org.gvsig.raster.gdal.provider/src/main/java/org/gvsig/raster/gdal/provider/RasterGdalFileStoreParameters.java
34 34
import org.gdal.gdal.Dataset;
35 35
import org.gdal.gdal.gdal;
36 36
import org.gdal.gdalconst.gdalconstConstants;
37
import org.slf4j.Logger;
38
import org.slf4j.LoggerFactory;
39

  
37 40
import org.gvsig.fmap.crs.CRSFactory;
38 41
import org.gvsig.fmap.dal.raster.spi.OpenRasterStoreParameters;
39 42
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
40 43
import org.gvsig.tools.dynobject.DynClass_v2;
41
import org.gvsig.tools.dynobject.DynStruct_v2;
42 44
import org.gvsig.tools.dynobject.Tags;
43
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
45 45

  
46 46
/**
47 47
 * Parameters to create a GDAL Provider
......
99 99
        }
100 100
        loadWLD(file);
101 101
        if (getCRS()==null){
102
            Dataset gdalDatasSet = gdal.Open(this.getFile().getAbsolutePath(),gdalconstConstants.GA_ReadOnly);
103
            String projection=gdalDatasSet.GetProjection();
102
            Dataset gdalDataset = null;
103
            try{
104
            gdalDataset = gdal.Open(this.getFile().getAbsolutePath(),gdalconstConstants.GA_ReadOnly);
105
            String projection=gdalDataset.GetProjection();
104 106
            if (StringUtils.isNotEmpty(projection)){
105 107
                ICRSFactory crsFactory = CRSFactory.getCRSFactory();
106 108
                IProjection crs=crsFactory.get(ICRSFactory.FORMAT_WKT, projection);
107 109
                setCRS(crs);
108 110
            }
111
            } finally {
112
                if(gdalDataset!=null){
113
                    gdalDataset.delete();
114
                }
115
            }
109 116
        }
110 117

  
111 118
    }

Also available in: Unified diff