Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.api / src / main / java / org / gvsig / fmap / dal / DataManager.java @ 46338

History | View | Annotate | Download (23.3 KB)

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

    
25
import java.io.File;
26
import java.util.List;
27
import java.util.Map;
28
import java.util.Set;
29
import java.util.function.Predicate;
30
import javax.json.JsonObject;
31
import org.gvsig.expressionevaluator.Expression;
32
import org.gvsig.expressionevaluator.ExpressionBuilder;
33

    
34
import org.gvsig.fmap.dal.exception.DataException;
35
import org.gvsig.fmap.dal.exception.InitializeException;
36
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
37
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
38
import org.gvsig.fmap.dal.expressionevaluator.DALExpressionBuilder;
39
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
40
import org.gvsig.fmap.dal.feature.EditableFeatureType;
41
import org.gvsig.fmap.dal.feature.Feature;
42
import org.gvsig.fmap.dal.feature.FeatureIndex;
43
import org.gvsig.fmap.dal.feature.FeatureQuery;
44
import org.gvsig.fmap.dal.feature.FeatureStore;
45
import org.gvsig.fmap.dal.feature.FeatureType;
46
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
47
import org.gvsig.fmap.dal.resource.ResourceManager;
48
import org.gvsig.tools.dataTypes.DataType;
49
import org.gvsig.tools.dynobject.DynObject;
50
import org.gvsig.tools.dynobject.DynStruct;
51
import org.gvsig.tools.dynobject.Tags;
52
import org.gvsig.tools.evaluator.Evaluator;
53
import org.gvsig.tools.exception.BaseException;
54
import org.gvsig.tools.service.spi.Services;
55
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
56
import org.gvsig.fmap.dal.feature.DataProfile;
57
import org.gvsig.fmap.dal.feature.EditableFeature;
58
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
59
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
60
import org.gvsig.fmap.dal.feature.FeatureRuleExpression;
61
import org.gvsig.fmap.dal.feature.FeatureSet;
62
import org.gvsig.tools.observer.Observer;
63
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
64
import org.gvsig.tools.util.Factory;
65

    
66
/**
67
 * There are two top level management roles within DAL: data access and resource
68
 * management.
69
 *
70
 * This class is responsible of the data access management role. It provides
71
 * ways for registering and instantiating {@link DataServerExplorer}(s),
72
 * {@link DataStore}(s), {@link Evaluator}(s) and {@link FeatureIndex}(es).
73
 *
74
 * @see ResourceManager
75
 *
76
 */
