概要

このページでは、astah* SysML APIを使って、図、モデル、プレゼンテーションを作成、編集、削除する方法を、主にサンプルを用いて紹介します。


トランザクション

APIを使って、図、モデル、プレゼンテーションを作成、編集、削除する場合は、まずトランザクション処理を実行する必要があります。また、下記条件を満たしていない場合は例外が発生します。

  • プロジェクトアクセサにプロジェクトを登録していること
  • 編集APIが対応しているエディションを利用していること
  • 対象が編集可能であること

トランザクションは、astah*のプロジェクトに対して行われる更新処理の単位です。beginTransactionメソッドからendTransactionメソッドまでが1つの更新処理となり、undo/redoした場合はこの処理単位で行われます。

メソッド 実行内容
beginTransaction トランザクションを開始する
endTransaction トランザクションを確定する
abortTransaction トランザクションを取消す


Information
例外処理には、abortTransaction
例外が発生した場合は、必ずabortTransactionメソッドを呼び、その後、beginTransactionでトランザクションを再開してください。


図を作成する

図の作成前は、必ずトランザクションを開始してください。


各図のDiagramEditorと Createメソッド


ModelEditor
ブロック定義図 createBlockDefinitionDiagram
内部ブロック図 createInternalBlockDiagram
パラメトリック図 createParametricDiagram
要求図 createRequirementDiagram
ユースケース図 createUseCaseDiagram
シーケンス図 createSequenceDiagram
アクティビティ図 createActivityDiagram
ステートマシン図 createStateMachineDiagram
マインドマップ createMindmap


ブロック定義図を作成する


public IDiagram createBlockDefinitionDiagram(IModel project,
 String diagramName) throws InvalidUsingException,
  ClassNotFoundException
{
 ProjectAccessor projectAccessor = AstahAPI.getAstahAPI().
 getProjectAccessor();
 BlockDefinitionDiagramEditor bdde = projectAccessor.
 getDiagramEditorFactory().getBlockDefinitionDiagramEditor();
 try {
   //To begin the transaction
	 TransactionManager.beginTransaction();
	 IDiagram iBlockDefinitionDiagram =
	 bdde.createBlockDefinitionDiagram
	 (project, diagramName);
	 //To Close the transaction
	 TransactionManager.endTransaction();
	 return iBlockDefinitionDiagram;
	} catch (InvalidEditingException e) {
	   e.printStackTrace();
		 //To abort the transaction
		 TransactionManager.abortTransaction();
		}
	}

図を削除する

ブロック定義図を削除する

public void deleteDiagram(IDiagram diagram) throws
 ClassNotFoundException, InvalidUsingException {
   ProjectAccessor projectAccessor = AstahAPI.getAstahAPI().
	 getProjectAccessor();
	 BlockDefinitionDiagramEditor bdde = projectAccessor.
	 getDiagramEditorFactory().
	 getBlockDefinitionDiagramEditor();
	 try {
	    //To begin the transaction
			TransactionManager.beginTransaction();
			bdde.deleteDiagram();
			//To Close the transaction
			TransactionManager.endTransaction();
		} catch (InvalidEditingException e) {
		   e.printStackTrace();
			 //To abort the transaction
			 TransactionManager.abortTransaction();
		}
 }

モデルを作成する

各ModelEditorのcreateメソッドを用いて、ユースケースなどのモデルを作成します。例えば、SequenceDiagramEditorのcreateLifelineメソッドなどを用いて、シーケンス図のライフラインなどのモデルを作成できます。SysmlModelEditorのDeleteメソッドでモデルを削除できます。


