astah* API 利用ガイド


【図要素の作成/削除】

  1. 各図要素の作成
  2. 各図要素の削除
astah* APIの図情報の参照/作成/編集/削除は、astah* UML, professionalでサポートしています。ただし、ER図の作成/編集/削除はastah* professionalでのみ利用可能です。

【トランザクション操作】

図要素を作成・編集・削除する場合、トランザクション操作が必要です。
トランザクション操作(モデル/図/図要素の作成・編集・削除時)をご覧ください。

【各図要素の作成】

1.モデル(IElement)を取得する
2.トランザクションを開始する
3.各DiagramEditorのsetDiagramメソッドで編集する対象の図を設定する
4.各DiagramEditorのcreateXXXメソッドに、取得もしくは作成したモデルを設定してプレゼンテーション(IPresentation)を作成する
クラス図/オブジェクト図 ClassDiagramEditor
ユースケース図 UseCaseDiagramEditor
ステートマシン図 StateMachineDiagramEditor
アクティビティ図 ActivityDiagramEditor
シーケンス図 SequenceDiagramEditor
合成構造図 CompositeStructureDiagramEditor
ER図 ERDiagramEditor
マインドマップ MindmapEditor
要求図 RequirementDiagramEditor
5.トランザクションを終了する
6.必要に応じてプロジェクトを保存する

【共通図要素の作成例】

