import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
import javax.inject.Named;
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.DistrictNetworkUtil;
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);
@Override
public void perform(WriteGraph graph) throws DatabaseException {
- DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-
for (Map.Entry<Resource, Collection<NamedResource>> entry : results.entrySet()) {
- Resource newMapping = entry.getKey();
- Collection<NamedResource> elements = entry.getValue();
- for (NamedResource element : elements) {
- graph.deny(element.getResource(), DN.HasMapping);
- graph.claim(element.getResource(), DN.HasMapping, newMapping);
- }
+ List<Resource> elements = entry.getValue().stream()
+ .map(NamedResource::getResource)
+ .collect(Collectors.toList());
+ DistrictNetworkUtil.changeMappingType(graph, entry.getKey(), elements);
}
}
});
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);