ModelEditor
ブロック定義図 SysmlModelEditor (例: createBlock())
内部ブロック図 SysmlModelEditor (例: CreateFullPort())
パラメトリック図 SysmlModelEditor (例: createConstraintProperty()
要求図 SysmlModelEditor (例: createRequirement())
ユースケース図 UseCaseModelEditor (例: createUseCase())
シーケンス図 SequenceDiagramEditor (例: createLifeline())
アクティビティ図 ActivityDiagramEditor (例: createPartition())
マインドマップ MindmapEditor(例: createTopic())


パッケージとその配下に、関連を持つブロック2つを作成する

public class APIForEditingModelsSample {
  public static void main(String[] args) {
	try {
	System.out.println("Creating new project...");
	// プロジェクトの作成、ルートモデルの取得
	ProjectAccessor prjAccessor =
	AstahAPI.getAstahAPI().getProjectAccessor();
	prjAccessor.create("./SampleModel.asml");
	IModel project = prjAccessor.getProject();
	System.out.println("Creating new elements
	in the project...");

  // トランザクション開始
	TransactionManager.beginTransaction();

  // ブロック定義図にモデルを作成
	SysmlModelEditor sysmlModelEditor =
	ModelEditorFactory.getSysmlModelEditor();
	// パッケージ作成
	IPackage packageA = sysmlModelEditor.createPackage(project, "PackageA");
	// 指定したパッケージ内にブロックを作成
	IBlock blockA = sysmlModelEditor.createBlock(packageA, "BlockA");
	// ブロックに定義を設定
	blockA.setDefinition("Definition of BlockA");
	// ブロックに操作を追加
	sysmlModelEditor.createOperation(BlockA, "operation0", "void");
	// 指定したパッケージにブロックを作成
	IBlock blockB = sysmlModelEditor.createBlock(packageA, "BlockB");
	// ブロック間に関連を追加
	sysmlModelEditor.createAssociation(blockA,
	blockB, "association name", "blockA end", "blockB end");
	// トランザクションの終了
	TransactionManager.endTransaction();
	// プロジェクトを保存
	prjAccessor.save();
	// プロジェクトを閉じる
	prjAccessor.close();
 	System.out.println("Finished");
  } catch (LicenseNotFoundException e) {
    e.printStackTrace();
  } catch (ProjectNotFoundException e) {
    e.printStackTrace();
  } catch (ProjectLockedException e) {
    e.printStackTrace();
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
  } catch (InvalidEditingException e) {
  // Abort transaction
  TransactionManager.abortTransaction();
  // Get an exception message
  System.err.println(e.getMessage()); e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Throwable e) {
   e.printStackTrace();
  }
 }
}

ブロック名と定義を編集する

try {
  TransactionManager.beginTransaction();
	SysmlModelEditor bme =
	ModelEditorFactory.getSysmlModelEditor();

	// ブロックを作成
	IBlock block0 = bme.createBlock(project, "block0");

	// ブロックに名前を設定
 block0.setName("new block0 name");

 // ブロックに定義を設定
	block0.setDefinition("Definition of the block0");

	TransactionManager.endTransaction();
 }

 catch (InvalidEditingException e) {
  TransactionManager.abortTransaction();
}

プレゼンテーションを作成する

ダイアグラムエディタ

プレゼンテーションの作成や編集は、ダイアグラムエディタ(DiagramEditor)を使用して行います。 プレゼンテーションを作成する前に、各DiagramEditorのsetDiagram(IDiagram diagram)を用いて対象図を設定します。

try {
  TransactionManager.beginTransaction();
	IBlockDefinitionDiagram blockDefinitionDiagram0 =
	 editor.createBlockDefinitionDiagram(project,
	  "blockDefinitionDiagram0");
	BlockDefinitionDiagramEditor editor =
	 diagramEditorFactory.getBlockDefinitionDiagramEditor();
	//set the target diagram before calling diagramEditor
	editor.setDiagram(blockDefinitionDiagram0);
	SysmlModelEditor bme = AstahAPI.getAstahAPI().getProjectAccessor()
	.getModelEditorFactory().getSysmlModelEditor();
	IBlock iBlock = bme.createBlock(project, "Block1_for_delete");
	//Create a block presentation on blockDefinitionDiagram0
	INodePresentation blockPs = editor.createNodePresentation
	(iBlock, new Point2D.Double(10.0, 10.0));
	TransactionManager.endTransaction();
} catch (InvalidEditingException e) {
	 TransactionManager.abortTransaction();
	 fail();
}

DiagramEditorで図を作成した場合、作成された図はDiagramEditorに設定されます。

UseCaseModelEditor me = AstahAPI.getAstahAPI().
getProjectAccessor().getModelEditorFactory().
getUseCaseModelEditor();
SysmlModelEditor bme = AstahAPI.getAstahAPI().
getProjectAccessor().getModelEditorFactory().
getSysmlModelEditor();
BlockDefinitionDiagramEditor de = AstahAPI.getAstahAPI().
getProjectAccessor().getDiagramEditorFactory().
getBlockDefinitionDiagramEditor();
try {
  TransactionManager.beginTransaction();
  IUseCase iUseCase = me.createUseCase(project,
	 "UseCase0"); assertNotNull(iUseCase);
  //作成したユースケース配下にブロック定義図を作成
	de.createBlockDefinitionDiagram(iUseCase, "Block Definition diagram2");
	IBlock iBlock = bme.createBlock(project, "Block1_for_delete");
	//ブロック定義図上にブロックを作成
	//The blockDefinitionDiagram created by
	 BlockDefinitionDiagramEditor has been set automatically.
	INodePresentation blockPs = de.createNodePresentation
	(iBlock, new Point2D.Double(10.0, 10.0));
	TransactionManager.endTransaction();
} catch (InvalidEditingException e) {
	 TransactionManager.abortTransaction();
}

図上にノートを作成する

public INodePresentation createNotePresentation(IDiagram dgm,
 String note, Point2D location) throws ClassNotFoundException,
  InvalidEditingException, InvalidUsingException {
 INodePresentation ps = null;
 BlockDefinitionDiagramEditor bdde = AstahAPI.getAstahAPI().
 getProjectAccessor().getDiagramEditorFactory().
 getBlockDefinitionDiagramEditor();
 try {
  TransactionManager.beginTransaction();
	//set diagram bdde.setDiagram(dgm);
	//create presentation
	ps = bdde.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;
 BlockDefinitionDiagramEditor bdde = AstahAPI.getAstahAPI().
 getProjectAccessor().getDiagramEditorFactory().
 getBlockDefinitionDiagramEditor();
 try {
   TransactionManager.beginTransaction();
	 //set diagram bdde.setDiagram(dgm);
	 //create presentation
	 ps = bdde.createNoteAnchor(note, annotatedElement);
	 TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	   e.printStackTrace();
	   TransactionManager.abortTransaction();
	}
	return ps;
}

ブロック定義図上のプレゼンテーション作成例

ルート配下にブロックモデルを作成し、且つ位置を指定して図上にブロックを描画する

public INodePresentation createBlockModelAndPresentation(IDiagram dgm,
 String blockName, Point2D location) throws ClassNotFoundException,
  InvalidEditingException, InvalidUsingException {
 INodePresentation ps = null;
 SysmlModelEditor bme = AstahAPI.getAstahAPI().getProjectAccessor().
 getModelEditorFactory().getSysmlModelEditor();
 BlockDefinitionDiagramEditor bdde = AstahAPI.getAstahAPI().
 getProjectAccessor().getDiagramEditorFactory().
 getBlockDefinitionDiagramEditor();
 try {
   TransactionManager.beginTransaction();
	 //create model
	 IBlock iBlock = bme.createBlock(project, blockName);
	 //set diagram
	 bdde.setDiagram(dgm);
	 //create presentation
	 ps = bdde.createNodePresentation(iBlock, location);
	 TransactionManager.endTransaction();
 } catch (InvalidEditingException e) {
   e.printStackTrace();
	 TransactionManager.abortTransaction();
 }
 return ps;
}

関連を描画する

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

内部ブロック図

パートを描画する

外部パートの場合は、createPartPresentationcreateExternalPartPresentationに置き換えてください。

public INodePresentation createPartPresentation(IBlock parent,
 String partName, IBlock type) throws ClassNotFoundException,
  InvalidEditingException, InvalidUsingException {
 INodePresentation ps = null;
 SysmlModelEditor sme = ModelEditorFactory.getSysmlModelEditor();
 InternalBlockDiagramEditor de = AstahAPI.getAstahAPI().
 getProjectAccessor().getDiagramEditorFactory().
 getInternalBlockDiagramEditor();
 try {
   TransactionManager.beginTransaction();
	 IInternalBlockDiagram dgm = de.createInternalBlockDiagram
	 (parent, "dgm0");
	 //create presentation
	 IAttribute part = sme.createPart(parent, partName, type);
	 INodePresentation partPs = de.createNodePresentation(part,
	  new Point2D.Double(10.0, 10.0));
	 TransactionManager.endTransaction();
} catch (InvalidEditingException e) {
   e.printStackTrace();
	 TransactionManager.abortTransaction();
	}
	return ps;
}

ブロックにポートを追加する

public INodePresentation createPortPresentation()
 throws ClassNotFoundException, InvalidEditingException,
  InvalidUsingException {
  INodePresentation portPs = null;
	SysmlModelEditor sme = ModelEditorFactory.getSysmlModelEditor();
	InternalBlockDiagramEditor de = AstahAPI.getAstahAPI().
	getProjectAccessor().getDiagramEditorFactory().
	getInternalBlockDiagramEditor();
	IModel project = prjAccessor.getProject();
	try {
	  TransactionManager.beginTransaction();
	  IBlock block0 = bme.createBlock(project, "Block0");
	  IBlock block1 = bme.createBlock(project, "Block1");
	  IInternalBlockDiagram dgm = de.createInternalBlockDiagram
		(block0, "dgm0");
	  IAttribute part0 = bme.createPart(block0, "part0", block1);
	  IPort port1 = bme.createPort(block1, "port1");
	  INodePresentation partPs = de.createNodePresentation(part0,
		 new Point2D.Double(10.0, 10.0));
	  INodePresentation portPs = de.createNodePresentation(port1,
		 partPs, new Point2D.Double(10.0, 10.0));
	  TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	  e.printStackTrace();
	  TransactionManager.abortTransaction();
	}
	return portPs;
}

パラメトリック図

制約を描画する

public INodePresentation createConstraintPropertyPresentation
(IConstraintBlock parent, IConstraintBlock type, Point2D location)
 throws ClassNotFoundException, InvalidEditingException,
  InvalidUsingException {
 INodePresentation ps = null;
 SysmlModelEditor bme = ModelEditorFactory.getSysmlModelEditor();
 try {
   TransactionManager.beginTransaction();
   ParametricDiagramEditor parametricDiagramEditor =
	 AstahAPI.getAstahAPI().getProjectAccessor().
	 getDiagramEditorFactory().getParametricDiagramEditor();
   IParametricDiagram createParametricDiagram =
	 parametricDiagramEditor.createParametricDiagram(parent,
	  "parametricDiagram");
   //create presentation
   IConstraintProperty constraintProp =
	  bme.createConstraintProperty(parent, "constraintProperty", type);
   ps = parametricDiagramEditor.createNodePresentation
	 (constraintProp, location);
  TransactionManager.endTransaction();
 } catch (InvalidEditingException e) {
    e.printStackTrace();
    TransactionManager.abortTransaction();
 }
 return ps;
}

制約パラメタを描画する

public INodePresentation createConstraintParameterPresentation
(IConstraintBlock parent, IConstraintBlock type,
 IValueType valueType, Point2D location) throws ClassNotFoundException,
  InvalidEditingException, InvalidUsingException {
  INodePresentation ps = null;
  SysmlModelEditor bme = ModelEditorFactory.getSysmlModelEditor();
  try {
    TransactionManager.beginTransaction();
    ParametricDiagramEditor parametricDiagramEditor =
		AstahAPI.getAstahAPI().getProjectAccessor().
		getDiagramEditorFactory().getParametricDiagramEditor();
    IParametricDiagram createParametricDiagram =
		parametricDiagramEditor.createParametricDiagram(parent,
		 "parametricDiagram");
    //create presentation IConstraintProperty constraintProp =
		 bme.createConstraintProperty(parent, "constraintProperty", type);
    INodePresentation constraintPropPs= parametricDiagramEditor.
		createNodePresentation(constraintProp, location);
    IConstraintParameter constraintParameter =
		 bme.createConstraintParameter(type,
		  "constraintProperty0_constraintParameter", valueType);
    ps = (INodePresentation)constraintParameter.getPresentations()[0];
    TransactionManager.endTransaction();
  } catch (InvalidEditingException e) {
    e.printStackTrace();
    TransactionManager.abortTransaction();
  }
  return ps;
}

要求図

要求を描画する

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;
}

ユースケース図

ユースケースを描画する

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;
}

ユースケース間に拡張を描画する

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
    ,b>ps = cde.createLinkPresentation(iExtend, sourcePs, targetPs);
    TransactionManager.endTransaction();
  } catch (InvalidEditingException e) {
    e.printStackTrace();
    TransactionManager.abortTransaction();
  }
  return ps;
}