例:指定した図に、文字列、位置を指定してノート・プレゼンテーションを作成

    public INodePresentation createNotePresentation(IDiagram dgm, String note, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        ClassDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getClassDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createNote(note, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例:指定した図に、ノート・プレゼンテーション、接続元プレゼンテーション間にノートアンカー・プレゼンテーションを作成

    public ILinkPresentation createNoteAnchorPresentation(IDiagram dgm, INodePresentation note, IPresentation annotatedElement) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        ILinkPresentation ps = null;
        ClassDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getClassDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createNoteAnchor(note, annotatedElement);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【クラス図の図要素の作成例】

例1:指定した図に、クラス・プレゼンテーションを作成

    public INodePresentation createClassPresentation(IDiagram dgm, IClass iClass, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        ClassDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getClassDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createNodePresentation(iClass, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:ルート配下にクラスを作成、かつ指定した図に位置を指定してクラス・プレゼンテーションを作成

    public INodePresentation createClassModelAndPresentation(IDiagram dgm, String className, Point2D location)
            throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        BasicModelEditor bme = AstahAPI.getAstahAPI().getProjectAccessor().getModelEditorFactory().getBasicModelEditor();
        ClassDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getClassDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //create model
            IClass iClass = bme.createClass(project, className);
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createNodePresentation(iClass, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例3:指定した図に、関連、関連元クラス・プレゼンテーション、関連・プレゼンテーションを作成

    public ILinkPresentation createAssociationPresentation(IDiagram dgm, IAssociation iAssociation, INodePresentation sourcePs, INodePresentation targetPs) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        ILinkPresentation ps = null;
        ClassDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getClassDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createLinkPresentation(iAssociation, sourcePs, targetPs);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【ユースケース図の図要素の作成例】

例1:指定した図に、位置を指定してユースケース・プレゼンテーションを作成

    public INodePresentation createUseCasePresentation(IDiagram dgm, IUseCase iUseCase, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        UseCaseDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getUseCaseDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createNodePresentation(iUseCase, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:指定した図に、拡張、拡張元ユースケース・プレゼンテーション、拡張先ユースケース・プレゼンテーションで拡張・プレゼンテーションを作成

    public ILinkPresentation createExtendPresentation(IDiagram dgm, IExtend iExtend, INodePresentation sourcePs, INodePresentation targetPs) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        ILinkPresentation ps = null;
        UseCaseDiagramEditor cde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getUseCaseDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cde.setDiagram(dgm);
            //create presentation
            ps = cde.createLinkPresentation(iExtend, sourcePs, targetPs);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【ステートマシン図の図要素の作成例】

例1:指定した図に、名前、親プレゼンテーション、位置を指定して状態・プレゼンテーションを作成

    public INodePresentation createStatePresentation(IDiagram dgm, String stateName, INodePresentation parent, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        StateMachineDiagramEditor ste = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getStateMachineDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            ste.setDiagram(dgm);
            //create presentation
            ps = ste.createState(stateName, parent, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:指定した図に、遷移元IVertex・プレゼンテーション、遷移先IVertex・プレゼンテーション間における遷移・プレゼンテーションを作成

    public ILinkPresentation createTransitionPresentation(IDiagram dgm, INodePresentation sourcePs, INodePresentation targetPs) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        ILinkPresentation ps = null;
        StateMachineDiagramEditor ste = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getStateMachineDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            ste.setDiagram(dgm);
            //create presentation
            ps = ste.createTransition(sourcePs, targetPs);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【アクティビティ図の図要素の作成例】

例1:指定した図に、名前、位置を指定してアクション・プレゼンテーションを作成

    public INodePresentation createActionPresentation(IDiagram dgm, String name, Point2D location) throws ClassNotFoundException, InvalidUsingException {
        INodePresentation ps = null;
        ActivityDiagramEditor ade = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getActivityDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            // set diagram
            ade.setDiagram(dgm);
            // create presentation
            ps = ade.createAction(name, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【シーケンス図の図要素の作成例】

例1:指定した図に、名前、位置を指定して、ライフライン・プレゼンテーションを作成

    public INodePresentation createLifelinePresentation(IDiagram dgm, String name, double locX) throws ClassNotFoundException, InvalidUsingException {
        INodePresentation ps = null;
        SequenceDiagramEditor sde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getSequenceDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            // set diagram
            sde.setDiagram(dgm);
            // create presentation
            ps = sde.createLifeline(name, locX);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:指定した図に、追加する複合フラグメントの名前、種類、位置、幅、高さを指定して、複合フラグメント・プレゼンテーションを作成

    public INodePresentation createCombinedFragmentPresentation(IDiagram dgm, String name, String interactionOperator, Point2D location, double width, double height)
            throws ClassNotFoundException, InvalidUsingException {
        INodePresentation ps = null;
        SequenceDiagramEditor sde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getSequenceDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            // set diagram
            sde.setDiagram(dgm);
            // create presentation
            ps = sde.createCombinedFragment(name, interactionOperator, location, width, height);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【合成構造図の図要素の作成例】

例1:指定した図に、構造化クラス・プレゼンテーションを作成

    public INodePresentation createClassPresentation(IDiagram dgm, IClass iClass, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        CompositeStructureDiagramEditor cse = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getCompositeStructureDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cse.setDiagram(dgm);
            //create presentation
            ps = cse.createStructuredClassPresentation(iClass, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:指定した構造化クラスに内部パート・プレゼンテーションを作成

    public INodePresentation createPartPresentation(IDiagram dgm, IClass parentClass, IClass partBaseClass, INodePresentation parentClassPresentation, String partName, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        BasicModelEditor bme = ModelEditorFactory.getBasicModelEditor();
        CompositeStructureDiagramEditor cse = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getCompositeStructureDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            IAssociation asso = bme.createAssociation(parentClass, partBaseClass, "", "", partName);
            IAttribute[] memberEnds = asso.getMemberEnds();
            memberEnds[0].setComposite();
            
            //set diagram
            cse.setDiagram(dgm);
            //create presentation
            ps = cde.createNodePresentation(memberEnds[1], parentClassPresentation, location);
            
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例3:指定した構造化クラスに外部パート・プレゼンテーションを作成

    public INodePresentation createExternalPartPresentation(IDiagram dgm, IClass partBaseClass, INodePresentation parentClassPresentation, IClass externalPartBaseClass, IAttribute part1, String externalPartName, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        BasicModelEditor bme = ModelEditorFactory.getBasicModelEditor();
        CompositeStructureDiagramEditor cse = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getCompositeStructureDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            IAssociation asso = bme.createAssociation(partBaseClass, externalPartBaseClass, "", "", externalPartName);
            IAttribute[] memberEnds = asso.getMemberEnds();
            IConnector connector = csme.createConnector(part1, null, memberEnds[1], null);
            
            //set diagram
            cse.setDiagram(dgm);
            //create presentation
            ps = cde.createNodePresentation(memberEnds[1], parentClassPresentation, location);
            
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例4:指定した構造化クラス/パートプレゼンテーションに、ポート・プレゼンテーションを作成

    public INodePresentation createPortPresentation(IDiagram dgm, INodePresentation parentNode) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        CompositeStructureDiagramEditor cse = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getCompositeStructureDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            cse.setDiagram(dgm);
            //create presentation
            ps = cse.createPortPresentation(parentNode);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【ER図の図要素の作成例】

例1:指定した図に、位置を指定してERエンティティ・プレゼンテーションを作成

    public INodePresentation createEREntityPresentation(IDiagram dgm, IEREntity iEREntity, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        ERDiagramEditor ede = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getERDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            ede.setDiagram(dgm);
            //create presentation
            ps = ede.createNodePresentation(iEREntity, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:指定した図に、ERリレーションシップ、ERリレーションシップ元ERエンティティ・プレゼンテーション、ERリレーションシップ先エンティティ・プレゼンテーション間にERリレーションシップ・プレゼンテーションを作成

    public ILinkPresentation createERRelationshipPresentation(IDiagram dgm, IERRelationship iERRelationship, INodePresentation sourcePs, INodePresentation targetPs) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        ILinkPresentation ps = null;
        ERDiagramEditor ede = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getERDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            ede.setDiagram(dgm);
            //create presentation
            ps = ede.createLinkPresentation(iERRelationship, sourcePs, targetPs);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【マインドマップ図の図要素作成例】

例1:指定したマインドマップのルートトピック配下に、トピック・プレゼンテーションを作成

    public INodePresentation createTopicPresentation(IMindMapDiagram dgm, String topicName) 
            throws InvalidUsingException, ClassNotFoundException {
        INodePresentation ps = null;
       	MindmapEditor mme = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getMindmapEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            mme.setDiagram(dgm);
            INodePresentation iRootTopic = dgm.getRoot();
            //create presentation
            ps = mme.addChild(iRootTopic, topicName);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

例2:トピック間リンク・プレゼンテーションを作成

    public ILinkPresentation createMMLinkPresentation(IDiagram dgm, INodePresentation sourcePs, INodePresentation targetPs) 
            throws ClassNotFoundException, InvalidUsingException {
        ILinkPresentation ps = null;
       	MindmapEditor mme = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getMindmapEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            mme.setDiagram(dgm);
            //create presentation
            ps = mme.createMMLinkPresentation(sourcePs, targetPs);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【要求図の図要素の作成例】

例1:指定した図に、要求・プレゼンテーションを作成

    public INodePresentation createRequirementPresentation(IDiagram dgm, IRequirement iRequirement, Point2D location) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
        INodePresentation ps = null;
        RequirementDiagramEditor rde = AstahAPI.getAstahAPI().getProjectAccessor().getDiagramEditorFactory().getRequirementDiagramEditor();
        try {
            TransactionManager.beginTransaction();
            //set diagram
            rde.setDiagram(dgm);
            //create presentation
            ps = rde.createNodePresentation(iRequirement, location);
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            e.printStackTrace();
            TransactionManager.abortTransaction();
        }
        return ps;
    }

【各図要素の削除】

1.プレゼンテーション(IPresentqation)を取得する
2.トランザクションを開始する
3.各DiagramEditorのsetDiagramメソッドで編集する図を設定する
4.各DiagramEditorのdeletePresentationメソッドに、削除したいプレゼンテーションを渡してプレゼンテーション(IPresentation)を削除する
5.トランザクションを終了する
6.必要に応じてプロジェクトを保存する

例:図の削除

	private void deletePresentation(IDiagram diagram, IPresentation ps) throws ClassNotFoundException, InvalidEditingException, InvalidUsingException {
		ERDiagramEditor editor = DiagramEditorFactory.getERDiagramEditor();
		try {
			TransactionManager.beginTransaction();
			editor.setDiagram(diagram);
			editor.deletePresentation(ps);
			TransactionManager.endTransaction();
		} catch (InvalidEditingException e) {
			e.printStackTrace();
			TransactionManager.abortTransaction();
		}
	}


HOME