Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rentz-Reichert2012-11-21 16:47:59 +0000
committerHenrik Rentz-Reichert2012-11-21 16:47:59 +0000
commit15d64215407dd81713d59b749f0d90c2495f3296 (patch)
tree73ee765195591750c53a0d2e83feff2b849de89c /plugins/org.eclipse.etrice.core.room/src
parente08fe143a1aa1a65b7f3eff5b08a8ca14d825c26 (diff)
downloadorg.eclipse.etrice-15d64215407dd81713d59b749f0d90c2495f3296.tar.gz
org.eclipse.etrice-15d64215407dd81713d59b749f0d90c2495f3296.tar.xz
org.eclipse.etrice-15d64215407dd81713d59b749f0d90c2495f3296.zip
[core.room] validation and quick fixes for threads and mappings
Diffstat (limited to 'plugins/org.eclipse.etrice.core.room/src')
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/room/util/RoomHelpers.java8
-rw-r--r--plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java22
2 files changed, 30 insertions, 0 deletions
diff --git a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/room/util/RoomHelpers.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/room/util/RoomHelpers.java
index e8ac4c1bf..125855a98 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/room/util/RoomHelpers.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/room/util/RoomHelpers.java
@@ -1253,6 +1253,14 @@ public class RoomHelpers {
return result;
}
+ public static String asString(RefPath path) {
+ StringBuilder sb = new StringBuilder();
+ for (String ref : path.getRefs()) {
+ sb.append("/"+ref);
+ }
+ return sb.toString();
+ }
+
public static ActorRef getLastActorRef(ActorContainerClass root, RefPath path) {
if (path.getRefs().isEmpty())
return null;
diff --git a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java
index 496202f3f..3e08d8723 100644
--- a/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java
+++ b/plugins/org.eclipse.etrice.core.room/src/org/eclipse/etrice/core/validation/RoomJavaValidator.java
@@ -13,8 +13,10 @@
package org.eclipse.etrice.core.validation;
+import java.util.HashSet;
import java.util.List;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
@@ -67,6 +69,9 @@ import com.google.inject.Inject;
public class RoomJavaValidator extends AbstractRoomJavaValidator {
+ public static final String THREAD_MISSING = "RoomJavaValidator.ThreadMissing";
+ public static final String DUPLICATE_ACTOR_INSTANCE_MAPPING = "RoomJavaValidator.DuplicateActorInstanceMapping";
+
@Inject ImportUriResolver importUriResolver;
@Check
@@ -260,6 +265,11 @@ public class RoomJavaValidator extends AbstractRoomJavaValidator {
public void checkSubSystem(SubSystemClass ssc){
if (ssc.getActorRefs().isEmpty())
warning("SubSystemClass must contain at least one ActorRef", RoomPackage.eINSTANCE.getActorContainerClass_ActorRefs());
+
+ if (ssc.getThreads().isEmpty())
+ error("at least one thread has to be defined", RoomPackage.Literals.SUB_SYSTEM_CLASS__THREADS, THREAD_MISSING, "LogicalThread dflt_thread");
+
+ checkMappings(ssc.getActorInstanceMappings());
}
@Check
@@ -291,8 +301,20 @@ public class RoomJavaValidator extends AbstractRoomJavaValidator {
}
}
}
+ checkMappings(aim.getActorInstanceMappings());
}
+ private void checkMappings(EList<ActorInstanceMapping> actorInstanceMappings) {
+ HashSet<String> paths = new HashSet<String>();
+ for (ActorInstanceMapping aim : actorInstanceMappings) {
+ if (!paths.add(RoomHelpers.asString(aim.getPath()))) {
+ EObject parent = aim.eContainer();
+ int idx = actorInstanceMappings.indexOf(aim);
+ error("duplicate mapping", parent, aim.eContainingFeature(), idx, DUPLICATE_ACTOR_INSTANCE_MAPPING);
+ }
+ }
+ }
+
@Check
public void checkPortCompatibility(Binding bind) {
Result result = ValidationUtil.isValid(bind);

Back to the top