アクティビティ図

パーティションを描画する

public INodePresentation createPartitionPresentation
(INodePresentation superPartition, INodePresentation
 previousPartition, String partitionName, boolean isHorizontal)
  throws ClassNotFoundException, InvalidEditingException,
	 InvalidUsingException {
  INodePresentation ps = null;
  ActivityDiagramEditor editor = AstahAPI.getAstahAPI().
	getProjectAccessor().getDiagramEditorFactory().getActivityDiagramEditor();
  IModel owner = AstahAPI.getAstahAPI().getProjectAccessor().getProject();
  try {
   TransactionManager.beginTransaction();
    IActivityDiagram activityDgm = editor.createActivityDiagram
		(owner, "activity diagram");
    //set diagram
    editor.setDiagram(activityDgm);
    //create presentation
    ps = editor.createPartition(superPartition, previousPartition,
		 partitionName, isHorizontal);
    TransactionManager.endTransaction();
  } catch (InvalidEditingException e) {
    e.printStackTrace();
    TransactionManager.abortTransaction();
  }
  return ps;
}

アクションを描画する

public INodePresentation createActionPresentation(String actionName)
 throws ClassNotFoundException, InvalidEditingException,
  InvalidUsingException {
 INodePresentation ps = null;
 ActivityDiagramEditor editor = AstahAPI.getAstahAPI().
 getProjectAccessor().getDiagramEditorFactory().
 getActivityDiagramEditor();
 IModel owner = AstahAPI.getAstahAPI().getProjectAccessor().
 getProject();
 try {
   TransactionManager.beginTransaction();
   IActivityDiagram activityDgm = editor.createActivityDiagram
	 (owner, "activity diagram");
   //set diagram
   editor.setDiagram(activityDgm);
   //create presentation
   INodePresentation partitionPs = editor.createPartition
	 (null, null, "partition0", false);
   ps = editor.createAction(actionName, new Point2D.Double
	 (partitionPs.getRectangle().getCenterX() + 10,partitionPs.
	 getRectangle().getCenterY() + 10));
   TransactionManager.endTransaction();
  } catch (InvalidEditingException e) {
    e.printStackTrace();
    TransactionManager.abortTransaction();
  }
  return ps;
}

