Revision 47045

View differences:

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
34 34
import java.util.function.Predicate;
35 35
import javax.swing.ImageIcon;
36 36
import org.apache.commons.lang3.StringUtils;
37
import org.apache.commons.lang3.tuple.ImmutablePair;
38
import org.apache.commons.lang3.tuple.Pair;
37 39
import org.gvsig.andami.IconThemeHelper;
38 40
import org.gvsig.andami.PluginServices;
39 41
import org.gvsig.andami.PluginsLocator;
......
73 75
import org.gvsig.fmap.mapcontext.MapContextManager;
74 76
import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesHelper;
75 77
import org.gvsig.fmap.mapcontext.layers.FLayer;
76
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
77 78
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
78 79
import org.gvsig.tools.ToolsLocator;
79
import org.gvsig.tools.dispose.DisposeUtils;
80 80
import org.gvsig.tools.dynobject.DynStruct;
81 81
import org.gvsig.tools.extensionpoint.ExtensionBuilder;
82 82
import org.gvsig.tools.extensionpoint.ExtensionPoint;
......
118 118
            }
119 119
            return views;
120 120
        }
121

  
122
        private Map<String, Pair<DataStoreParameters,DataStore>> getAll(Predicate<Pair<DataStore,String>> filter, int limit) {
123
            return getAll();
124
        }
121 125
        
