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 / VCSGisUtils.java @ 3315

History | View | Annotate | Download (22.5 KB)

1
/*
2
 * gvSIG. Desktop Geographic Information System.
3
 * 
4
 * Copyright (C) 2007-2020 gvSIG Association.
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License 
17
 * along with this program. If not, see <https://www.gnu.org/licenses/>. 
18
 * 
19
 * For any additional information, do not hesitate to contact us
20
 * at info AT gvsig.com, or visit our website www.gvsig.com.
21
 */
22

    
23
package org.gvsig.vcsgis.lib;
24

    
25
import java.io.IOException;
26
import java.io.InputStream;
27
import java.security.MessageDigest;
28
import java.util.HashMap;
29
import java.util.List;
30
import java.util.Map;
31
import java.util.function.Predicate;
32
import javax.json.JsonArray;
33
import javax.json.JsonObject;
34
import org.apache.commons.io.IOUtils;
35
import org.apache.commons.lang3.StringUtils;
36
import org.gvsig.fmap.dal.feature.Feature;
37
import org.gvsig.json.Json;
38
import org.gvsig.json.JsonObjectBuilder;
39
import org.gvsig.tools.ToolsLocator;
40
import org.gvsig.tools.util.MapBuilder;
41
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_AUTHENTICATION_EXPIRED;
42
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_ADD_ENTITY_WITHOUT_PRIMARY_KEY;
43
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_ADD_LAYER;
44
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_AUTHENTICATE_USER;
45
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_BUILD_REQUEST_RESPONSE;
46
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_CHECKOUT;
47
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_COMMIT;
48
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_COMMIT_WITH_FEATURE_CODE_BLANK;
49
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_COMMIT_WORKSPACE_OUTDATED;
50
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_CREATE_TABLE;
51
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_CREATE_TABLE_CHANGES;
52
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_CREATE_TABLE_CONFIG;
53
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_CREATE_TABLE_ENTITIES;
54
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_EXECUTE_REQUEST;
55
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_HANDLE_REQUEST;
56
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_INITIALIZE_REPOSITORY;
57
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_INSERT_CHANGE;
58
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_INSERT_ENTITIES;
59
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_INSERT_FEATURES;
60
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_OPEN_CHANGES;
61
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_OPEN_ENTITIES;
62
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_OPEN_STORE;
63
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_OPEN_WORKSPACE;
64
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_OPEN_WORKSPACE_SERVEREXPLORER;
65
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_PREPARE_UPDATE;
66
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_REMOVE_CHANGES;
67
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_REMOVE_ENTITY;
68
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_RETRIEVE_ENTITIES;
69
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_RETRIEVE_SOURCE_FEATURES;
70
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_RETRIEVE_TOPOLOGYPLANS;
71
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_RETRIEVE_USERS;
72
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_REVERT;
73
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_UPDATE;
74
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_UPDATE_CLEAN;
75
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_CANT_UPDATE_ENTITIES;
76
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_DBFILE_IS_NULL;
77
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_ENTITY_ALREADY_EXISTS;
78
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_ENTITY_NOT_HAS_VCSGISCODE;
79
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_INVALID_AUTHENTICATION_TOKEN;
80
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_INVALID_DATA;
81
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_INVALID_REPOSITORY;
82
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_INVALID_REVISION;
83
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_INVALID_REVISION_FOR_ENTITY;
84
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_INVALID_USERCODE;
85
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_LABEL_IS_NULL;
86
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_NO_ERROR;
87
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_STORE_NOT_IN_VERSION_CONTROL;
88
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_USER_NOT_AUTHORIZED;
89
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_WSEXPLORER_IS_NULL;
90
import static org.gvsig.vcsgis.lib.VCSGisManager.OP_ADD_ENTITY;
91
import static org.gvsig.vcsgis.lib.VCSGisManager.OP_DELETE;
92
import static org.gvsig.vcsgis.lib.VCSGisManager.OP_INSERT;
93
import static org.gvsig.vcsgis.lib.VCSGisManager.OP_UPDATE;
94
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_CONFLICT;
95
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_LOCAL_MODIFIED;
96
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_LOCAL_NEW;
97
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_LOCAL_OUTDATED;
98
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_LOCAL_OUTDATED_AND_MODIFIED;
99
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_LOCAL_UNMODIFIED;
100
import static org.gvsig.vcsgis.lib.VCSGisManager.TOPOLOGYPLAN_MODE_RECOMMENDED;
101
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspaceEntity;
102

    
103
/**
104
 *
105
 * @author gvSIG Team
106
 */
