Revision 47606 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.sqlite/org.gvsig.sqlite.provider/src/main/java/org/gvsig/sqlite/dal/SQLiteExplorer.java

View differences:

SQLiteExplorer.java
1 1
package org.gvsig.sqlite.dal;
2 2

  
3
import java.io.File;
4
import java.sql.Connection;
5
import java.sql.SQLException;
6 3
import java.sql.Statement;
7 4
import java.util.ArrayList;
8 5
import java.util.List;
9
import java.util.logging.Level;
10
import java.util.logging.Logger;
11
import org.apache.commons.lang3.StringUtils;
6
import java.util.Objects;
12 7
import org.cresques.cts.IProjection;
13 8
import org.gvsig.fmap.dal.DALLocator;
14 9
import org.gvsig.fmap.dal.DataManager;
......
20 15
import org.gvsig.fmap.dal.exception.RemoveException;
21 16
import org.gvsig.fmap.dal.feature.EditableFeatureType;
22 17
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
23
import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
18
import org.gvsig.fmap.dal.feature.spi.LocalTransaction;
24 19
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
25 20
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
26 21
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
27 22
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
28
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
29 23
import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection;
30 24
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
31 25
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
......
33 27
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCServerExplorerBase;
34 28
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
35 29
import org.gvsig.fmap.geom.DataTypes;
36
import org.gvsig.sqlite.dal.geopackage.GeopackageGeometryColumns;
37 30
import org.gvsig.sqlite.dal.geopackage.GeopackageSpatialRefSys;
38 31
import org.gvsig.sqlite.dal.geopackage.GeopackageUtils;
39 32
import org.gvsig.sqlite.dal.geopackage.index.GeopackageIndexRTree;
40
import org.gvsig.sqlite.dal.operations.SQLiteOperationsFactory;
41 33
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
42 34

  
43 35
/**
......
79 71

  
80 72
    @Override
81 73
    public boolean add(String providerName, NewDataStoreParameters theParams, boolean overwrite) throws DataException {
82
        EditableFeatureType feat = ((JDBCNewStoreParameters)theParams).getDefaultFeatureType();
83
        if(feat != null){
84
            FeatureAttributeDescriptor geomAttr = feat.getDefaultGeometryAttribute();
85
            if(geomAttr != null){
86
                IProjection proj = geomAttr.getSRS();
87
                if(proj != null){
88
                    GeopackageSpatialRefSys refSys = GeopackageUtils.getSpatialRefSys(proj);
89
                    refSys.save(this.getHelper());
74
        LocalTransaction trans = new LocalTransaction(null, this.getTransaction());
75
        try {
76
            trans.begin();
77
            trans.add(this);
78
            EditableFeatureType feat = ((JDBCNewStoreParameters) theParams).getDefaultFeatureType();
79
            if (feat != null) {
80
                FeatureAttributeDescriptor geomAttr = feat.getDefaultGeometryAttribute();
81
                if (geomAttr != null) {
82
                    IProjection proj = geomAttr.getSRS();
83
                    if (proj != null) {
84
                        GeopackageSpatialRefSys refSys = GeopackageUtils.getSpatialRefSys(proj);
85
                        refSys.save(this.getHelper());
86
                    }
87
                    if (geomAttr.isIndexed()) {
88
                        GeopackageIndexRTree index = new GeopackageIndexRTree();
89
                        index.setHasIndex(geomAttr, true);
90
                    }
90 91
                }
91 92
            }
93
            boolean x = super.add(providerName, theParams, overwrite);
94
            trans.commit();
95
            return x;
96
        } catch (Exception ex) {
97
            trans.abortQuietly();
98
            throw ex;
99
        } finally {
100
            trans.closeQuietly();
92 101
        }
93
        return super.add(providerName, theParams, overwrite);
94 102
    }
95 103

  
96 104
    @Override
97 105
    public void remove(DataStoreParameters theParams) throws RemoveException {
106
        LocalTransaction trans = new LocalTransaction(null, this.getTransaction());
107
        try {
108
            trans.begin();
109
            trans.add(this);
110
            DataManager dataManager = DALLocator.getDataManager();
111
            EditableFeatureType type = dataManager.createFeatureType();
98 112

  
99
        DataManager dataManager = DALLocator.getDataManager();
100
        EditableFeatureType type = dataManager.createFeatureType();
113
            OperationsFactory operations = getHelper().getOperations();
114
            OperationsFactory.TableReference table = this.getHelper().getOperations().createTableReference(((JDBCStoreParameters) theParams));
115
            FetchFeatureTypeOperation operation = operations.createFetchFeatureType(type, table, null, null, null);
116
            operation.perform();
101 117

  
102
        OperationsFactory operations = getHelper().getOperations();
103
        OperationsFactory.TableReference table = this.getHelper().getOperations().createTableReference(((JDBCStoreParameters) theParams));
104
        FetchFeatureTypeOperation operation = operations.createFetchFeatureType(type, table, null, null, null);
105
        operation.perform();
106

  
107
        List<String> sqls = new ArrayList<>();
108
        for (FeatureAttributeDescriptor attr : type) {
109
            if (attr.getDataType().getType() == DataTypes.GEOMETRY) {
110
                GeopackageIndexRTree index = new GeopackageIndexRTree();
111
                sqls.addAll(index.getRemoveIndexSQL(table.getTable(), attr.getName()));
118
            List<String> sqls = new ArrayList<>();
119
            for (FeatureAttributeDescriptor attr : type) {
120
                if (attr.getDataType().getType() == DataTypes.GEOMETRY) {
121
                    GeopackageIndexRTree index = new GeopackageIndexRTree();
122
                    sqls.addAll(index.getRemoveIndexSQL(table.getTable(), attr.getName()));
123
                }
112 124
            }
113
        }
114
        JDBCConnection conn = null;
115
        Statement st = null;
116
        try {
117
            conn = this.getHelper().getConnection();
118
            st = conn.createStatement();
119
            for (String sql : sqls) {
120
                JDBCUtils.execute(st, sql);
125
            JDBCConnection conn = null;
126
            Statement st = null;
127
            try {
128
                conn = this.getHelper().getConnection();
129
                st = conn.createStatement();
130
                for (String sql : sqls) {
131
                    JDBCUtils.execute(st, sql);
132
                }
133
            } catch (Exception ex) {
134
                throw new RemoveException(table.getTable(), ex);
135
            } finally {
136
                JDBCUtils.closeQuietly(st);
137
//            JDBCUtils.closeQuietly(conn.get());
121 138
            }
139
            super.remove(theParams); //To change body of generated methods, choose Tools | Templates.
140
            trans.commit();
141

  
142
        } catch (RemoveException ex) {
143
            trans.abortQuietly();
144
            throw ex;
122 145
        } catch (Exception ex) {
123
            throw new RemoveException(table.getTable(), ex);
146
            trans.abortQuietly();
147
            throw new RemoveException("Can't remove "+Objects.toString(theParams), ex);
124 148
        } finally {
125
            JDBCUtils.closeQuietly(st);
126
//            JDBCUtils.closeQuietly(conn.get());
149
            trans.closeQuietly();
127 150
        }
128
        super.remove(theParams); //To change body of generated methods, choose Tools | Templates.
151

  
129 152
    }
130 153
    
131 154
    

Also available in: Unified diff