/** * Establish a refinement relation between two existing responsibilities * * @param parent The source responsibility * @param child The target responsibility */ public boolean refineResponsibility(ArchEResponsibilityVO parent, ArchEResponsibilityVO child) { ArchERelation rel = this.getRelation(parent, child, ArchERefinementRelationVO.class.getName()); if (rel == null) { // There's no previous refinement between the two responsibilities ArchERefinementRelationVO refinement = new ArchERefinementRelationVO(this.version); refinement.setParent(parent); refinement.setChild(child); refVOs.add(refinement); // The child in the refinement relation "inherits" the scenario // translations from its parent responsibility ArchETranslationRelationVO translation = null; ArchETranslationRelationVO newTranslation = null; ArchEScenarioVO baseScenario = null; List<ArchETranslationRelationVO> derivedTranslations = new ArrayList<ArchETranslationRelationVO>(); for (Iterator<ArchETranslationRelationVO> it = trVOs.iterator(); it.hasNext(); ) { translation = it.next(); baseScenario = translation.getParent(); if (parent.equals(translation.getChild()) && !this.existTranslation(baseScenario, child)) { // A translation relation exists for the parent responsibility newTranslation = new ArchETranslationRelationVO(this.version); newTranslation.setParent(baseScenario); newTranslation.setChild(child); derivedTranslations.add(newTranslation); } } for (Iterator<ArchETranslationRelationVO> it = derivedTranslations.iterator(); it.hasNext(); ) trVOs.add(it.next()); return (true); } return (false); }