Statistics
| Revision:

gvsig-projects-pool / org.gvsig.vcsgis / trunk / org.gvsig.vcsgis / org.gvsig.vcsgis.lib / org.gvsig.vcsgis.lib.impl / src / main / java / org / gvsig / vcsgis / lib / workspace / tables / LocalRevisionsTable.java @ 3308

History | View | Annotate | Download (9.61 KB)

1
package org.gvsig.vcsgis.lib.workspace.tables;
2

    
3
import java.sql.Timestamp;
4
import javax.json.JsonObject;
5
import org.gvsig.fmap.dal.DALLocator;
6
import org.gvsig.fmap.dal.DataManager;
7
import org.gvsig.fmap.dal.feature.EditableFeatureType;
8
import org.gvsig.fmap.dal.feature.Feature;
9
import org.gvsig.fmap.dal.feature.FeatureStore;
10
import org.gvsig.fmap.dal.feature.FeatureType;
11
import org.gvsig.json.JsonObjectBuilder;
12
import org.gvsig.tools.dataTypes.DataTypes;
13
import org.gvsig.tools.dispose.DisposeUtils;
14
import org.gvsig.tools.dynobject.DynObjectValueItem;
15
import org.gvsig.tools.util.GetItemWithSizeAndIterator64;
16
import static org.gvsig.vcsgis.lib.VCSGisManager.TOPOLOGYPLAN_NOTPASSED;
17
import static org.gvsig.vcsgis.lib.VCSGisManager.TOPOLOGYPLAN_PASSED;
18
import static org.gvsig.vcsgis.lib.VCSGisManager.TOPOLOGYPLAN_UNKNOWN;
19
import org.gvsig.vcsgis.lib.VCSGisRevision;
20
import org.gvsig.vcsgis.lib.VCSGisRevisionImpl;
21
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
22

    
23
/**
24
 *
25
 * @author gvSIG Team
26
 */