アクションを指定して、ピンを描画する

public INodePresentation createActionPresentation(String actionName)
 throws ClassNotFoundException, InvalidEditingException,
  InvalidUsingException {
  INodePresentation ps = null;
  ActivityDiagramEditor editor = AstahAPI.getAstahAPI().
	getProjectAccessor().getDiagramEditorFactory().
	getActivityDiagramEditor();
  IModel owner = AstahAPI.getAstahAPI().
	getProjectAccessor().getProject();
  try {
    TransactionManager.beginTransaction();
    IActivityDiagram activityDgm = editor.createActivityDiagram
		(owner, "activity diagram");
    //set diagram
    editor.setDiagram(activityDgm);
    //create presentation
    INodePresentation partitionPs = editor.createPartition
		(null, null, "partition0", false);
    ps = editor.createAction(actionName, new Point2D.Double
		(partitionPs.getRectangle().getCenterX() + 10,partitionPs.
		getRectangle().getCenterY() + 10));
    TransactionManager.endTransaction();
  } catch (InvalidEditingException e) {
    e.printStackTrace();
    TransactionManager.abortTransaction();
  }
  return ps;
}

シーケンス図

ライフラインを描画する

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

メッセージを描画する

public ILinkPresentation createMessagePresentation(IDiagram dgm,
 String messageName, INodePresentation sender, INodePresentation
  receiver, double locY) throws ClassNotFoundException
	, InvalidEditingException, InvalidUsingException {
  ILinkPresentation ps = null;
	SequenceDiagramEditor editor = AstahAPI.getAstahAPI().
	getProjectAccessor().getDiagramEditorFactory().
	getSequenceDiagramEditor();
	try {
	  TransactionManager.beginTransaction();
		//set diagram
		editor.setDiagram(dgm);
		//create presentation
		ps = editor.createCreateMessage(messageName, sender, receiver, locY);
		TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	  e.printStackTrace();
		TransactionManager.abortTransaction();
	}
	return ps;
}

