| /******************************************************************************* |
| * Copyright (c) 2004-2008 Andras Schmidt, Andras Balogh, Istvan Rath and Daniel Varro |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Andras Schmidt, Andras Balogh, Istvan Rath - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.viatra2.modelChecker; |
| |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.viatra2.core.IEntity; |
| import org.eclipse.viatra2.core.IModelElement; |
| import org.eclipse.viatra2.core.IRelation; |
| import org.eclipse.viatra2.modelChecker.impl.ConsistencyErrorMessages; |
| import org.eclipse.viatra2.tags.InfoTag; |
| import org.eclipse.viatra2.tags.TagKind; |
| |
| /** |
| * POJO implementing problem carriers. |
| * @author Andras Schmidt, Istvan Rath |
| * |
| */ |
| public class Problem extends InfoTag implements IProblem { |
| |
| |
| IModelElement endPoint; |
| |
| IRelation rel; |
| |
| IRelation relType; |
| |
| IEntity otherEntity; |
| |
| EProblemType problemType; |
| |
| public Problem(IModelElement point, IRelation rel, IRelation type, |
| EProblemType problemType) { |
| super("", null, 3, 1); |
| endPoint = point; |
| this.rel = rel; |
| relType = type; |
| otherEntity = null; |
| this.problemType = problemType; |
| generateErrorMessage(); |
| } |
| |
| public Problem(IModelElement point, IRelation rel, IEntity otherEntity, |
| EProblemType problemType) { |
| super("", null, 3, 1); |
| endPoint = point; |
| this.rel = rel; |
| relType = null; |
| this.otherEntity = otherEntity; |
| this.problemType = problemType; |
| generateErrorMessage(); |
| } |
| |
| public IModelElement getEndPoint() { |
| return endPoint; |
| } |
| |
| public IRelation getRelation() { |
| return rel; |
| } |
| |
| public IRelation getRelationType() { |
| return relType; |
| } |
| |
| public EProblemType getProblemType() { |
| return problemType; |
| } |
| |
| public String getMessage() { |
| return message; |
| } |
| |
| protected void generateErrorMessage() { |
| if (problemType.compareTo(EProblemType.INVALID_RELATION_SOURCE_TYPE) == 0) { |
| message = ConsistencyErrorMessages.INVALID_RELATION_SOURCE_TYPE; |
| String[] context = new String[] { endPoint.getFullyQualifiedName(), |
| rel.getFullyQualifiedName(), |
| relType.getFrom().getFullyQualifiedName(), |
| relType.getFullyQualifiedName(), }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.INVALID_RELATION_TARGET_TYPE) == 0) { |
| message = ConsistencyErrorMessages.INVALID_RELATION_TARGET_TYPE; |
| String[] context = new String[] { endPoint.getFullyQualifiedName(), |
| rel.getFullyQualifiedName(), |
| relType.getTo().getFullyQualifiedName(), |
| relType.getFullyQualifiedName(), }; |
| bind(context); |
| } else if (problemType.compareTo(EProblemType.AGGREGATION_INVALID) == 0) { |
| message = ConsistencyErrorMessages.AGGREGATION_INVALID; |
| String[] context = new String[] { relType.getFullyQualifiedName(), |
| rel.getFullyQualifiedName(), |
| rel.getTo().getFullyQualifiedName(), |
| endPoint.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType.compareTo(EProblemType.INVALID_RELATION_SOURCE) == 0) { |
| message = ConsistencyErrorMessages.INVALID_RELATION_SOURCE; |
| String[] context = new String[] { rel.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType.compareTo(EProblemType.INVALID_RELATION_TARGET) == 0) { |
| message = ConsistencyErrorMessages.INVALID_RELATION_TARGET; |
| String[] context = new String[] { rel.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.OUTGOING_MULTIPLICITY_CONSTRAINT_VIOLATED) == 0) { |
| message = ConsistencyErrorMessages.OUTGOING_MULTIPLICITY_CONSTRAINT_VIOLATED; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| relType.getMultiplicity().toString(), |
| endPoint.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.INCOMING_MULTIPLICITY_CONSTRAINT_VIOLATED) == 0) { |
| message = ConsistencyErrorMessages.INCOMING_MULTIPLICITY_CONSTRAINT_VIOLATED; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| relType.getMultiplicity().toString(), |
| endPoint.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.MULTIPLICITY_REFINEMENT_INVALID) == 0) { |
| message = ConsistencyErrorMessages.MULTIPLICITY_REFINEMENT_INVALID; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| rel.getMultiplicity().toString(), |
| relType.getFullyQualifiedName(), |
| relType.getMultiplicity().toString() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.AGGREGATION_REFINEMENT_INVALID) == 0) { |
| message = ConsistencyErrorMessages.AGGREGATION_REFINEMENT_INVALID; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| relType.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.INVALID_REFINEMENT_SOURCE_TYPE) == 0) { |
| message = ConsistencyErrorMessages.INVALID_REFINEMENT_SOURCE_TYPE; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| relType.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.INVALID_REFINEMENT_TARGET_TYPE) == 0) { |
| message = ConsistencyErrorMessages.INVALID_REFINEMENT_TARGET_TYPE; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| relType.getFullyQualifiedName() }; |
| bind(context); |
| } else if (problemType |
| .compareTo(EProblemType.INVALID_REFINEMENT) == 0) { |
| message = ConsistencyErrorMessages.INVALID_REFINEMENT; |
| String[] context = new String[] { rel.getFullyQualifiedName(), |
| otherEntity.getFullyQualifiedName() }; |
| bind(context); |
| } |
| |
| } |
| |
| // try {
|
| // String str = (String) |
| // this.getClass().getDeclaredField(problemType.name()).get(null);
|
| // message = str;
|
| // } catch (IllegalArgumentException e) {
|
| // e.printStackTrace();
|
| // message = "";
|
| // } catch (SecurityException e) {
|
| // e.printStackTrace();
|
| // message = "";
|
| // } catch (IllegalAccessException e) {
|
| // e.printStackTrace();
|
| // message = "";
|
| // } catch (NoSuchFieldException e) {
|
| // e.printStackTrace();
|
| // message = "";
|
| // }
|
| |
| /** |
| * Binding the '{N}' (N = 1..4) strings to contextual conditions in |
| * 'context' |
| * |
| * @param context |
| * : array of context-sensitive Strings |
| */ |
| public void bind(String[] context) { |
| if (context.length >= 1) { |
| message = message.replace("{1}", context[0]); |
| } |
| if (context.length >= 2) { |
| message = message.replace("{2}", context[1]); |
| } |
| if (context.length >= 3) { |
| message = message.replace("{3}", context[2]); |
| } |
| if (context.length >= 4) { |
| message = message.replace("{4}", context[3]); |
| } |
| } |
| |
| public Set<IModelElement> getAssociatedElements() { |
| HashSet<IModelElement> r = new HashSet<IModelElement>(); |
| if (this.endPoint!=null) r.add(endPoint); |
| if (this.rel!=null) r.add(this.rel); |
| if (this.relType!=null) r.add(this.relType); |
| return r; |
| } |
| |
| public TagKind getKind() { |
| return TagKind.MODELING_PROBLEM; |
| } |
| } |