122
        private Map<String, DataStoreParameters> getAll(Predicate<DataStore> filter, int limit) {
123
            Map<String, DataStoreParameters> all = new HashMap<>();
126
        private Map<String, Pair<DataStoreParameters,DataStore>> getAll() {
127
            Map<String, Pair<DataStoreParameters,DataStore>> all = new HashMap<>();
124 128
            List<ViewDocument> views = getOrderedViews();
129
//            MutablePair<DataStore,String> storeAndName = new MutablePair<>();
125 130
            for (ViewDocument view : views) {
126 131
                for (FLayer layer : view.layers()) {
127 132
                    if (layer instanceof FLyrVect) {
128 133
                        FeatureStore store = ((FLyrVect) layer).getFeatureStore();
129
                        if (store!=null && (filter == null || filter.test(store))) {
130
                            all.put(store.getName(), store.getParameters());
134
                        if (store!=null ) {
135
                            String theName = layer.getName();
136
                            if( all.containsKey(theName) ) {
137
                                theName = theName+"$";
138
                                int  counter = 1;
139
                                while( all.containsKey(theName+counter) ) {
140
                                    counter++;
141
                                }
142
                                theName = theName+counter;
143
                            }
144
//                            storeAndName.setLeft(store);
145
//                            storeAndName.setRight(theName);
146
//                            if( filter == null || filter.test(storeAndName) ) {
147
                                all.put(theName, new ImmutablePair<>(store.getParameters(),store));
148
//                            }
131 149
                        }
132
//                        UnmodifiableBasicMap<String, DataStore> children = store.getChildren();
133
//                        if (children != null) {
134
//                            for (DataStore dataStore : children) {
135
//                                if (filter == null || filter.test(dataStore)) {
136
//                                    all.put(dataStore.getName(), dataStore.getParameters());
137
//                                }
138
//                            }
139
//                        }
140 150
                    }
141
                    if (limit > 0 && all.size() >= limit) {
142
                        break;
143
                    }
151
//                    if (limit > 0 && all.size() >= limit) {
152
//                        break;
153
//                    }
144 154
                }
145 155
            }
146 156
            if (all.isEmpty()) {
......
149 159
            return all;
150 160
        }
151 161

  
152
        private Map<String, FeatureType> getAllFeatureTypes(Predicate<DataStore> filter, int limit) {
153
            Map<String, FeatureType> all = new HashMap<>();
162
        private Map<String, Pair<FeatureType,FeatureStore>> getAllFeatureTypes(Predicate<Pair<DataStore,String>> filter, int limit) {
163
            return getAllFeatureTypes();
164
        }
165
        
166
        private Map<String, Pair<FeatureType,FeatureStore>> getAllFeatureTypes() {
167
            Map<String, Pair<FeatureType,FeatureStore>> all = new HashMap<>();
154 168
            Project project = ProjectManager.getInstance().getCurrentProject();
155 169
            List<Document> views = project.getDocuments(TYPENAME);
170
//            MutablePair<DataStore,String> storeAndName = new MutablePair<>();
156 171
            for (Document view : views) {
157 172
                for (FLayer layer : ((ViewDocument) view).layers()) {
158 173
                    if (layer instanceof FLyrVect) {
159 174
                        FeatureStore store = ((FLyrVect) layer).getFeatureStore();
160
                        if (store!=null && (filter == null || filter.test(store))) {
161
                            all.put(store.getName(), store.getDefaultFeatureTypeQuietly());
175
                        if (store!=null ) {
176
                            String theName = layer.getName();
177
                            if( all.containsKey(theName) ) {
178
                                theName = theName+"$";
179
                                int  counter = 1;
180
                                while( all.containsKey(theName+counter) ) {
181
                                    counter++;
182
                                }
183
                                theName = theName+counter;
184
                            }
185
//                            storeAndName.setLeft(store);
186
//                            storeAndName.setRight(theName);
187
//                            if( filter == null || filter.test(storeAndName) ) {
188
                                all.put(theName, new ImmutablePair<>(store.getDefaultFeatureTypeQuietly(),store));
189
//                            }
162 190
                        }
163 191
                    }
164
                    if (limit > 0 && all.size() >= limit) {
165
                        break;
166
                    }
192
//                    if (limit > 0 && all.size() >= limit) {
193
//                        break;
194
//                    }
167 195
                }
168 196
            }
169 197
            if (all.isEmpty()) {
......
174 202

  
175 203
        @Override
176 204
        protected DataStoreParameters getMyParameters(final String name) {
177
            Map<String, DataStoreParameters> all = this.getAll((DataStore t) -> {
178
                String x = t==null? null:t.getName();
179
                return StringUtils.equalsIgnoreCase(name, x);
205
            Map<String, Pair<DataStoreParameters, DataStore>> all = this.getAll((Pair<DataStore,String> t) -> {
206
                return StringUtils.equalsIgnoreCase(name, t.getRight());
180 207
            }, 1);
181 208
            if (all == null) {
182 209
                return null;
183 210
            }
184
            return all.get(name);
211
            return all.get(name).getLeft();
185 212
        }
186 213

  
187 214
        @Override
188 215
        protected FeatureType getMyFeatureType(String name) {
189
            Map<String, FeatureType> all = this.getAllFeatureTypes((DataStore t) -> {
190
                String x = t==null? null:t.getName();
191
                return StringUtils.equalsIgnoreCase(name, x);
216
            Map<String, Pair<FeatureType, FeatureStore>> all = this.getAllFeatureTypes((Pair<DataStore,String> t) -> {
217
                return StringUtils.equalsIgnoreCase(name, t.getRight());
192 218
            }, 1);
193 219
            if (all == null) {
194 220
                return null;
195 221
            }
196
            return all.get(name);
222
            return all.get(name).getLeft();
197 223
        }
198 224

  
199 225
        @Override
200 226
        public DataStore getStore(String name) {
201
            Project project = ProjectManager.getInstance().getCurrentProject();
202
            List<ViewDocument> views = getOrderedViews(); // project.getDocuments(TYPENAME);
203
            for (Document view : views) {
204
                for (FLayer layer : ((ViewDocument) view).layers()) {
205
                    if (layer instanceof SingleLayer) {
206
                        DataStore store = ((SingleLayer) layer).getDataStore();
207
                        if (store!=null && StringUtils.equals(name, store.getName())) {
208
                            DisposeUtils.bind(store);
209
                            return store;
210
                        }
211
                    }
212
                }
227
            Map<String, Pair<DataStoreParameters, DataStore>> all = this.getAll((Pair<DataStore,String> t) -> {
228
                return StringUtils.equalsIgnoreCase(name, t.getRight());
229
            }, 1);
230
            if (all == null) {
231
                return null;
213 232
            }
214
            return null;
233
            return all.get(name).getRight();
215 234
        }
216 235
        
217 236
        @Override
218 237
        public boolean containsKey(final String key) {
219
            Map<String, DataStoreParameters> all = this.getAll((DataStore t) -> {
220
                String x = t==null? null:t.getName();
221
                return StringUtils.equalsIgnoreCase(key, x);
238
            Map<String, Pair<DataStoreParameters, DataStore>> all =this.getAll((Pair<DataStore,String> t) -> {
239
                return StringUtils.equalsIgnoreCase(key,t.getRight());
222 240
            }, 1);
223 241
            if (all == null) {
224 242
                return false;
......
228 246

  
229 247
        @Override
230 248
        protected UnmodifiableBasicSet<String> getMyKeySet() {
231
            Map<String, DataStoreParameters> all = this.getAll(null, 0);
249
            Map<String, Pair<DataStoreParameters, DataStore>> all = this.getAll(null, 0);
232 250
            if (all == null) {
233 251
                return null;
234 252
            }
......
237 255

  
238 256
        @Override
239 257
        protected boolean isEmptyMyRepository() {
240
            Map<String, DataStoreParameters> all = this.getAll(null, 1);
258
            Map<String, Pair<DataStoreParameters, DataStore>> all = this.getAll(null, 1);
241 259
            return all.isEmpty();
242 260
        }
243 261

  
244 262
        @Override
245 263
        protected int getMySize() {
246
            Map<String, DataStoreParameters> all = this.getAll(null, 0);
264
            Map<String, Pair<DataStoreParameters, DataStore>> all = this.getAll(null, 0);
247 265
            return all.size();
248 266
        }
249 267

  
250 268
        @Override
251 269
        public Iterator<DataStoreParameters> iterator() {
252
            Map<String, DataStoreParameters> all = this.getAll(null, 0);
253
            return all.values().iterator();
270
            Map<String, Pair<DataStoreParameters, DataStore>> all = this.getAll(null, 0);
271
            Iterator<Pair<DataStoreParameters, DataStore>> it = all.values().iterator();
272
            return new Iterator<DataStoreParameters>() {
273
                @Override
274
                public boolean hasNext() {
275
                    return it.hasNext();
276
                }
277

  
278
                @Override
279
                public DataStoreParameters next() {
280
                    return it.next().getLeft();
281
                }
282
            };
254 283
        }
255 284

  
256 285
        public static void selfRegister() {
......
258 287
            dataManager.getStoresRepository().addRepository(new ViewDocumentStoresRepository("Project layers"));            
259 288
        }
260 289
    }
290
    
261 291
    private static final String PERSISTENCE_VIEW_DOCUMENT_DEFINITION_NAME
262 292
            = "DefaultViewDocument";
263 293
    public static String TYPENAME = "project.document.view2d";

Also available in: Unified diff