ステートマシン図

状態を描画する

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;
}

遷移を描画する

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;
}

マインドマップ

指定したルートトピック配下にトピックを描画する

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;
}

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;
}

プレゼンテーションの編集

プレゼンテーションの編集時は、最初にトランザクションを開始してください。
プレゼンテーションの基底インタフェースはIPresentationで、それを継承するINodePresentationILinkPresentationがあります。

インタフェース 対象図要素
INodePresentation 矩形プレゼンテーションに対するインタフェースです。
位置、幅、高さ、ラベル、背景色を編集できます。
パッケージ、フレーム、ノート、ブロック、パート、ポート、ユースケース、状態、パーティション、アクション、ライフライン、活性区間、メッセージ(コミュニケーション図)、要求、テストケース、トピック、境界のプレゼンテーションなど
ILinkPresentation 線プレゼンテーションに対するインタフェースです。
端点に関する情報を編集できます。
ネスト、ノートアンカー、関連、汎化、実現、使用依存、依存、バインディングコネクタ、コネクタ、拡張、包含、遷移、メッセージ、アンカー、導出、コピー、満足、検証、洗練、トレース、エッジ、トピック間リンクのプレゼンテーションなど


位置を設定する

public void setLocation(INodePresentation ps, Point2D location) {
  try {
	  TransactionManager.beginTransaction();
		ps.setLocation(location);
		TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	  e.printStackTrace();
		TransactionManager.abortTransaction();
	}
}

