import org.simantics.db.exception.ValidationException;
import org.simantics.db.layer0.SelectionHints;
import org.simantics.db.procedure.Procedure;
+import org.simantics.db.request.Read;
import org.simantics.district.network.ontology.DistrictNetworkResource;
import org.simantics.district.network.ui.function.Functions;
import org.simantics.district.network.ui.internal.Activator;
@CanExecute
public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection) {
-// List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
-// if (elements.size() < 1)
-// return false;
-// try {
-// return Simantics.getSession().syncRequest(new Read<Boolean>() {
-//
-// @Override
-// public Boolean perform(ReadGraph graph) throws DatabaseException {
-// Layer0 L0 = Layer0.getInstance(graph);
-// Resource instanceOf = null;
-// for (Resource element : elements) {
-// if (instanceOf == null) {
-// instanceOf = graph.getSingleObject(element, L0.InstanceOf);
-// } else {
-// Resource currentInstanceOf = graph.getSingleObject(element, L0.InstanceOf);
-// if (!currentInstanceOf.equals(instanceOf)) {
-// return false;
-// }
-// }
-// }
-// return true;
-// }
-// });
-// } catch (DatabaseException e) {
-// e.printStackTrace();
-// return false;
-// }
- return true;
+ List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
+ if (elements.size() < 1)
+ return false;
+ try {
+ return Simantics.getSession().syncRequest(new Read<Boolean>() {
+
+ @Override
+ public Boolean perform(ReadGraph graph) throws DatabaseException {
+ DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+ for (Resource selection : elements) {
+ if (!graph.isInstanceOf(selection, DN.Element)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ });
+ } catch (DatabaseException e) {
+ LOGGER.error("Could not evaluate if mapping can be changed for selection {}", elements, e);
+ return false;
+ }
}
-
+
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) Object selection) {
final List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
private Map<NamedResource, Map<String, Resource>> possibleMappings = new HashMap<>();
- private Resource defaultVertexMapping;
-
protected SelectMappingDialog(Shell parentShell, CompletableFuture<Map<NamedResource, Collection<NamedResource>>> elements) {
super(parentShell);
this.elements = elements;
setTitle("Change mappings");
}
- public Resource getDefaultVertexMapping() {
- return defaultVertexMapping;
- }
-
@Override
protected Control createDialogArea(Composite parent) {
composite = (Composite) super.createDialogArea(parent);
@Override
protected void computeResult() {
+ Map<NamedResource, Collection<NamedResource>> currentElements = null;
+ try {
+ currentElements = elements.get();
+ } catch (InterruptedException | ExecutionException e) {
+ LOGGER.error("Could not get currentElements", e);
+ throw new RuntimeException("Could not get currentElements", e);
+ }
for (Map.Entry<NamedResource, Combo> combos : mappingCombos.entrySet()) {
NamedResource resource = combos.getKey();
Combo c = combos.getValue();
String item = c.getItem(c.getSelectionIndex());
-
+ Collection<NamedResource> collection = currentElements.get(resource);
Map<String, Resource> map = possibleMappings.get(resource);
Resource newMapping = map.get(item);
results.compute(newMapping, (t, u) -> {
if (u == null) {
u = new HashSet<>();
}
- u.add(resource);
+ u.addAll(collection);
return u;
});
}