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 @ 3308

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

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

    
278
    public static void fromJson(VCSGisEntityEditable entity, JsonObject jsonEntity) {
279
        if( jsonEntity.containsKey(ENTITY_DATATABLENAME) ) {
280
            entity.setDataTableName(jsonEntity.getString(ENTITY_DATATABLENAME));
281
        }
282
        if( jsonEntity.containsKey(ENTITY_DESCRIPTION) ) {
283
            entity.setDescription(jsonEntity.getString(ENTITY_DESCRIPTION, null));
284
        }
285
        if( jsonEntity.containsKey(ENTITY_CODE) ) {
286
            entity.setEntityCode(jsonEntity.getString(ENTITY_CODE, null));
287
        }
288
        if( jsonEntity.containsKey(ENTITY_NAME) ) {
289
            entity.setEntityName(jsonEntity.getString(ENTITY_NAME, null));
290
        }
291
        if( jsonEntity.containsKey(ENTITY_FEATUREIDFIELDNAME) ) {
292
            entity.setFeatureIdFieldName(jsonEntity.getString(ENTITY_FEATUREIDFIELDNAME, null));
293
        }
294
        if( jsonEntity.containsKey(ENTITY_FEATURETYPEASJSON) ) {
295
            entity.setFeatureTypeAsJson(jsonEntity.getString(ENTITY_FEATURETYPEASJSON, null));
296
        }
297
        if( jsonEntity.containsKey(ENTITY_FIELDFORLABEL) ) {
298
            entity.setFieldForLabel(jsonEntity.getString(ENTITY_FIELDFORLABEL, null));
299
        }
300
        if( jsonEntity.containsKey(ENTITY_GEOMETRYFIELDNAME) ) {
301
            entity.setGeometryFieldName(jsonEntity.getString(ENTITY_GEOMETRYFIELDNAME, null));
302
        }
303
        if( jsonEntity.containsKey(ENTITY_REVISIONCODE) ) {
304
            entity.setRepositoryRevisionCode(jsonEntity.getString(ENTITY_REVISIONCODE, null));
305
        }
306
        if( jsonEntity.containsKey(ENTITY_TOPOLOGYPLANCODE) ) {
307
            entity.setTopologyPlanCode(jsonEntity.getString(ENTITY_TOPOLOGYPLANCODE, null));
308
        }
309
        if( jsonEntity.containsKey(ENTITY_USERCODE) ) {
310
            entity.setUserCode(jsonEntity.getString(ENTITY_USERCODE, null));                
311
        }
312
        if( jsonEntity.containsKey(ENTITY_CATEGORY) ) {
313
            entity.setCategory(jsonEntity.getString(ENTITY_CATEGORY, null));                
314
        }
315
        if( jsonEntity.containsKey(ENTITY_LABEL) ) {
316
            entity.setLabel(jsonEntity.getString(ENTITY_LABEL, null));                
317
        }
318
        if( jsonEntity.containsKey(ENTITY_AUTHORIZATIONS) ) {
319
            entity.setAuthorizations(jsonEntity.getString(ENTITY_AUTHORIZATIONS, null));                
320
        }
321
        if( jsonEntity.containsKey(ENTITY_TOPOLOGYPLANMODE) ) {
322
            entity.setTopologyPlanMode(jsonEntity.getInt(ENTITY_TOPOLOGYPLANMODE, TOPOLOGYPLAN_MODE_RECOMMENDED));                
323
        }
324
    }
325
    
326
    public static boolean isAuthoriced(VCSGisEntity entity, String operation, String userid) {
327
        String s = entity.getAuthorizations();
328
        if( StringUtils.isBlank(s) ) {
329
            return true;
330
        }
331
        JsonObject authorizations = Json.createObject(s);
332
        if( authorizations==null ) {
333
            return false;
334
        }
335
        if( StringUtils.isBlank(userid) || StringUtils.isBlank(operation)) {
336
            return false;
337
        }
338
        JsonArray op = authorizations.getJsonArray(operation);
339
        if( op == null ) {
340
           return false; 
341
        }
342
        userid = userid.toLowerCase();
343
        if( op.contains(userid) ) {
344
            return true;
345
        }
346
        return false;
347
    }
348

    
349
    public static String getOperationLabel(int operation) {
350
        return OPERATION_LABELS.getOrDefault(operation, "unknown");
351
    }
352
    public static String getStateLabel(int state) {
353
        return STATE_LABELS.getOrDefault(state, "unknown");
354
    }
355
    
356
    @SuppressWarnings("null")
357
    private static Map<String,String> getSqlTemplates(String name) {
358
      final int SEARCHING_ITEM = 0;
359
      final int READING_ITEM = 1;
360
      
361
      InputStream sqls = VCSGisUtils.class.getResourceAsStream("/org/gvsig/vcsgis/lib/"+name+".sql"); // org.gvsig.vcsgis.lib
362
      Map<String,String> expecteds = new HashMap<>();
363
      List<String> lines;
364
        try {
365
            lines = IOUtils.readLines(sqls);
366
        } catch (IOException ex) {
367
            throw new RuntimeException("Can't read sql templates for provider "+name, ex);
368
        }
369

    
370
      StringBuilder sb = null;
371
      String currentItem = null;
372
      int lineno = 1;
373
      int state = SEARCHING_ITEM;
374
      for (String line : lines) {
375
          line = line + "\n";
376
          switch(state) {
377
            case SEARCHING_ITEM:
378
                if( line.toLowerCase().startsWith("@begin ") ) {
379
                    currentItem = line.substring(7).trim();
380
                    sb = new StringBuilder();
381
                    state = READING_ITEM;
382
                } else if( line.toLowerCase().startsWith("-- ") ) {
383
                    // do nothing skip comment
384
                } else if( !StringUtils.isBlank(line) ) {
385
                    throw new IllegalStateException("Syntax error at '"+name+"', line "+lineno+ ".");
386
                }
387
                break;
388
            case READING_ITEM:
389
                if( line.toLowerCase().startsWith("@end ") ) {
390
                    if( !StringUtils.equals(currentItem,line.substring(5).trim()) ) {
391
                      throw new IllegalStateException("Syntax error at '"+name+"', line "+lineno+ ", expected @end "+currentItem+", and found "+line+".");
392
                    }
393
                    String s = sb.toString();
394
                    if( s.endsWith("\n") ) {
395
                        s = s.substring(0, s.length()-1);
396
                    }
397
                    expecteds.put(currentItem, s);
398
                    state = SEARCHING_ITEM;
399
                    
400
                } else if( line.toLowerCase().startsWith("-- ") ) {
401
                    // do nothing skip comment
402
                } else {
403
                    sb.append(line);
404
                }
405
                break;
406
        }
407
        lineno++;
408
      }
409
      if( state!=SEARCHING_ITEM ) {
410
          throw new IllegalStateException("Syntax error at '"+name+"', expected @end "+currentItem+" and found EOF .");
411
      }
412
      return expecteds;
413
    }
414
    
415
    public static String getSqlTemplate(String providerName, String sqlId){
416
        if(SQL_TEMPLATES_BY_PROVIDER.get(providerName) == null) {
417
            SQL_TEMPLATES_BY_PROVIDER.put(providerName, getSqlTemplates(providerName));
418
        }
419
        return SQL_TEMPLATES_BY_PROVIDER.get(providerName).get(sqlId);
420
    }
421
    
422
}