幅を設定する

public void setWidth(INodePresentation ps, double width) {
  try {
	  TransactionManager.beginTransaction();
		ps.setWidth(width);
		TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	  e.printStackTrace();
		TransactionManager.abortTransaction();
	}
}

高さを設定する

public void setHeight(INodePresentation ps, double height) {
  try {
	  TransactionManager.beginTransaction();
		ps.setHeight(height);
		TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	  e.printStackTrace();
		TransactionManager.abortTransaction();
	}
}

ラベルを設定する

public void setLabel(INodePresentation ps, String label) {
  try {
	  TransactionManager.beginTransaction();
		ps.setLabel(label);
		TransactionManager.endTransaction();
	} catch (InvalidEditingException e) {
	  e.printStackTrace();
		TransactionManager.abortTransaction();
 }
}

背景色を設定する

** setProperty()メソッドのキーは背景色である"fill.color"キーのみ対応しています。

//(EX)red:color="#FF0000" green:color="#00FF00" blue:color="#0000FF"
public void setColor(INodePresentation ps, String color) {
   try {
	   TransactionManager.beginTransaction();
		 ps.setProperty("fill.color", color);
		 TransactionManager.endTransaction();
	 } catch (InvalidEditingException e) {
	   e.printStackTrace();
		 TransactionManager.abortTransaction();
	}
}

線の端点を設定する

public void setPoints(ILinkPresentation ps, Point2D[] points) {
  try {
	  TransactionManager.beginTransaction();
		ps.setPoints(points);
		TransactionManager.endTransaction();
	 } catch (InvalidEditingException e) {
	   e.printStackTrace();
		 TransactionManager.abortTransaction();
	 }
}