27
@SuppressWarnings("UseSpecificCatch")
28
public class LocalRevisionsTable extends AbstractTable {
29

    
30
    public static final String TABLE_NAME = "VCSGIS_LOCALREVISIONS";
31

    
32
    private static final String COD_REVISION = "COD_REVISION";
33
    private static final String COD_USER = "COD_USER";
34
    public static final String COD_ENTITY = "COD_ENTITY";
35
    private static final String REVISION_NUMBER = "REV_NUMBER";
36
    private static final String REVISION_COMMENT = "REV_COMMENT";
37
    private static final String REVISION_EFECTIVEDATE = "REV_EFECTIVEDATE";
38
    private static final String REVISION_DATE = "REV_OPERATIONDATE";
39
    private static final String REVISION_TAGS = "REV_TAGS";
40
    private static final String REVISION_GROUP = "REV_IDENTIFIER";
41
    private static final String REVISION_TOPOLOGYPLAN = "REV_TOPPLAN";
42

    
43
    public static class LocalRevisionRow extends AbstractRow implements VCSGisRevision {
44

    
45
        public LocalRevisionRow(VCSGisWorkspace workspace) {
46
            super(workspace, TABLE_NAME, COD_REVISION);
47
        }
48
        
49
        public LocalRevisionRow(VCSGisWorkspace workspace, Feature feature) {
50
            super(workspace, TABLE_NAME, COD_REVISION, feature);
51
        }
52

    
53
        public String getGroup() {
54
            return this.getString(REVISION_GROUP);
55
        }
56

    
57
        @Override
58
        public String getUserCode() {
59
            return this.getString(COD_USER);
60
        }
61

    
62
        @Override
63
        public String getRevisionCode() {
64
            return this.getCode();
65
        }
66
        
67
        @Override
68
        public Timestamp getRevisionDate() {
69
            return (Timestamp) this.getTimestamp(REVISION_DATE);
70
        }
71
        
72
        @Override
73
        public Timestamp getEfectiveDate() {
74
            return (Timestamp) this.getTimestamp(REVISION_EFECTIVEDATE);
75
        }
76
        
77
        @Override
78
        public int getTopologyPlan() {
79
            return this.getInt(REVISION_TOPOLOGYPLAN);
80
        }
81
        
82
        @Override
83
        public String getTags() {
84
            return this.getString(REVISION_TAGS);
85
        }
86
        
87
        @Override
88
        public long getNumber() {
89
            return this.getLong(REVISION_NUMBER);
90
        }
91
        
92
        @Override
93
        public String getComment() {
94
            return this.getString(REVISION_COMMENT);
95
        }
96

    
97
        @Override
98
        public String getEntityCode() {
99
            return this.getString(COD_ENTITY);
100
        }
101
        
102
        public void setGroup(String group) {
103
            this.set(REVISION_GROUP, group);
104
        }
105
        
106
        public void setUserCode(String code) {
107
            this.set(COD_USER, code);
108
        }
109
        
110
        public void setRevisionDate(Timestamp date) {
111
            this.set(REVISION_DATE, date);
112
        }
113
        
114
        public void setEfectiveDate(Timestamp date) {
115
            this.set(REVISION_EFECTIVEDATE, date);
116
        }
117
        
118
        public void setRevisionDate(java.util.Date date) {
119
            Timestamp tm = new Timestamp(date.getTime());
120
            this.set(REVISION_DATE, tm);
121
        }
122
        
123
        public void setEfectiveDate(java.util.Date date) {
124
            Timestamp tm = new Timestamp(date.getTime());
125
            this.set(REVISION_EFECTIVEDATE, tm);
126
        }
127
        
128
        public void setTopologyPlan(int topologyPlan) {
129
            this.set(REVISION_TOPOLOGYPLAN,topologyPlan);
130
        }
131

    
132
        public void setTags(String tags) {
133
            this.set(REVISION_TAGS,tags);
134
        }
135

    
136
        public void setComment(String comment) {
137
            this.set(REVISION_COMMENT, comment);
138
        }
139

    
140
        public void setEntityCode(String code) {
141
            this.set(COD_ENTITY, code);
142

    
143
        }
144

    
145
        public void setNumber(long number) {
146
            this.set(REVISION_NUMBER, number);
147

    
148
        }
149

    
150
        @Override
151
        public void copyFrom(VCSGisRevision other) {
152
            this.setCode(other.getRevisionCode());
153
            this.setComment(other.getComment());
154
            this.setEfectiveDate(other.getEfectiveDate());
155
            this.setEntityCode(other.getEntityCode());
156
            this.setRevisionDate(other.getRevisionDate());
157
            this.setTags(other.getTags());
158
            this.setUserCode(other.getUserCode());
159
            this.setNumber(other.getNumber());
160
            this.setTopologyPlan(other.getTopologyPlan());
161
        }
162

    
163
        @Override
164
        public LocalRevisionRow getValue() {
165
            return this;
166
        }
167

    
168
        @Override
169
        public String getLabel() {
170
            return VCSGisRevisionImpl.getLabel(this);
171
        }
172

    
173
        @Override
174
        public JsonObject toJson() {
175
            return this.toJsonBuilder().build();
176
        }
177

    
178
        @Override
179
        public JsonObjectBuilder toJsonBuilder() {
180
            return VCSGisRevisionImpl.toJsonBuilder(this);
181
        }
182
        
183
        @Override
184
        public String toString() {
185
            return VCSGisRevisionImpl.toString(this);
186
        }
187

    
188
        public boolean exists(FeatureStore store) {
189
            try {
190
                Feature f = store.findFirst("\""+COD_REVISION+"\" = '"+this.getCode()+"'");
191
                return f!=null;
192
            } catch (Exception ex) {
193
                throw new RuntimeException("Can't check if revision exists.", ex);
194
            }
195
        }
196
        
197
    }
198
    
199
    public LocalRevisionsTable() {
200
        super(TABLE_NAME, featureType());
201
    }
202

    
203
    public static final FeatureType featureType() {
204
        DataManager dataManager = DALLocator.getDataManager();
205
        EditableFeatureType ft = dataManager.createFeatureType();
206
        ft.setLabel("VCSGIS Revisions");
207
        ft.getTags().set("ID", TABLE_NAME);
208
        ft.add(COD_REVISION, DataTypes.STRING)
209
                .setSize(40)
210
                .setIsPrimaryKey(true)
211
                .setLabel("Code");        
212
        ft.add(COD_USER, DataTypes.STRING)
213
                .setIsIndexed(true)
214
                .setAllowIndexDuplicateds(true)
215
                .setSize(40)
216
                .setLabel("Cod. user");
217
        ft.add(COD_ENTITY, DataTypes.STRING)
218
                .setIsIndexed(true)
219
                .setAllowIndexDuplicateds(true)
220
                .setSize(40)
221
                .setLabel("Cod. entity");
222
        ft.add(REVISION_GROUP, DataTypes.STRING)
223
                .setIsIndexed(true)
224
                .setAllowIndexDuplicateds(true)
225
                .setSize(40)
226
                .setLabel("Group");
227
        ft.add(REVISION_DATE, DataTypes.TIMESTAMP)
228
                .setIsIndexed(true)
229
                .setAllowIndexDuplicateds(true)
230
                .setLabel("Revision date");
231
        ft.add(REVISION_EFECTIVEDATE, DataTypes.TIMESTAMP)
232
                .setIsIndexed(true)
233
                .setAllowIndexDuplicateds(true)
234
                .setLabel("Efective date");
235
        ft.add(REVISION_NUMBER, DataTypes.LONG)
236
                .setIsIndexed(true)
237
                .setAllowIndexDuplicateds(true)
238
                .setLabel("Revision number");
239
        ft.add(REVISION_TOPOLOGYPLAN, DataTypes.INT)
240
                .setIsIndexed(false)
241
                .setLabel("Topology plan")
242
                .setAvailableValues(new DynObjectValueItem[] {
243
                    new DynObjectValueItem(TOPOLOGYPLAN_UNKNOWN, "Unknown"),
244
                    new DynObjectValueItem(TOPOLOGYPLAN_PASSED, "Passed"),
245
                    new DynObjectValueItem(TOPOLOGYPLAN_NOTPASSED, "Not passed"),
246
                });
247
        ft.add(REVISION_TAGS, DataTypes.STRING)
248
                .setSize(200)
249
                .setLabel("Tags");
250
        ft.add(REVISION_COMMENT, DataTypes.STRING)
251
                .setSize(200)
252
                .setLabel("Comment");
253
        
254
        return ft.getNotEditableCopy();
255
    }
256

    
257
    public LocalRevisionsTable(String tableName, FeatureType featureType) {
258
        super(tableName, featureType);
259
    }
260

    
261
    public void deleteByEntityCodeAndGroup(VCSGisWorkspace workspace, FeatureStore store, String entityCode, String group) {
262
        store.delete("\""+COD_ENTITY+"\" = '"+entityCode+"' AND \""+REVISION_GROUP+"\" = '"+group+"'");
263
    }
264

    
265
    public GetItemWithSizeAndIterator64<Feature> getRevisions(VCSGisWorkspace workspace, String entityCode, String group) {
266
        FeatureStore store = null;
267
        try {
268
            store = workspace.getFeatureStore(TABLE_NAME);
269
            GetItemWithSizeAndIterator64<Feature> revisions = store.getFeatures64(
270
                    "\""+COD_ENTITY+"\" = '"+entityCode+"' AND \""+REVISION_GROUP+"\" = '"+group+"'",
271
                    "\""+REVISION_NUMBER+"\"", 
272
                    true
273
            );
274
            return revisions;
275
        } catch (Exception ex) {
276
            throw new RuntimeException("Can't retrieve changes by entity.", ex);
277
        } finally {
278
            if( store!=null ) {
279
                DisposeUtils.dispose(store);
280
            }
281
        }
282

    
283
        
284
    }
285
}