77
public interface DataManager extends Services {
78

    
79
    public static final int RECOMENDED_SIZE_FOR_CLOB = 4096;
80
    
81
    public static final String CREATE_STORE_AUTHORIZATION = "dal-create-store";
82
    public static final String READ_STORE_AUTHORIZATION = "dal-read-store";
83
    public static final String WRITE_STORE_AUTHORIZATION = "dal-write-store";
84

    
85
    public static final String DAL_SYMBOL_TABLE = "DAL.SymbolTable.Global";
86
//    public static final String DAL_SYMBOL_TABLE_FEATURE = "DAL.SymbolTable.Feature";
87

    
88
    public static final String FUNCTION_FOREING_VALUE = "FOREING_VALUE";
89
    public static final String FUNCTION_SELECT = "SELECT";
90
    public static final String FUNCTION_UPDATE = "UPDATE";
91
    public static final String FUNCTION_SELECT_COUNT = "SELECT_COUNT";
92
    public static final String FUNCTION_EXISTS = "EXISTS";
93
    public static final String FUNCTION_EXISTS_TABLE = "EXISTS_TABLE";
94
    public static final String FUNCTION_ROW_TAG = "ROW_TAG";
95
    public static final String FUNCTION_SET_ROW_TAG = "SET_ROW_TAG";
96
    public static final String FUNCTION_CURRENT_ROW = "CURRENT_ROW";
97
    public static final String FUNCTION_CURRENT_STORE = "CURRENT_STORE";
98
    public static final String FUNCTION_ISSELECTED_CURRENT_ROW = "ISSELECTED_CURRENT_ROW";
99
    public static final String FUNCTION_GEOMETRY = "GEOMETRY";
100
    public static final String FUNCTION_CREATE_IN_MEMORY_TABLE = "CREATE_IN_MEMORY_TABLE";
101
    public static final String FUNCTION_INSERT_INTO_TABLE = "INSERT_INTO_TABLE";
102
    public static final String FUNCTION_CREATE_TABLE = "CREATE_TABLE";
103
    public static final String FUNCTION_CREATE_TABLE_STRUCTURE = "CREATE_TABLE_STRUCTURE";
104
    public static final String FUNCTION_SELECT_FROM_SELECTION = "SELECTFROMSELECTION";
105
    public static final String FUNCTION_SELECT_COUNT_FROM_SELECTION = "SELECTCOUNTFROMSELECTION";
106
    
107
    public static final String DAL_PREFERRED_COLUMNS = "DAL.Preferred.Columns";
108
    
109
    public static final String DAL_USE_LABELS = "DAL.useLabels";
110
    
111
    public static final String DAL_USE_LARGE_SELECTION = "DAL.useLargeSelection";
112
    public static final String DAL_STORE_ENVELOPE = "DAL.storeEnvelope";
113

    
114
    public static final int USE_LABELS_YES = 0;
115
    public static final int USE_LABELS_NO = 1;
116
    public static final int USE_LABELS_BOTH = 2;
117
    
118
    /**
119
     * 
120
     * Returns the default DAL's temporary directory
121
     *
122
     * @return Temporary directory name
123
     * @deprecated use FoldersManager of org.gvsig.tools
124
     */
125
    public String getTemporaryDirectory();
126

    
127
    /*
128
     * ====================================================================
129
     *
130
     * Store related services
131
     */
132
    /**
133
     * Creates, initializes and returns an instance of DataStoreParameters given
134
     * the name with which their provider is registered.
135
     *
136
     * @param name provider name
137
     * @param arguments
138
     * @return the data store parameters
139
     *
140
     * @throws ProviderNotRegisteredException if the memory provider is not
141
     * registered
142
     * @throws InitializeException if there is an error initializing the
143
     * parameters for the memory provider
144
     *
145
     */
146
    public DataStoreParameters createStoreParameters(String name, Object... arguments)
147
            throws InitializeException, ProviderNotRegisteredException;
148
    
149
    public DataStoreParameters createStoreParameters(String name)
150
            throws InitializeException, ProviderNotRegisteredException;
151

    
152
    public DataStoreParameters createStoreParameters(byte[] data);
153

    
154
    /**
155
     * Creates, initializes and fill an instance of DataStoreParameters from the
156
     * tags of the DynStruct passed as parameter.
157
     *
158
     * @param struct structure from which tags were created ths parameters.
159
     * @return the data store parameters
160
     *
161
     * @throws ProviderNotRegisteredException if the memory provider is not
162
     * registered
163
     * @throws InitializeException if there is an error initializing the
164
     * parameters for the memory provider
165
     *
166
     */
167
    public DataStoreParameters createStoreParameters(DynStruct struct)
168
            throws InitializeException, ProviderNotRegisteredException;
169

    
170
    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException;
171

    
172
    /**
173
     * Creates, initializes and returns an instance of NewDataStoreParameters
174
     * given the name with which their provider is registered.
175
     *
176
     * @param explorer
177
     * @param provider
178
     * @return
179
     *
180
     * @throws InitializeException
181
     * @throws ProviderNotRegisteredException
182
     */
183
    public NewDataStoreParameters createNewStoreParameters(String explorer, String provider)
184
            throws InitializeException, ProviderNotRegisteredException;
185

    
186
    public NewDataStoreParameters createNewStoreParameters(String provider)
187
            throws InitializeException, ProviderNotRegisteredException;
188

    
189
    /**
190
     *
191
     * Creates, initializes and returns an instance of DataStore given the
192
     * DataStoreParameters.
193
     *
194
     * @param provider
195
     * @param parameters parameters used to instantiate and initialize the
196
     * DataStore
197
     * @return
198
     *
199
     * @throws ProviderNotRegisteredException if the memory provider is not
200
     * registered
201
     * @throws InitializeException if there is an error initializing the
202
     * parameters for the memory provider
203
     * @throws ValidateDataParametersException if the parameters to open the
204
     * memory based store are not valid
205
     */
206
    public DataStore openStore(String provider, DynObject parameters)
207
            throws InitializeException, ProviderNotRegisteredException,
208
            ValidateDataParametersException;
209

    
210
    public DataStore openStore(String provider, DataStoreParameters parameters)
211
            throws InitializeException, ProviderNotRegisteredException,
212
            ValidateDataParametersException;
213

    
214
    public DataStore openStore(String providerName, DataStoreParameters 
215
            parameters, boolean ignoreDALResource) 
216
            throws InitializeException, ProviderNotRegisteredException, 
217
            ValidateDataParametersException;
218

    
219
    public DataStore openStore(
220
            String providerName,
221
            Object... arguments)
222
        throws
223
            InitializeException,
224
            ProviderNotRegisteredException,
225
            ValidateDataParametersException;
226

    
227
    public DataStore openStore(DynStruct struct)
228
            throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException;
229

    
230
    /**
231
     * Create a new physical store
232
     *
233
     * @param explorer
234
     * @param provider
235
     * @param parameters
236
     * @param overwrite
237
     *
238
     * @throws InitializeException
239
     * @throws ProviderNotRegisteredException
240
     * @throws ValidateDataParametersException
241
     */
242
    public void newStore(String explorer, String provider, NewDataStoreParameters parameters, boolean overwrite)
243
            throws InitializeException, ProviderNotRegisteredException,
244
            ValidateDataParametersException;
245

    
246
    public void newStore(String provider, NewDataStoreParameters parameters, boolean overwrite)
247
            throws InitializeException, ProviderNotRegisteredException,
248
            ValidateDataParametersException;
249

    
250
    /**
251
     * Returns a list of Strings containing the names of all available DataStore
252
     * providers.
253
     *
254
     * @return list of String containing available DataStore provider names
255
     */
256
    public List getStoreProviders();
257

    
258
    /**
259
     * Returns a list of Strings containing the names of all available DataStore
260
     * providers for an explorer.
261
     *
262
     * @param name
263
     * @return
264
     */
265
    public List<String> getStoreProviders(String name);
266

    
267
    /*
268
     * ====================================================================
269
     *
270
     * Explorer related services
271
     */
272
    /**
273
     * Returns an instance of {@link DataServerExplorerParameters} corresponding
274
     * to the given name.
275
     *
276
     * @param name name of a registered server explorer provider
277
     * @return
278
     *
279
     * @throws InitializeException if parameter initialization causes an error.
280
     *
281
     * @throws ProviderNotRegisteredException if could not find a provider by
282
     * the given name.
283
     *
284
     *
285
     */
286
    public DataServerExplorerParameters createServerExplorerParameters(
287
            String name)
288
            throws InitializeException, ProviderNotRegisteredException;
289

    
290
    /**
291
     * Returns an instance of {@link DataServerExplorer} given its parameters.
292
     *
293
     * @param name
294
     * @param parameters parameters used to instantiate and initialize the
295
     * {@link DataServerExplorer}.
296
     *
297
     * @return an instance of {@link DataServerExplorer}.
298
     *
299
     * @throws InitializeException
300
     *
301
     * @throws ProviderNotRegisteredException
302
     * @throws ValidateDataParametersException
303
     */
304
    public DataServerExplorer openServerExplorer(
305
            String name,
306
            DataServerExplorerParameters parameters)
307
            throws InitializeException, ProviderNotRegisteredException,
308
            ValidateDataParametersException;
309

    
310
    public DataServerExplorer openServerExplorer(
311
            String explorerName,
312
            Object... arguments)
313
        throws
314
            InitializeException,
315
            ProviderNotRegisteredException,
316
            ValidateDataParametersException;
317
    /**
318
     * @param parameters
319
     * @return
320
     * @throws org.gvsig.fmap.dal.exception.InitializeException
321
     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
322
     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
323
     * @deprecated see openServerExplorer
324
     */
325
    public DataServerExplorer createServerExplorer(
326
            DataServerExplorerParameters parameters)
327
            throws InitializeException, ProviderNotRegisteredException,
328
            ValidateDataParametersException;
329

    
330
    /**
331
     * @param parameters
332
     * @return
333
     * @throws org.gvsig.fmap.dal.exception.InitializeException
334
     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
335
     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
336
     * @deprecated see openStore
337
     */
338
    public DataStore createStore(DataStoreParameters parameters)
339
            throws InitializeException, ProviderNotRegisteredException,
340
            ValidateDataParametersException;
341

    
342
    /**
343
     * Returns a list of String containing the names of the available
344
     * DataServerExplorer providers.
345
     *
346
     * @return list of String containing the names of the available
347
     * DataServerExplorer providers.
348
     */
349
    public List<String> getExplorerProviders();
350

    
351
    /**
352
     * Creates an instance of Evaluator that represents the given expression.
353
     *
354
     * @param expression String containing a CQL expression.
355
     * @return instance of Evaluator representing the given expression.
356
     * @throws InitializeException
357
     * @deprecated use createFilter
358
     */
359
    public Evaluator createExpresion(String expression)
360
            throws InitializeException;
361

    
362
    /**
363
     * Creates an instance of Evaluator that represents the given expression.
364
     *
365
     * @param expression a Expression with the filter
366
     * @return instance of Evaluator representing the given expression.
367
     * @throws InitializeException
368
     * @deprecated use createFilter
369
     */
370
    public Evaluator createExpresion(Expression expression)
371
            throws InitializeException;
372

    
373
    /**
374
     * Creates an instance of Evaluator that represents the given expression.
375
     *
376
     * @param expression String containing a CQL expression.
377
     * @return instance of Evaluator representing the given expression.
378
     * @throws InitializeException
379
     */
380
    public Evaluator createFilter(String expression)
381
            throws InitializeException;
382

    
383
    /**
384
     * Creates an instance of Evaluator that represents the given expression.
385
     *
386
     * @param expression a Expression with the filter
387
     * @return instance of Evaluator representing the given expression.
388
     * @throws InitializeException
389
     */
390
    public Evaluator createFilter(Expression expression)
391
            throws InitializeException;
392

    
393
    /*
394
     * ====================================================================
395
     *
396
     * Index related services
397
     */
398
    /**
399
     * Returns a list of String containing the names of the available index
400
     * providers.
401
     *
402
     * @return list of strings with the names of the available index providers
403
     */
404
    public List<String> getFeatureIndexProviders();
405

    
406
    /**
407
     * Sets the default DataIndexProvider for the given data type.
408
     *
409
     * @param dataType one of the data types defined in {@link DataTypes}.
410
     * @param name Provider's name
411
     */
412
    public void setDefaultFeatureIndexProviderName(int dataType, String name);
413

    
414
    /**
415
     * Returns the default DataIndexProvider name, given a data type. Data types
416
     * are defined in {@link DataTypes}.
417
     *
418
     * @param dataType one of the constants in {@link DataTypes}.
419
     *
420
     * @return the name of the default {@link FeatureIndexProvider} if there is
421
     * anyone available for the given data type.
422
     */
423
    public String getDefaultFeatureIndexProviderName(int dataType);
424

    
425
    /**
426
     * Utility method to create the {@link DataStoreParameters} to create a
427
     * {@link FeatureStore} based on the {@link MemoryStoreProvider}.
428
     *
429
     * @param autoOrderAttributeName the name of the {@link Feature} attribute
430
     * to be used to order the store {@link Feature}s by default. Set to null if
431
     * you don't want any order by default
432
     * @return the parameters for the memory based store
433
     * @throws InitializeException if there is an error initializing the
434
     * parameters for the memory provider
435
     */
436
    public DataStoreParameters createMemoryStoreParameters(
437
            String autoOrderAttributeName) throws InitializeException;
438

    
439
    /**
440
     * Utility method to create the a {@link FeatureStore} based on the
441
     * {@link MemoryStoreProvider}.
442
     *
443
     * @param autoOrderAttributeName the name of the {@link Feature} attribute
444
     * to be used to order the store {@link Feature}s by default. Set to null if
445
     * you don't want any order by default
446
     * @return the the memory based store
447
     * @throws InitializeException if there is an error initializing the
448
     * parameters for the memory provider
449
     */
450
    public FeatureStore createMemoryStore(String autoOrderAttributeName)
451
            throws InitializeException;
452

    
453
    /**
454
     * Creates a {@link FeaturePagingHelper} to paginate data from a
455
     * {@link FeatureStore}.
456
     *
457
     * @param featureStore to get the {@link Feature}s from
458
     * @param pageSize the page size
459
     * @return a {@link FeaturePagingHelper}
460
     * @throws BaseException if there is an error creating the helper
461
     */
462
    public FeaturePagingHelper createFeaturePagingHelper(
463
            FeatureStore featureStore, int pageSize) throws BaseException;
464

    
465
    /**
466
     * Creates a {@link FeaturePagingHelper} to paginate data from a
467
     * {@link FeatureStore}.
468
     *
469
     * @param featureStore to get the {@link Feature}s from
470
     * @param featureQuery to filter and/or order the data
471
     * @param pageSize the page size
472
     * @return a {@link FeaturePagingHelper}
473
     * @throws BaseException if there is an error creating the helper
474
     */
475
    public FeaturePagingHelper createFeaturePagingHelper(
476
            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
477
            throws BaseException;
478

    
479
    public void setOpenErrorHandler(OpenErrorHandler handler);
480

    
481
    public OpenErrorHandler getOpenErrorHandler();
482

    
483
    public DataStoreProviderFactory getStoreProviderFactory(String name);
484

    
485
    public EditableFeatureType createFeatureType();
486
    
487
    public EditableFeatureType createFeatureType(JsonObject json);
488

    
489
    public DataServerExplorerPool getDataServerExplorerPool();
490

    
491
    public void setDataServerExplorerPool(DataServerExplorerPool pool);
492

    
493
    public void setResourcesLoader(ClassLoader loader);
494

    
495
    public void setResourcesLoader(File folder);
496

    
497
    /**
498
     * Return a list of the DataTypes supported for the type of the feature
499
     * attributes. The list is only informative.
500
     *
501
     * @return
502
     */
503
    public List<DataType> getDataTypes();
504

    
505
    public Register getStoreRegister();
506

    
507
    public Register getStoreProviderRegister();
508

    
509
    public Register getServerExplorerRegister();
510

    
511
    public Register getFeatureIndexRegister();
512

    
513
    /**
514
     * Creates a default ExpressionBuilder.
515
     *
516
     * This ExpressionBuilder is not dependent on a data source,
517
     * and is not advisable to use it.
518
     *
519
     * @return the ExpressionBuilder
520
     * @deprecated use ExpressionEvaluatorManager.createExpressionBuilder()
521
     */
522
    public ExpressionBuilder createExpressionBuilder();
523

    
524
    /**
525
         * Returns a list of String containing the names of the available cache providers.
526
         *
527
         * @return
528
         *                 list of strings with the names of the available cache providers
529
         */
530
    public List getFeatureCacheProviders();
531

    
532
        /**
533
         * Returns an instance of {@link DataServerExplorerParameters} corresponding
534
         * to the given name used by the cache to create a store to save the
535
         * retrieved data.
536
         *
537
         * @param name
538
         *            name of a registered feature cache provider
539
     * @return 
540
         *
541
         * @throws InitializeException
542
         *             if parameter initialization causes an error.
543
         *
544
         * @throws ProviderNotRegisteredException
545
         *             if could not find a cache provider by the given name.
546
         *
547
         */
548
        public DynObject createCacheParameters(String name)
549
                        throws InitializeException, ProviderNotRegisteredException;
550

    
551
    /**
552
     * @param providerName
553
     * @param params
554
     * @param overwrite
555
     * @throws DataException
556
     */
557
    public void createFileStore(String providerName, NewDataStoreParameters params, boolean overwrite) throws DataException;
558

    
559
    public FeatureSymbolTable createFeatureSymbolTable();
560
    
561
    public FeatureSymbolTable createFeatureSymbolTable(String name);
562

    
563
    public EditableFeatureAttributeDescriptor createFeatureAttributeDescriptor(String name, int type);
564
    
565
    public FeatureAttributeEmulatorExpression createFeatureAttributeEmulatorExpression(FeatureType type, Expression expression);
566

    
567
    public void registerDataProfile(DataProfile profile);
568

    
569
    public List<DataProfile> getDataProfiles();
570

    
571
    public DataProfile getDataProfile(String name);
572
    
573
    public StoresRepository getStoresRepository();
574
    
575
    public DatabaseWorkspaceManager createDatabaseWorkspaceManager(DataServerExplorerParameters connection);
576
    
577
    public void addDatabaseWorkspace(DatabaseWorkspaceManager DatabaseWorkspace);
578

    
579
    public void removeDatabaseWorkspace(DatabaseWorkspaceManager DatabaseWorkspace);
580

    
581
    public void addDatabaseWorkspaceListener(DatabaseWorkspaceManager.DatabaseWorkspaceListener listener);
582
    
583
    public DatabaseWorkspaceManager getDatabaseWorkspace(String name);
584
    
585
    public DatabaseWorkspaceManager getDatabaseWorkspace(DataStoreParameters params);
586
    
587
    public DatabaseWorkspaceManager getDatabaseWorkspace(DataServerExplorerParameters params);
588

    
589
    public void writeDALResource(ResourcesStorage resources, DataStore store);
590
    
591
    public void writeDALResource(ResourcesStorage resources, FeatureType featureType);
592

    
593
    /**
594
     * Return a 35-40 characters unique identifier.
595
     * 
596
     * @return the unique identifier
597
     */
598
    public String createUniqueID();
599

    
600
    public void clearAvailableValuesCache();
601

    
602
    public DALExpressionBuilder createDALExpressionBuilder();
603
    
604
    public boolean isTheOldRasterRegistered();
605
    
606
    public void addStoreObserver(Observer observer);
607
    
608
    public void removeStoreObserver(Observer observer);
609

    
610
    public String getServerExplorerFromStore(String name);
611
    
612
    public void setMaxSizeForSmallFeatureSelection(long size);
613

    
614
    public long getMaxSizeForSmallFeatureSelection();
615
    
616
    public void registerLargeMap(Factory factory);
617
    
618
    public void registerLargeSet(Factory factory);
619
    
620
    public Map createLargeMap();
621
    
622
    public Set createLargeSet();
623
    
624
    public DataTransaction createTransaction();
625
    
626
    public void putFeaturesInClipboard(FeatureSet set);
627
    
628
    public List<EditableFeature> getFeaturesFromClipboard(
629
            FeatureStore store, 
630
            Predicate<FeatureAttributeDescriptor> attrFilter
631
    ) throws DataException;
632

    
633
    public FeatureRuleExpression createFeatureRuleExpression();
634
}