org.argouml.uml.cognitive.critics
Class CrNavFromInterface

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

public class CrNavFromInterface
extends CrUML

A critic to detect navigation from an Interface to a Class in an Association. This is not permitted in UML, since it would require the Interface to hold state to represent the association reference.

The critic will trigger whenever an association between an interface and a class is navigable from the interface.

See Also:
ArgoUML User Manual: N, Serialized Form

Field Summary
 
Fields inherited from class org.argouml.uml.cognitive.critics.CrUML
cat, decBEHAVIOR, decCLASS_SELECTION, decCODE_GEN, decCONTAINMENT, decEXPECTED_USAGE, decINHERITANCE, decINSTANCIATION, decMETHODS, decMODULARITY, decNAMING, decPATTERNS, decPLANNED_EXTENSIONS, decRELATIONSHIPS, decSTATE_MACHINES, decSTEREOTYPES, decSTORAGE
 
Fields inherited from class org.argouml.cognitive.critics.Critic
_clarifier, _knowledgeTypes, _numCriticsFired, _supportedDecisions, _supportedGoals, _triggerMask, DEFAULT_CLARIFIER, ENABLED, 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, RESOURCE_BUNDLE, SNOOZE_ORDER
 
Constructor Summary
CrNavFromInterface()
          Constructor for the critic.
 
Method Summary
 boolean predicate2(java.lang.Object dm, Designer dsgr)
          The trigger for the critic.
 
Methods inherited from class org.argouml.uml.cognitive.critics.CrUML
expand, predicate, setHeadline, setResource
 
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, 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, toDoItem, toString, unsnooze
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CrNavFromInterface

public CrNavFromInterface()

Constructor for the critic.

Sets up the resource name, which will allow headline and description to found for the current locale (replaces deprecated setHeadline and sd methods). Provides a design issue category (RELATIONSHIPS) and knowledge type (SYNTAX). Adds trigger "end_navigable".

Method Detail

predicate2

public boolean predicate2(java.lang.Object dm,
                          Designer dsgr)

The trigger for the critic.

Applies to Associations only, not AssociationRoles. The reason is that an AssociationRole cannot have greater navigability than the Association it specializes, so if the critic has addressed the Association, the AssociationRole will effectively be addressed. There may of course be a need for a critic to check that Association Roles do match their parents in this respect!

As a consequence, we also don't need to check for associations with ClassifierRoles.

Iterate over all the AssociationEnds. We only have a problem if:

  1. There is an end connected to an Interface; and

  2. An end other than that end is navigable.

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-2003 (20040125)ArgoUML Project HomeArgoUML Cookbook