Revision 47045
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