org.argouml.uml.cognitive.critics
Class CrDupRoleNames

java.lang.Object
  extended byorg.argouml.cognitive.critics.Critic
      extended byorg.argouml.uml.cognitive.critics.CrUML
          extended byorg.argouml.uml.cognitive.critics.CrDupRoleNames
All Implemented Interfaces:
Poster, Serializable

public class CrDupRoleNames
extends CrUML

A critic to check that the ends of an association all have distinct names.

This is the first well-formedness rule for associations in the UML 1.3 standard (see section 2.5.3 of the standard).

See Also:
ArgoUML User Manual: Duplicate end (role) names for <association>, Serialized Form

Field Summary
 
Fields inherited from class org.argouml.uml.cognitive.critics.CrUML
DEC_BEHAVIOR, DEC_CLASS_SELECTION, DEC_CODE_GEN, DEC_CONTAINMENT, DEC_EXPECTED_USAGE, DEC_INHERITANCE, DEC_INSTANCIATION, DEC_METHODS, DEC_MODULARITY, DEC_NAMING, DEC_PATTERNS, DEC_PLANNED_EXTENSIONS, DEC_RELATIONSHIPS, DEC_STATE_MACHINES, DEC_STEREOTYPES, DEC_STORAGE
 
Fields inherited from class org.argouml.cognitive.critics.Critic
DEFAULT_CLARIFIER, KT_COMPLETENESS, KT_CONSISTENCY, KT_CORRECTNESS, KT_DESIGNERS, KT_EXPERIENCIAL, KT_OPTIMIZATION, KT_ORGANIZATIONAL, KT_PRESENTATION, KT_SEMANTICS, KT_SYNTAX, KT_TOOL, NO_PROBLEM, PROBLEM_FOUND
 
Constructor Summary
CrDupRoleNames()
          Constructor for the critic.
 
Method Summary
 boolean predicate2(Object dm, Designer dsgr)
          The trigger for the critic.
 
Methods inherited from class org.argouml.uml.cognitive.critics.CrUML
expand, predicate, setHeadline, setResource, toDoItem
 
Methods inherited from class org.argouml.cognitive.critics.Critic
addControlRec, addKnowledgeType, addSupportedDecision, addSupportedGoal, addTrigger, beActive, beInactive, canFixIt, containsKnowledgeType, critique, defaultMoreInfoURL, fixIt, getArg, getArgs, getClarifier, getControlRec, getCriticCategory, getCriticKey, getCriticName, getCriticType, getDecisionCategory, getDescription, getDescriptionTemplate, getExpertEmail, getHeadline, getHeadline, getHeadline, getKnowledgeTypes, getMoreInfoURL, getMoreInfoURL, getPriority, getPriority, getSupportedDecisions, getSupportedGoals, getTriggerMask, getWizardClass, initWizard, isActive, isEnabled, isRelevantToDecisions, isRelevantToGoals, makeWizard, matchReason, postItem, reasonCodeFor, setArg, setArgs, setDecisionCategory, setDescription, setEnabled, setExpertEmail, setKnowledgeTypes, setKnowledgeTypes, setKnowledgeTypes, setKnowledgeTypes, setMoreInfoURL, setPriority, snooze, snoozeOrder, stillValid, supports, supports, toString, unsnooze
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CrDupRoleNames

public CrDupRoleNames()

Constructor for the critic.

Sets up the resource name, which will allow headline and description to found for the current locale. Provides a design issue category (NAMING) and add triggers for "connection" and "end_name".

Method Detail

predicate2

public boolean predicate2(Object dm,
                          Designer dsgr)

The trigger for the critic.

We do not handle association roles, which are a subclass of association. An association role should be fine, if its parent is OK, since it must have the same or fewer ends than its parent.

Note. ArgoUML does not currently have a constructor to check that an association role is more tightly constrained than its parent.

Then loop through the ends, building a vector of end names that we have seen, and looking to see if the current end is already in that vector. We ignore any ends that are unnamed, or have the empty string as name.

Whilst this is an O(n^2) algorithm, most associations have only two ends, so this is unlikely to cause difficulty.

Overrides:
predicate2 in class CrUML
Parameters:
dm - the Object to be checked against the critic.
dsgr - the Designer creating the model. Not used, this is for future development of ArgoUML.
Returns:
PROBLEM_FOUND if the critic is triggered, otherwise NO_PROBLEM.


ArgoUML © 1996-2004 (20050222)ArgoUML HomepageArgoUML Developers' pageArgoUML Cookbook