107
public class VCSGisUtils {
108
    
109
    public static final String ENTITY_CODE = "EntityCode";
110
    public static final String ENTITY_NAME = "EntityName";
111
    public static final String ENTITY_DATATABLENAME = "DataTableName";
112
    public static final String ENTITY_DESCRIPTION = "Description";
113
    public static final String ENTITY_FEATUREIDFIELDNAME = "FeatureIdFieldName";
114
    public static final String ENTITY_FEATURETYPEASJSON = "FeatureTypeAsJson";
115
    public static final String ENTITY_FIELDFORLABEL = "FieldForLabel";
116
    public static final String ENTITY_GEOMETRYFIELDNAME = "GeometryFieldName";
117
    public static final String ENTITY_REVISIONCODE = "RevisionCode";
118
    public static final String ENTITY_TOPOLOGYPLANCODE = "TopologyPlanCode";
119
    public static final String ENTITY_USERCODE = "UserCode";
120
    public static final String ENTITY_CATEGORY = "Category";
121
    public static final String ENTITY_LABEL = "Label";
122
    public static final String ENTITY_AUTHORIZATIONS = "Autorizations";
123
    public static final String ENTITY_TOPOLOGYPLANMODE = "TopologyPlanMode";
124
    public static final String ENTITY_LOCALREVISIONCODE = "LocalRevisionCode";
125
    
126
//    private static final String[] JSONENTITY_ATTRNAMES = new String[] {
127
//        ENTITY_DATATABLENAME, 
128
//        ENTITY_DESCRIPTION, ENTITY_CODE, 
129
//        ENTITY_NAME, 
130
//        ENTITY_FEATUREIDFIELDNAME, 
131
//        ENTITY_FEATURETYPEASJSON, 
132
//        ENTITY_FIELDFORLABEL, 
133
//        ENTITY_GEOMETRYFIELDNAME, 
134
//        ENTITY_REVISIONCODE, 
135
//        ENTITY_TOPOLOGYPLANCODE, 
136
//        ENTITY_USERCODE,
137
//        ENTITY_CATEGORY,
138
//        ENTITY_LABEL
139
//    };
140
    
141
    private static final Map<Integer,String> ERRMSGS = new MapBuilder<>()
142
            .add(ERR_NO_ERROR, "_No_errors")
143
            .add(ERR_DBFILE_IS_NULL, "_dbfile_is_null")
144
            .add(ERR_WSEXPLORER_IS_NULL, "_workspace_explorer_is_null")
145
            .add(ERR_LABEL_IS_NULL, "_label_is_null")
146
            .add(ERR_CANT_OPEN_WORKSPACE, "_Cant_open_workspace")
147
            .add(ERR_CANT_OPEN_WORKSPACE_SERVEREXPLORER, "_Cant_open_workspace")
148
            .add(ERR_STORE_NOT_IN_VERSION_CONTROL, "_Store_not_in_control_version")
149
            .add(ERR_CANT_CREATE_TABLE, "_Cant_create_table")
150
            .add(ERR_CANT_CREATE_TABLE_CONFIG, "_Cant_create_config_table")
151
            .add(ERR_CANT_CREATE_TABLE_ENTITIES, "_Cant_create_table_entities")
152
            .add(ERR_CANT_CREATE_TABLE_CHANGES, "_Cant_create_table_changes")
153
            .add(ERR_ENTITY_ALREADY_EXISTS, "_Entity_already_exists")
154
            .add(ERR_ENTITY_NOT_HAS_VCSGISCODE, "_Entity_has_not_VCSGISCODE")
155
            .add(ERR_CANT_OPEN_ENTITIES, "_Cant_open_entities")
156
            .add(ERR_CANT_INSERT_ENTITIES, "_Cant_insert_entities")
157
            .add(ERR_CANT_OPEN_CHANGES, "_Cant_open_changes")
158
            .add(ERR_CANT_INSERT_CHANGE, "_Cant_insert_change")
159
            .add(ERR_CANT_OPEN_STORE, "_Cant_open_store")
160
            .add(ERR_CANT_RETRIEVE_SOURCE_FEATURES, "_Cant_retrieve_source_features")
161
            .add(ERR_CANT_INSERT_FEATURES, "_Cant_insert_features")
162
            .add(ERR_CANT_COMMIT, "_Cant_commit")
163
            .add(ERR_CANT_COMMIT_WORKSPACE_OUTDATED, "_Cant_commit_workspace_is_out_of_date")
164
            .add(ERR_CANT_CHECKOUT, "_Cant_checkout")
165
            .add(ERR_CANT_UPDATE_ENTITIES, "_Cant_update_entities")
166
            .add(ERR_CANT_PREPARE_UPDATE, "_Cant_prepare_update")
167
            .add(ERR_CANT_UPDATE, "_Cant_update")
168
            .add(ERR_CANT_EXECUTE_REQUEST, "_Cant_execute_request")
169
            .add(ERR_CANT_BUILD_REQUEST_RESPONSE,"_Cant_build_request_response")
170
            .add(ERR_CANT_HANDLE_REQUEST,"_Cant_handle_request")
171
            .add(ERR_CANT_UPDATE_CLEAN,"_Cant_update_clean")
172
            .add(ERR_CANT_COMMIT_WITH_FEATURE_CODE_BLANK,"_Cant_commit_with_feature_code_blank")
173
            .add(ERR_CANT_ADD_ENTITY_WITHOUT_PRIMARY_KEY,"Cant_add_entity_without_primary_key")
174
            .add(ERR_CANT_INITIALIZE_REPOSITORY, "_Cant_initialize_repository")
175
            .add(ERR_INVALID_DATA, "_Data_can_be_empty")
176
            .add(ERR_INVALID_REPOSITORY, "_Invalid_repository")
177
            .add(ERR_INVALID_REVISION, "_Invalid_revision")
178
            .add(ERR_INVALID_REVISION_FOR_ENTITY, "_Invalid_revision_for_entity")
179
            .add(ERR_CANT_RETRIEVE_ENTITIES, "_Cant_retrieve_entities")
180
            .add(ERR_CANT_RETRIEVE_USERS, "_Cant_retrieve_users")
181
            .add(ERR_CANT_RETRIEVE_TOPOLOGYPLANS, "_Cant_retrieve_topologyplans")
182
            .add(ERR_CANT_ADD_LAYER, "_Cant_add_layer_to_view")
183
            .add(ERR_CANT_REMOVE_ENTITY, "_Cant_remove_entity")
184
            .add(ERR_CANT_REMOVE_CHANGES, "_Cant_remove_change")
185
            
186
            .add(ERR_CANT_AUTHENTICATE_USER, "_Cant_authenticate_user")
187
            .add(ERR_INVALID_AUTHENTICATION_TOKEN, "_Invalid_authentication_token")
188
            .add(ERR_USER_NOT_AUTHORIZED, "_User_not_authorized")
189
            .add(ERR_AUTHENTICATION_EXPIRED,"_Authentication_expired")
190
            .add(ERR_INVALID_USERCODE, "_Invalid_user_code")
191
            .add(ERR_CANT_REVERT, "_Cant_revert")
192
            .build();
193
    
194
    private static final Map<Integer,String> OPERATION_LABELS = new MapBuilder<Integer,String>()
195
            .add(OP_DELETE, "Delete")
196
            .add(OP_UPDATE, "Update")
197
            .add(OP_INSERT, "Insert")
198
            .add(OP_ADD_ENTITY, "Add entity")
199
            .build();
200
    
201
    private static final Map<Integer,String> STATE_LABELS = new MapBuilder<Integer,String>()
202
        .add(STATE_LOCAL_UNMODIFIED, "Unmodified")
203
        .add(STATE_LOCAL_NEW, "New")
204
        .add(STATE_LOCAL_MODIFIED, "Modified")
205
        .add(STATE_LOCAL_OUTDATED, "Outdated")
206
        .add(STATE_LOCAL_OUTDATED_AND_MODIFIED, "Outdated and modified")
207
        .add(STATE_CONFLICT, "Conflict")
208
        .build();
209
    
210
    private static final Map<String, Map<String, String>> SQL_TEMPLATES_BY_PROVIDER = new HashMap<>();
211
    
212
    public static String getErrorMessage(int errcode) {
213
        String msg = ERRMSGS.get(errcode);
214
        msg = ToolsLocator.getI18nManager().getTranslation(msg);
215
        return msg;
216
    }
217
    
218
    public static void copy(VCSGisEntity source, VCSGisEntityEditable target, Predicate<String> excludes) {
219
        target.setDataTableName(source.getDataTableName());
220
        target.setDescription(source.getDescription());
221
        target.setEntityCode(source.getEntityCode());
222
        target.setEntityName(source.getEntityName());
223
        target.setFeatureIdFieldName(source.getFeatureIdFieldName());
224
        target.setFeatureTypeAsJson(source.getFeatureTypeAsJson());
225
        target.setFieldForLabel(source.getFieldForLabel());
226
        target.setGeometryFieldName(source.getGeometryFieldName());
227
        target.setRepositoryRevisionCode(source.getRepositoryRevisionCode());
228
        target.setTopologyPlanCode(source.getTopologyPlanCode());
229
        target.setUserCode(source.getUserCode());
230
        target.setCategory(source.getCategory());
231
        target.setLabel(source.getLabel());
232
        target.setAuthorizations(source.getAuthorizations());
233
        target.setTopologyPlanMode(source.getTopologyPlanMode());
234
        if(source instanceof VCSGisWorkspaceEntity && target instanceof VCSGisWorkspaceEntity){
235
            ((VCSGisWorkspaceEntity)target).setLocalRevisionCode(((VCSGisWorkspaceEntity)source).getLocalRevisionCode());
236
        }
237
    }
238
    public static JsonObjectBuilder toJsonBuilder(VCSGisEntity entity, Predicate<String> excludes) {
239
        JsonObjectBuilder jsonEntity = Json.createObjectBuilder();
240
        if( excludes==null || !excludes.test(ENTITY_DATATABLENAME) ) {
241
            jsonEntity.add(ENTITY_DATATABLENAME, entity.getDataTableName());
242
        }
243
        if( excludes==null || !excludes.test(ENTITY_DESCRIPTION) ) {
244
            jsonEntity.add(ENTITY_DESCRIPTION, entity.getDescription());
245
        }
246
        if( excludes==null || !excludes.test(ENTITY_CODE) ) {
247
            jsonEntity.add(ENTITY_CODE, entity.getEntityCode());
248
        }
249
        if( excludes==null || !excludes.test(ENTITY_NAME) ) {
250
            jsonEntity.add(ENTITY_NAME, entity.getEntityName());
251
        }
252
        if( excludes==null || !excludes.test(ENTITY_FEATUREIDFIELDNAME) ) {
253
            jsonEntity.add(ENTITY_FEATUREIDFIELDNAME, entity.getFeatureIdFieldName());
254
        }
255
        if( excludes==null || !excludes.test(ENTITY_FEATURETYPEASJSON) ) {
256
            jsonEntity.add(ENTITY_FEATURETYPEASJSON, entity.getFeatureTypeAsJson());
257
        }
258
        if( excludes==null || !excludes.test(ENTITY_FIELDFORLABEL) ) {
259
            jsonEntity.add(ENTITY_FIELDFORLABEL, entity.getFieldForLabel());
260
        }
261
        if( excludes==null || !excludes.test(ENTITY_GEOMETRYFIELDNAME) ) {
262
            jsonEntity.add(ENTITY_GEOMETRYFIELDNAME, entity.getGeometryFieldName());
263
        }
264
        if( excludes==null || !excludes.test(ENTITY_REVISIONCODE) ) {
265
            jsonEntity.add(ENTITY_REVISIONCODE, entity.getRepositoryRevisionCode());
266
        }
267
        if( excludes==null || !excludes.test(ENTITY_TOPOLOGYPLANCODE) ) {
268
            jsonEntity.add(ENTITY_TOPOLOGYPLANCODE, entity.getTopologyPlanCode());
269
        }
270
        if( excludes==null || !excludes.test(ENTITY_USERCODE) ) {
271
            jsonEntity.add(ENTITY_USERCODE, entity.getUserCode());
272
        }
273
        if( excludes==null || !excludes.test(ENTITY_CATEGORY) ) {
274
            jsonEntity.add(ENTITY_CATEGORY, entity.getCategory());
275
        }
276
        if( excludes==null || !excludes.test(ENTITY_LABEL) ) {
277
            jsonEntity.add(ENTITY_LABEL, entity.getLabel());
278
        }
279
        if( excludes==null || !excludes.test(ENTITY_AUTHORIZATIONS) ) {
280
            jsonEntity.add(ENTITY_AUTHORIZATIONS, entity.getAuthorizations());
281
        }
282
        if( excludes==null || !excludes.test(ENTITY_TOPOLOGYPLANMODE) ) {
283
            jsonEntity.add(ENTITY_TOPOLOGYPLANMODE, entity.getTopologyPlanMode());
284
        }
285
        
286
        if( entity instanceof VCSGisWorkspaceEntity ) {
287
            if( excludes==null || !excludes.test(ENTITY_LOCALREVISIONCODE) ) {
288
                jsonEntity.add(ENTITY_LOCALREVISIONCODE, ((VCSGisWorkspaceEntity) entity).getLocalRevisionCode());
289
            }
290
        }
291

    
292
        
293
        return jsonEntity;
294
    }
295

    
296
    public static void fromJson(VCSGisEntityEditable entity, JsonObject jsonEntity) {
297
        if( jsonEntity.containsKey(ENTITY_DATATABLENAME) ) {
298
            entity.setDataTableName(jsonEntity.getString(ENTITY_DATATABLENAME));
299
        }
300
        if( jsonEntity.containsKey(ENTITY_DESCRIPTION) ) {
301
            entity.setDescription(jsonEntity.getString(ENTITY_DESCRIPTION, null));
302
        }
303
        if( jsonEntity.containsKey(ENTITY_CODE) ) {
304
            entity.setEntityCode(jsonEntity.getString(ENTITY_CODE, null));
305
        }
306
        if( jsonEntity.containsKey(ENTITY_NAME) ) {
307
            entity.setEntityName(jsonEntity.getString(ENTITY_NAME, null));
308
        }
309
        if( jsonEntity.containsKey(ENTITY_FEATUREIDFIELDNAME) ) {
310
            entity.setFeatureIdFieldName(jsonEntity.getString(ENTITY_FEATUREIDFIELDNAME, null));
311
        }
312
        if( jsonEntity.containsKey(ENTITY_FEATURETYPEASJSON) ) {
313
            entity.setFeatureTypeAsJson(jsonEntity.getString(ENTITY_FEATURETYPEASJSON, null));
314
        }
315
        if( jsonEntity.containsKey(ENTITY_FIELDFORLABEL) ) {
316
            entity.setFieldForLabel(jsonEntity.getString(ENTITY_FIELDFORLABEL, null));
317
        }
318
        if( jsonEntity.containsKey(ENTITY_GEOMETRYFIELDNAME) ) {
319
            entity.setGeometryFieldName(jsonEntity.getString(ENTITY_GEOMETRYFIELDNAME, null));
320
        }
321
        if( jsonEntity.containsKey(ENTITY_REVISIONCODE) ) {
322
            entity.setRepositoryRevisionCode(jsonEntity.getString(ENTITY_REVISIONCODE, null));
323
        }
324
        if( jsonEntity.containsKey(ENTITY_TOPOLOGYPLANCODE) ) {
325
            entity.setTopologyPlanCode(jsonEntity.getString(ENTITY_TOPOLOGYPLANCODE, null));
326
        }
327
        if( jsonEntity.containsKey(ENTITY_USERCODE) ) {
328
            entity.setUserCode(jsonEntity.getString(ENTITY_USERCODE, null));                
329
        }
330
        if( jsonEntity.containsKey(ENTITY_CATEGORY) ) {
331
            entity.setCategory(jsonEntity.getString(ENTITY_CATEGORY, null));                
332
        }
333
        if( jsonEntity.containsKey(ENTITY_LABEL) ) {
334
            entity.setLabel(jsonEntity.getString(ENTITY_LABEL, null));                
335
        }
336
        if( jsonEntity.containsKey(ENTITY_AUTHORIZATIONS) ) {
337
            entity.setAuthorizations(jsonEntity.getString(ENTITY_AUTHORIZATIONS, null));                
338
        }
339
        if( jsonEntity.containsKey(ENTITY_TOPOLOGYPLANMODE) ) {
340
            entity.setTopologyPlanMode(jsonEntity.getInt(ENTITY_TOPOLOGYPLANMODE, TOPOLOGYPLAN_MODE_RECOMMENDED));                
341
        }
342
        if( entity instanceof VCSGisWorkspaceEntity ) {
343
            if( jsonEntity.containsKey(ENTITY_LOCALREVISIONCODE) ) {
344
                ((VCSGisWorkspaceEntity) entity).setLocalRevisionCode(jsonEntity.getString(ENTITY_LOCALREVISIONCODE, null));                
345
            }
346
        }
347
    }
348
    
349
    public static boolean isAuthoriced(VCSGisEntity entity, String operation, String userid) {
350
        String s = entity.getAuthorizations();
351
        if( StringUtils.isBlank(s) ) {
352
            return true;
353
        }
354
        JsonObject authorizations = Json.createObject(s);
355
        if( authorizations==null ) {
356
            return false;
357
        }
358
        if( StringUtils.isBlank(userid) || StringUtils.isBlank(operation)) {
359
            return false;
360
        }
361
        JsonArray op = authorizations.getJsonArray(operation.toLowerCase());
362
        if( op == null ) {
363
           return false; 
364
        }
365
        userid = userid.toLowerCase();
366
        if( op.contains(userid) ) {
367
            return true;
368
        }
369
        return false;
370
    }
371

    
372
    public static String getOperationLabel(int operation) {
373
        return OPERATION_LABELS.getOrDefault(operation, "unknown");
374
    }
375
    public static String getStateLabel(int state) {
376
        return STATE_LABELS.getOrDefault(state, "unknown");
377
    }
378
    
379
    @SuppressWarnings("null")
380
    private static Map<String,String> getSqlTemplates(String name) {
381
      final int SEARCHING_ITEM = 0;
382
      final int READING_ITEM = 1;
383
      
384
      InputStream sqls = VCSGisUtils.class.getResourceAsStream("/org/gvsig/vcsgis/lib/"+name+".sql"); // org.gvsig.vcsgis.lib
385
      Map<String,String> expecteds = new HashMap<>();
386
      List<String> lines;
387
        try {
388
            lines = IOUtils.readLines(sqls);
389
        } catch (IOException ex) {
390
            throw new RuntimeException("Can't read sql templates for provider "+name, ex);
391
        }
392

    
393
      StringBuilder sb = null;
394
      String currentItem = null;
395
      int lineno = 1;
396
      int state = SEARCHING_ITEM;
397
      for (String line : lines) {
398
          line = line + "\n";
399
          switch(state) {
400
            case SEARCHING_ITEM:
401
                if( line.toLowerCase().startsWith("@begin ") ) {
402
                    currentItem = line.substring(7).trim();
403
                    sb = new StringBuilder();
404
                    state = READING_ITEM;
405
                } else if( line.toLowerCase().startsWith("-- ") ) {
406
                    // do nothing skip comment
407
                } else if( !StringUtils.isBlank(line) ) {
408
                    throw new IllegalStateException("Syntax error at '"+name+"', line "+lineno+ ".");
409
                }
410
                break;
411
            case READING_ITEM:
412
                if( line.toLowerCase().startsWith("@end ") ) {
413
                    if( !StringUtils.equals(currentItem,line.substring(5).trim()) ) {
414
                      throw new IllegalStateException("Syntax error at '"+name+"', line "+lineno+ ", expected @end "+currentItem+", and found "+line+".");
415
                    }
416
                    String s = sb.toString();
417
                    if( s.endsWith("\n") ) {
418
                        s = s.substring(0, s.length()-1);
419
                    }
420
                    expecteds.put(currentItem, s);
421
                    state = SEARCHING_ITEM;
422
                    
423
                } else if( line.toLowerCase().startsWith("-- ") ) {
424
                    // do nothing skip comment
425
                } else {
426
                    sb.append(line);
427
                }
428
                break;
429
        }
430
        lineno++;
431
      }
432
      if( state!=SEARCHING_ITEM ) {
433
          throw new IllegalStateException("Syntax error at '"+name+"', expected @end "+currentItem+" and found EOF .");
434
      }
435
      return expecteds;
436
    }
437
    
438
    public static String getSqlTemplate(String providerName, String sqlId){
439
        if(SQL_TEMPLATES_BY_PROVIDER.get(providerName) == null) {
440
            SQL_TEMPLATES_BY_PROVIDER.put(providerName, getSqlTemplates(providerName));
441
        }
442
        return SQL_TEMPLATES_BY_PROVIDER.get(providerName).get(sqlId);
443
    }
444
    
445
    public static void updateMessageDigest(MessageDigest md, Feature f, String fieldName) {
446
        String s = f.getString(fieldName);
447
        if( s!=null ) {
448
            md.update(s.getBytes());
449
        }
450
    }
451
    
452
}