Revision 44307

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/feature/spi/simpleprovider/SimpleSequentialReaderStoreParameters.java
30 30
import org.apache.commons.lang3.StringUtils;
31 31
import org.cresques.cts.IProjection;
32 32
import org.gvsig.fmap.dal.DALLocator;
33
import org.gvsig.fmap.dal.DataStoreProviderFactory;
34 33
import org.gvsig.fmap.dal.FileHelper;
35 34
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
36 35
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
......
45 44
import org.slf4j.Logger;
46 45
import org.slf4j.LoggerFactory;
47 46

  
48
public class SimpleSequentialReaderStoreParameters extends AbstractDataParameters implements
49
        OpenFeatureStoreParameters, FilesystemStoreParameters {
47
public class SimpleSequentialReaderStoreParameters 
48
        extends AbstractDataParameters 
49
        implements  OpenFeatureStoreParameters, FilesystemStoreParameters, Cloneable
50
    {
50 51

  
51 52
    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleSequentialReaderStoreParameters.class);
52 53

  
......
75 76
    }
76 77

  
77 78
    @Override
79
    protected Object clone() throws CloneNotSupportedException {
80
        SimpleSequentialReaderStoreParameters other = (SimpleSequentialReaderStoreParameters) super.clone();
81
        other.parameters = (DelegatedDynObject) FileHelper.newParameters(readerFactory.getName());
82
        this.copyValuesTo(other);
83
        return other;
84
    }
85

  
86
    
87
    @Override
78 88
    public String getDataStoreName() {
79 89
        return (String) this.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
80 90
    }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/feature/spi/simpleprovider/AbstractSimpleSequentialReader.java
28 28
        return this.factory;
29 29
    }
30 30

  
31
    protected OpenFeatureStoreParameters getParameters() {
31
    @Override
32
    public OpenFeatureStoreParameters getParameters() {
32 33
        return this.params;
33 34
    }
34 35

  
......
42 43
    }
43 44

  
44 45
    @Override
46
    public String getAlias() {
47
        return null;
48
    }
49
    
50
    @Override
45 51
    public String getDescription() {
46 52
        return null;
47 53
    }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/feature/spi/simpleprovider/SimpleSequentialReaderStoreProvider.java
34 34

  
35 35
import org.apache.commons.lang3.StringUtils;
36 36
import org.cresques.cts.IProjection;
37
import org.gvsig.fmap.dal.BaseStoresRepository;
37 38
import org.gvsig.fmap.dal.DALLocator;
38 39
import org.gvsig.fmap.dal.DataManager;
39 40
import org.gvsig.fmap.dal.DataServerExplorer;
......
55 56
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
56 57
import org.gvsig.fmap.dal.feature.FeatureStore;
57 58
import org.gvsig.fmap.dal.feature.FeatureType;
59
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
58 60
import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
59 61
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
60 62
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
......
78 80
import org.gvsig.timesupport.Interval;
79 81
import org.gvsig.tools.ToolsLocator;
80 82
import org.gvsig.tools.dataTypes.CoercionException;
83
import org.gvsig.tools.dataTypes.DataTypeUtils;
81 84
import org.gvsig.tools.dataTypes.DataTypesManager;
82 85
import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
83 86
import org.gvsig.tools.dataTypes.DataTypesManager.CoercionWithLocale;
87
import org.gvsig.tools.dispose.Disposable;
88
import org.gvsig.tools.dispose.DisposeUtils;
84 89
import org.gvsig.tools.dynobject.Tags;
85 90
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
86 91
import org.gvsig.tools.exception.BaseException;
......
100 105

  
101 106
    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleSequentialReaderStoreProvider.class);
102 107

  
103
    private class ReaderData {
108
    private class StoresRepositoryWithChildren extends BaseStoresRepository {
109
        
110
        public StoresRepositoryWithChildren() {
111
            super(SimpleSequentialReaderStoreProvider.this.getName());
112
        }
113
        
114
        @Override
115
        public DataStore getStore(String name) {
116
            if( StringUtils.equalsIgnoreCase(name, readerData.getName()) ||
117
                StringUtils.equalsIgnoreCase(name, readerData.getAlias()) ) {
118
                return readerData.getStore();
119
            }
120
            for (ReaderData child : childrenData) {
121
                if( StringUtils.equalsIgnoreCase(name, child.getName()) ||
122
                    StringUtils.equalsIgnoreCase(name, child.getAlias()) ) {
123
                    return child.getStore();
124
                }
125
            }
126
            return super.getStore(name);
127
        }
128
        
129
    }
130
    
131
    private class ReaderData implements Disposable {
104 132
        private FeatureType defaultFeatureType;
105 133
        private List<FeatureType> featureTypes;
106
        private final List<FeatureProvider> features;
134
        private List<FeatureProvider> features;
107 135
        private boolean needCalculateEnvelope;
108 136
        private String name;
137
        private String alias;
109 138
        private long OIDcounter;
110 139
        private DataStore store;
111 140
        private StoresRepository storesRepository;
141
        private OpenFeatureStoreParameters parameters;
112 142

  
113 143
        public ReaderData() {
114 144
            this.needCalculateEnvelope = false;
......
116 146
            this.OIDcounter = 0;
117 147
            this.store = null;
118 148
        }
149

  
150
        @Override
151
        public void dispose() {
152
            DisposeUtils.disposeQuietly(store);
153
            this.store = null;
154
            this.features = null;
155
            this.OIDcounter = 0;
156
            this.defaultFeatureType = null;
157
            this.featureTypes = null;
158
            this.parameters = null;
159
            this.storesRepository = null;
160
        }
119 161
        
120 162
        public void addFeatureProvider(FeatureProvider feature) {
121 163
		feature.setOID(this.OIDcounter++);
......
155 197
            return this.features;
156 198
        }
157 199
        
158
        public DataStore getStore() throws InitializeException {
200
        public DataStore getStore() {
159 201
            if( this.store == null ) {
160
                SimpleSequentialReaderStoreProvider provider = new SimpleSequentialReaderStoreProvider(
161
                        readerFactory,
162
                        getParameters(),
163
                        null,
164
                        childrenData,
165
                        this
166
                );
167
                DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
168
                this.store = manager.openStore(
169
                        getParameters(), 
170
                        provider
171
                );
172
                provider.setStoreServices((FeatureStoreProviderServices) this.store);
173
                provider.name = this.name;
202
                try {
203
                    SimpleSequentialReaderStoreProvider provider = new SimpleSequentialReaderStoreProvider(
204
                            readerFactory, 
205
                            (SimpleSequentialReaderStoreParameters) getParameters(),
206
                            null,
207
                            childrenData,
208
                            this
209
                    );
210
                    DataManagerProviderServices manager = DALSPILocator.getDataManagerProviderServices();
211
                    this.store = manager.openStore(
212
                            getParameters(), 
213
                            provider
214
                    );
215
                    provider.setStoreServices((FeatureStoreProviderServices) this.store);
216
                    provider.name = this.name;
217
                    DisposeUtils.bind(this.store);
218
                } catch(Exception ex) {
219
                   LOGGER.warn("Can't build store form child '"+name+"'.",ex);
220
                   return null; 
221
                }
174 222
            }
223
            DisposeUtils.bind(this.store);
175 224
            return this.store;
176 225
        }
177 226

  
......
182 231
        public StoresRepository getStoresRepository() {
183 232
            return storesRepository;
184 233
        }
234

  
235
        public void setParameters(OpenFeatureStoreParameters parameters) {
236
            if( parameters==null ) {
237
                LOGGER.warn("Can't set parameters to null");
238
                return;
239
            }
240
            this.parameters = parameters;
241
        }
242

  
243
        public OpenFeatureStoreParameters getParameters() {
244
            return parameters;
245
        }
246

  
247
        public String getAlias() {
248
            return this.alias;
249
        }
250

  
251
        public void setAlias(String alias) {
252
            this.alias = alias;
253
        }
185 254
        
255
        
186 256
    }
187 257
    
188 258
    class Children implements UnmodifiableBasicMap<String, DataStore> {
......
194 264
        public DataStore get(String key) {
195 265
            for (ReaderData child : childrenData) {
196 266
                if( StringUtils.equalsIgnoreCase(child.getName(), key) ) {
197
                    try {
198
                        return child.getStore();
199
                    } catch (Exception ex) {
200
                        throw new RuntimeException(ex);
201
                    }
267
                    return child.getStore();
202 268
                }
203 269
            }
204 270
            return null;
......
289 355
    private final SimpleSequentialReaderFactory readerFactory;
290 356
    private List<ReaderData> childrenData;
291 357
    private ReaderData readerData;
358
    private final boolean isAChild;
292 359

  
293 360
    public SimpleSequentialReaderStoreProvider(
294 361
            SimpleSequentialReaderFactory readerFactory,
......
314 381
        this.childrenData = childrenData;
315 382
        this.readerData = readerData;
316 383
        this.readerFactory = readerFactory;
317

  
384
        this.isAChild = this.readerData!=null;
385
        
318 386
        File file = getParameters().getFile();
319 387
        resource = this.createResource(
320 388
                FileResource.NAME,
......
329 397
            initializeFeatureTypes();
330 398
        }
331 399
    }
332

  
400
    
401
    private boolean isChild() {
402
        return this.isAChild;
403
    }
404
    
333 405
    private void setStoreServices(FeatureStoreProviderServices storeServices) throws InitializeException {
334 406
        this.store = storeServices;
335 407
        initializeFeatureTypes();
336 408
    }
409

  
410
    @Override
411
    public FeatureStoreProviderServices getStoreServices() {
412
        if( this.store==null ) {
413
            // Por aqui no deberia de pasar.
414
            // Si pasa es que algo va mal.
415
            LOGGER.warn("Algo no anda bien, el store es null");
416
            DataStore theStore = this.readerData.getStore();
417
            if( theStore==null ) {
418
                return null;
419
            }
420
            this.store = (FeatureStoreProviderServices) theStore ;
421
        }
422
        return this.store;
423
    }
337 424
    
338 425
    @Override
339 426
    public SimpleSequentialReaderStoreParameters getParameters() {
......
437 524
        throw new UnsupportedOperationException();
438 525
    }
439 526

  
440
    protected void initializeFeatureTypes() throws InitializeException {
527
    @Override
528
    protected void doDispose() throws BaseException {
529
        for (ReaderData theReaderData : this.childrenData) {
530
            DisposeUtils.disposeQuietly(theReaderData);
531
        }
532
        this.childrenData = null;
533
        DisposeUtils.disposeQuietly(this.readerData);
534
        this.readerData = null;
535
//        this.resource = null;
536
//        this.readerFactory = null;
537
        this.envelope = null;
538
        super.doDispose();
539
    }
540

  
541
    
542
    private void initializeFeatureTypes() throws InitializeException {
441 543
        try {
442 544
            this.open();
443 545
        } catch (OpenException e) {
......
723 825
                try {
724 826
                    switch(entry.getKey().toLowerCase()) {
725 827
                        case "hidden":
726
                            fad.setHidden((boolean) dataTypesManager.coerce(DataTypes.BOOLEAN, entry.getValue()));
828
                            fad.setHidden(DataTypeUtils.toBoolean(entry.getValue(), false));
727 829
                            break;
728 830
                        case "allownull":
729
                            fad.setAllowNull((boolean) dataTypesManager.coerce(DataTypes.BOOLEAN, entry.getValue()));
831
                            fad.setAllowNull(DataTypeUtils.toBoolean(entry.getValue(), false));
730 832
                            break;
731 833
                        case "pk":
732 834
                        case "ispk":
733 835
                        case "primarykey":
734 836
                        case "isprimarykey":
735
                            fad.setIsPrimaryKey((boolean) dataTypesManager.coerce(DataTypes.BOOLEAN, entry.getValue()));
837
                            fad.setIsPrimaryKey(DataTypeUtils.toBoolean(entry.getValue(), false));
736 838
                            break;
737 839
                        case "isautomatic":
738 840
                        case "automatic":
739
                            fad.setIsAutomatic((boolean) dataTypesManager.coerce(DataTypes.BOOLEAN, entry.getValue()));
841
                            fad.setIsAutomatic(DataTypeUtils.toBoolean(entry.getValue(), false));
740 842
                            break;
741 843
                        case "time":
742 844
                        case "istime":
743
                            fad.setIsTime((boolean) dataTypesManager.coerce(DataTypes.BOOLEAN, entry.getValue()));
845
                            fad.setIsTime(DataTypeUtils.toBoolean(entry.getValue(), false));
744 846
                            break;
745 847
                        case "profile":
746
                            fad.setDataProfileName((String) dataTypesManager.coerce(DataTypes.STRING, entry.getValue()));
848
                            fad.setDataProfileName(DataTypeUtils.toString(entry.getValue(), ""));
747 849
                            break;
748 850
                        case "group":
749
                            fad.setGroup((String) dataTypesManager.coerce(DataTypes.STRING, entry.getValue()));
851
                            fad.setGroup(DataTypeUtils.toString(entry.getValue(), ""));
750 852
                            break;
751 853
                        case "description":
752
                            fad.setDescription((String) dataTypesManager.coerce(DataTypes.STRING, entry.getValue()));
854
                            fad.setDescription(DataTypeUtils.toString(entry.getValue(), ""));
753 855
                            break;
754 856
                        case "label":
755
                            fad.setLabel((String) dataTypesManager.coerce(DataTypes.STRING, entry.getValue()));
857
                            fad.setLabel(DataTypeUtils.toString(entry.getValue(), ""));
756 858
                            break;
757 859
                        case "expression":
758 860
                            // Los campos calculados los procesamos en una segunda
......
760 862
                            // ya que pueden requerir campos que aun no se han definido.
761 863
                            break;
762 864
                        case "size":
763
                            fad.setSize((int) dataTypesManager.coerce(DataTypes.INT, entry.getValue()));
865
                            fad.setSize(DataTypeUtils.toInteger(entry.getValue(), 50));
764 866
                            break;
765 867
                        case "precision":
766
                            fad.setPrecision((int) dataTypesManager.coerce(DataTypes.INT, entry.getValue()));
868
                            fad.setPrecision(DataTypeUtils.toInteger(entry.getValue(), 10));
767 869
                            break;
768 870
                        case "order":
769
                            fad.setOrder((int) dataTypesManager.coerce(DataTypes.INT, entry.getValue()));
871
                            fad.setOrder(DataTypeUtils.toInteger(entry.getValue(), 0));
770 872
                            break;
873
                        case "foreingkey":
874
                            fad.getForeingKey().setForeingKey(DataTypeUtils.toBoolean(entry.getValue(), false));
875
                            break;
876
                        case "foreingkey.code":
877
                            fad.getForeingKey().setCodeName(DataTypeUtils.toString(entry.getValue(), ""));
878
                            break;
879
                        case "foreingkey.label":
880
                            fad.getForeingKey().setLabelFormula(DataTypeUtils.toString(entry.getValue(), ""));
881
                            break;
882
                        case "foreingkey.selectable":
883
                            fad.getForeingKey().setSelectable(DataTypeUtils.toBoolean(entry.getValue(), false));
884
                            break;
885
                        case "foreingkey.table":
886
                            fad.getForeingKey().setTableName(DataTypeUtils.toString(entry.getValue(), ""));
887
                            break;
771 888
                        case "interval":
772 889
                            fad.setInterval((Interval) dataTypesManager.coerce(DataTypes.INTERVAL, entry.getValue()));
773 890
                            break;
......
934 1051
            SimpleSequentialReader reader = this.readerFactory.createReader(this.getParameters());
935 1052
            try {
936 1053
                loadFeatures(reader, theReaderData);
1054
                StoresRepositoryWithChildren repoWithChildren = new StoresRepositoryWithChildren();
1055
                StoresRepository repo = reader.getStoresRepository();
1056
                if( repo!=null ) {
1057
                    repoWithChildren.addRepository(repo);
1058
                }        
937 1059
                this.childrenData = new ArrayList<>();
938
                for(SimpleSequentialReader childReader : reader.getChildren() ) {
1060
                List<SimpleSequentialReader> children = reader.getChildren();
1061
                for(SimpleSequentialReader childReader : children ) {
939 1062
                    ReaderData childData = new ReaderData();
940 1063
                    loadFeatures(childReader, childData);
941 1064
                    this.childrenData.add(childData);
1065
                    repoWithChildren.add(childReader.getName(), childData.getParameters());
1066
                    if( !StringUtils.isBlank(childReader.getAlias()) ) {
1067
                        repoWithChildren.add(childReader.getAlias(), childData.getParameters());
1068
                    }
1069
                    childData.setStoresRepository(repoWithChildren);
942 1070
                }
1071
                repoWithChildren.add(reader.getName(), theReaderData.getParameters());
1072
                if( !StringUtils.isBlank(reader.getAlias()) ) {
1073
                    repoWithChildren.add(reader.getAlias(), theReaderData.getParameters());
1074
                }
1075
                theReaderData.setStoresRepository(repoWithChildren);
943 1076
                this.readerData = theReaderData;
944 1077
            } finally {
945 1078
                reader.close();
......
967 1100
            taskStatus.message("_preparing");
968 1101
            readerData.setName(reader.getName());
969 1102
            readerData.setStoresRepository(reader.getStoresRepository());
1103
            readerData.setParameters(reader.getParameters());
1104
            readerData.setAlias(reader.getAlias());
970 1105
            
971 1106
            boolean ignore_errors = getParameters().getIgnoreErrors();
972 1107

  
......
1129 1264

  
1130 1265
    @Override
1131 1266
    public UnmodifiableBasicMap<String, DataStore> getChildren() {
1267
        if( this.isChild() ) {
1268
            return null;
1269
        }
1132 1270
        return new Children();
1133 1271
    }
1134 1272

  
1135 1273
    @Override
1136 1274
    public StoresRepository getStoresRepository() {
1137 1275
        StoresRepository repo = this.readerData.getStoresRepository();
1138
        if( repo == null ) {
1139
            return super.getStoresRepository();
1140
        }
1141 1276
        return repo;
1142 1277
    }
1143 1278
    
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.lib/src/main/java/org/gvsig/fmap/dal/feature/spi/simpleprovider/SimpleSequentialReader.java
9 9
import java.util.List;
10 10
import java.util.Map;
11 11
import org.gvsig.fmap.dal.StoresRepository;
12
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
12 13
import org.gvsig.fmap.dal.feature.spi.simpleprovider.AutomaticDetectionOfTypes.Rows;
13 14

  
14 15
/**
......
32 33

  
33 34
    public String getName();
34 35
    
36
    public String getAlias();
37
    
35 38
    public String getLabel();
36 39
    
37 40
    public String getDescription();
......
44 47
    
45 48
    public StoresRepository getStoresRepository();
46 49
    
50
    public OpenFeatureStoreParameters getParameters();
47 51
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/complements/relatedfeatures/RelatedFeaturesImpl.java
90 90
                    if( store != null ) {
91 91
                        StoresRepository repository = store.getStoresRepository();
92 92
                        if( repository.containsKey(getTableName()) ) {
93
                            this.featureStore = (FeatureStore) repository.get(getTableName());
93
                            this.featureStore = (FeatureStore) repository.getStore(getTableName());
94 94
                            if( this.featureStore!=null) {
95 95
                                return this.featureStore;
96 96
                            }
......
98 98
                    }
99 99
                } 
100 100
                StoresRepository repository = this.getStoresRepository();
101
                this.featureStore = (FeatureStore) repository.get(getTableName());
101
                this.featureStore = (FeatureStore) repository.getStore(getTableName());
102 102
                if (this.featureStore == null) {
103 103
                    LOGGER.warn("Can't locate store '" + getTableName() + "'.");
104 104
                    return null;
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
319 319

  
320 320
    @Override
321 321
    public DataStoreParameters getParameters() {
322
        if( this.parameters==null ) {
323
            LOG.warn("Store parametes are null");
324
        }
322 325
        return parameters;
323 326
    }
324 327

  
......
333 336

  
334 337
    @Override
335 338
    public UnmodifiableBasicMap<String,DataStore> getChildren() {
336
        return this.provider.getChildren();
339
        UnmodifiableBasicMap<String, DataStore> children = this.provider.getChildren();
340
        if( children == null ) {
341
            return UnmodifiableBasicMap.EMPTY_UNMODIFIABLEBASICMAP;
342
        }
343
        return children;
337 344
    }
338 345

  
339 346
    @Override
......
743 750
        );
744 751
    }
745 752

  
746
	public DataStoreProviderServices getStoreProviderServices() {
747
		return this;
748
	}
753
    public DataStoreProviderServices getStoreProviderServices() {
754
        return this;
755
    }
749 756

  
750 757
    public static void registerPersistenceDefinition() {
751 758
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
......
2994 3001
    public StoresRepository getStoresRepository() {
2995 3002
        final StoresRepository mainRepository = this.dataManager.getStoresRepository();
2996 3003
        StoresRepository localRepository = this.provider.getStoresRepository();
2997
        StoresRepository repository = new BaseStoresRepository(this.getName()) {
2998
            
2999
            @Override
3000
            protected DataStoreParameters getMyParameters(String name) {
3001
                // Uff, esta implementacion no es nada buena
3002
                UnmodifiableBasicMap<String, DataStore> children = getChildren();
3003
                if( children==null ) {
3004
                    return null;
3005
                }
3006
                DataStore store = children.get(name);
3007
                if( store==null ) {
3008
                    return null;
3009
                }
3010
                return store.getParameters();
3011
            }
3012

  
3013
            @Override
3014
            protected boolean isEmptyMyRepository() {
3015
                UnmodifiableBasicMap<String, DataStore> children = getChildren();
3016
                return children==null || children.isEmpty();
3017
            }
3018

  
3019
            @Override
3020
            protected int getMySize() {
3021
                UnmodifiableBasicMap<String, DataStore> children = getChildren();
3022
                if( children==null ) {
3023
                    return 0;
3024
                }
3025
                return children.size();
3026
            }
3027

  
3028
            @Override
3029
            public void add(String name, DataStoreParameters parameters) {
3030
                mainRepository.add(name, parameters);
3031
            }
3032

  
3033
            @Override
3034
            public void remove(String name) {
3035
                mainRepository.remove(name);
3036
            }
3037

  
3038
        };
3039
        if( localRepository!=null ) {
3040
            repository.addRepository(localRepository);
3004
        if( localRepository==null ) {
3005
            return mainRepository;
3041 3006
        }
3007
        StoresRepository repository = new BaseStoresRepository(this.getName());
3008
        repository.addRepository(localRepository);
3042 3009
        repository.addRepository(mainRepository);
3043 3010
        return repository;
3044 3011
    }
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/featureform/swing/impl/dynformfield/linkforeingkey/JDynFormFieldForeingKey.java
35 35
import javax.swing.Icon;
36 36
import javax.swing.ImageIcon;
37 37
import javax.swing.JButton;
38
import javax.swing.JComponent;
38 39
import javax.swing.JList;
39 40
import javax.swing.JPanel;
40 41
import javax.swing.JTextField;
......
43 44
import javax.swing.text.JTextComponent;
44 45
import org.gvsig.featureform.swing.JFeaturesForm;
45 46
import org.gvsig.featureform.swing.JFeaturesForm.FeaturesFormContext;
46
import org.gvsig.fmap.dal.StoresRepository;
47 47
import org.gvsig.fmap.dal.feature.Feature;
48 48
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
49 49
import org.gvsig.fmap.dal.feature.FeatureQuery;
50
import org.gvsig.fmap.dal.feature.FeatureStore;
51 50
import org.gvsig.fmap.dal.feature.FeatureType;
52 51
import org.gvsig.fmap.dal.feature.ForeingKey;
53 52
import org.gvsig.fmap.dal.feature.ForeingKey.ContextForeingKey;
54 53
import org.gvsig.fmap.dal.swing.DALSwingLocator;
55 54
import org.gvsig.fmap.dal.swing.DataSwingManager;
56
import org.gvsig.tools.ToolsLocator;
57 55
import org.gvsig.tools.dispose.DisposeUtils;
58 56
import org.gvsig.tools.dynform.DynFormFieldDefinition;
59 57
import org.gvsig.tools.dynform.JDynForm;
......
343 341
    public void setReadOnly(boolean readonly) {
344 342
        initComponentIfNeed();
345 343
        boolean editable = !readonly;
344
        JComponent jlabel = this.getJLabel();
345
        if( jlabel !=null ) {
346
            jlabel.setEnabled(editable);
347
        }
346 348
        this.txtDescription.setEditable(false);
347 349
        this.btnEdit.setEnabled(true);
348 350
        this.btnLink.setEnabled(editable);
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/BaseStoresRepository.java
2 2

  
3 3
import java.util.HashMap;
4 4
import java.util.Map;
5
import org.apache.commons.lang3.StringUtils;
5 6
import org.gvsig.tools.util.UnmodifiableBasicSet;
6 7
import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
7 8

  
......
45 46

  
46 47
    @Override
47 48
    public void add(String name, DataStoreParameters parameters) {
49
        if( parameters == null ) {
50
            throw new IllegalArgumentException("parameters can't be null.");
51
        }
52
        if( StringUtils.isBlank(name) ) {
53
            throw new IllegalArgumentException("name can't be blank.");
54
        }
48 55
        this.repository.put(name, parameters);
49 56
    }
50 57

  
51 58
    @Override
52 59
    public void remove(String name) {
60
        if( StringUtils.isBlank(name) ) {
61
            LOGGER.warn("parameter name can't be blank");
62
            return;
63
        }
53 64
        this.repository.remove(name);
54 65
    }
55 66
    
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/AbstractStoresRepository.java
8 8
import org.apache.commons.lang3.StringUtils;
9 9
import org.gvsig.tools.util.UnmodifiableBasicSet;
10 10
import org.gvsig.tools.util.UnmodifiableBasicSetChained;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
11 13

  
12 14
/**
13 15
 *
......
16 18
@SuppressWarnings("UseSpecificCatch")
17 19
public abstract class AbstractStoresRepository  implements StoresRepository {
18 20
    
21
    protected final Logger LOGGER = LoggerFactory.getLogger(AbstractStoresRepository.class);
22
    
19 23
    private final String name;
20 24
    private final String label;
21 25
    private final List<StoresRepository> subrepositories;
......
102 106

  
103 107
    @Override
104 108
    public DataStore getStore(String name) {
105
        DataStoreParameters parameters = this.get(name);
109
        DataStoreParameters parameters = this.getMyParameters(name);
106 110
        if( parameters!=null ) {
107 111
            try {
108 112
                DataStore store = DALLocator.getDataManager().openStore(
......
114 118
                throw new RuntimeException("Can't open store '"+name+"'.", ex);
115 119
            }
116 120
        }
121
        for ( StoresRepository theRepository : this.subrepositories) {
122
            DataStore store = theRepository.getStore(name);
123
            if( store!=null ) {
124
                return store;
125
            }
126
        }
117 127
        return null;
118 128
    }
119 129

  
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/feature/spi/AbstractFeatureStoreProvider.java
215 215
		return resource;
216 216
	}
217 217

  
218
	/*
219
	 * (non-Javadoc)
220
	 *
221
	 * @see
222
	 * org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getStoreServices()
223
	 */
218
        @Override
224 219
	public FeatureStoreProviderServices getStoreServices() {
225 220
		return this.store;
226 221
	}
227 222

  
223
        @Override
228 224
	public FeatureStore getFeatureStore() {
229
		if(this.store == null){
230
			return null;
231
		}
232
		return this.store.getFeatureStore();
225
            FeatureStoreProviderServices services = this.getStoreServices();
226
            if(services == null){
227
                    return null;
228
            }
229
            return services.getFeatureStore();
233 230
	}
234 231

  
235
	/**
236
	 * unsupported by default, override this otherwise
237
	 *
238
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#allowWrite()
239
	 */
232
        @Override
240 233
	public boolean allowWrite() {
241 234
		return false;
242 235
	}
......
280 273

  
281 274
	public FeatureProvider createFeatureProvider(FeatureType type)
282 275
			throws DataException {
283
		return this.store.createDefaultFeatureProvider(type);
276
            FeatureStoreProviderServices services = this.getStoreServices();
277
            return services.createDefaultFeatureProvider(type);
284 278
	}
285 279

  
286 280
	/**
......
305 299
	 *
306 300
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createFeatureSelection()
307 301
	 */
302
        @Override
308 303
	public FeatureSelection createFeatureSelection() throws DataException {
309
		return this.store.createDefaultFeatureSelection();
304
            FeatureStoreProviderServices services = this.getStoreServices();
305
            return services.createDefaultFeatureSelection();
310 306
	}
311 307

  
312 308
	/**
......
323 319
	 *
324 320
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#close()
325 321
	 */
322
        @Override
326 323
	public void close() throws CloseException {
327 324
		// Do nothing by default
328 325
	}
329 326

  
327
        @Override
330 328
	protected void doDispose() throws BaseException {
331 329
		this.metadata = null;
332 330
		this.store = null;
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.spi/src/main/java/org/gvsig/fmap/dal/spi/AbstractDataParameters.java
102 102
        manager.clear(this);
103 103
    }
104 104

  
105
    protected void copyValuesTo(AbstractDataParameters target) {
105
    protected void copyValuesTo(DataParameters target) {
106 106
        DynObjectManager manager = ToolsLocator.getDynObjectManager();
107 107
        manager.copy(this, target);
108 108
    }
109 109

  
110 110
    @Override
111 111
    public DataParameters getCopy() {
112
        // TODO Delegar en el DynObject cuando tenga este servicio
113
        AbstractDataParameters copy;
112
        DataParameters copy;
114 113
        try {
115
            copy = (AbstractDataParameters) this.getClass().newInstance();
116
        } catch (InstantiationException | IllegalAccessException e) {
114
            if( this instanceof Cloneable ) {
115
                copy = (DataParameters) this.clone();
116
            } else {
117
                copy = (DataParameters) this.getClass().newInstance();
118
                this.copyValuesTo(copy);
119
            }
120
        } catch (Exception e) {
117 121
            throw new CopyParametersException("data parameters", e);
118 122
        }
119
        this.copyValuesTo(copy);
120 123
        return copy;
121 124
    }
122 125

  
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/project/documents/view/ViewManager.java
104 104
                        if (filter == null || filter.test(store)) {
105 105
                            all.put(store.getName(), store.getParameters());
106 106
                        }
107
                        UnmodifiableBasicMap<String, DataStore> children = store.getChildren();
108
                        if (children != null) {
109
                            for (DataStore dataStore : children) {
110
                                if (filter == null || filter.test(dataStore)) {
111
                                    all.put(dataStore.getName(), dataStore.getParameters());
112
                                }
113
                            }
114
                        }
107
//                        UnmodifiableBasicMap<String, DataStore> children = store.getChildren();
108
//                        if (children != null) {
109
//                            for (DataStore dataStore : children) {
110
//                                if (filter == null || filter.test(dataStore)) {
111
//                                    all.put(dataStore.getName(), dataStore.getParameters());
112
//                                }
113
//                            }
114
//                        }
115 115
                    }
116 116
                    if (limit > 0 && all.size() >= limit) {
117 117
                        break;

Also available in: Unified diff