E4 RCPアプリケーションが終了すると、変更はworkbench.xmiファイルに記録/保存されます。Eclipse RCP workbench.xmi保存された部分の制御
パーツスタック内では、アプリケーションが終了した時点で複数のパーツが開いている可能性があります。アプリケーションが作成されworkbench.xmiで保存されたこれらの部品を再起動し、再度表示される場合
これらの部品は
<children xsi:type="basic:PartStack"
xmi:id="_The_ID"
elementId="elemId"
contributorURI="URI"
containerData="3000">
<tags>NoAutoCollapse</tags>
</children>
としてタグ付けされています。
部品の作成を許可/禁止するために、アプリケーションの起動中にこれらの部品をどのように制御することができますか?
これは、(あなたの部品に接続された)データモデルがファイルに保存される場合に使用されます。例えば
、以下の配列:
1.- RCPは、オープンいくつかの部分で閉鎖されている(すなわち、ファイルツーremain.xmlとファイルに被deleted.xml)
2.-ユーザーがファイルを削除します。ファイルが削除されます。
3-RCPが再起動されるため、削除対象ファイルが作成され、データなしで表示されます。
目的は、私が質問にグレッグ-449の答えとも彼の答えを読んだ後、私の説明を拡張しますファイル・ツー・被deleted.xmlステップ3.-
での作成を避けるためです。 "e4 - removing elements from the application model"
私は、アプリケーションが閉じられた時点(ファイルから残りのファイル、削除されるファイル)でPartStackと2つのParts(2つのxmlファイル)を含むworkbench.xmiを保存しました。 xml)
要素IDは、ファイルパスを含む文字列であることに注意してください。パートの作成時にpart.setElementID(String)メソッドを実行します。
public class LifeCycleManager {
@ProcessRemovals
void postContextCreate(IEclipseContext context, MApplication application, EModelService modelService, EPartService partService){
List<MPart> parts = modelService.findElements(application, null, MPart.class, null);
for(MPart elParte: parts){
if(elParte.getContributionURI().endsWith("AutodocuForm")){
Path partPath = Paths.get(elParte.getElementId());
if(Files.exists(partPath, LinkOption.NOFOLLOW_LINKS)){
System.out.println("FILE EXISTS INTO THE FILE SYSTEM...");
}
else{
System.out.println("FILE DOES NOT EXIST INTO THE FILE SYSTEM...");
MElementContainer<MUIElement> parent = elParte.getParent();
elParte.setToBeRendered(false);
parent.getChildren().remove(elParte);
}
}
}
}
}
私は、「ファイルツーことを削除した場合:
も部品が、私はライフサイクルのクラスを作成しているAutodocuForm.class
<children xsi:type="basic:PartStack"
xmi:id="_iDPe2cIDEeaAXZB7N2qOIw"
elementId="my-plugin.partstack.0"
contributorURI="platform:/plugin/my-plugin"
containerData="3066"
selectedElement="_6pVbwMNsEeaiI_JEbgNbYQ">
<children xsi:type="basic:Part"
xmi:id="_3ZCIocNsEeaiI_JEbgNbYQ"
elementId="C:\Users\name\Desktop\file-to-remain.xml"
contributorURI="platform:/plugin/my-plugin"
contributionURI="bundleclass://my-plugin/my-plugin.autodocu.AutodocuForm"
label="file-to-remain.xml"
iconURI="platform:/plugin/my-plugin/icons/file_obj.gif"
closeable="true">
</children>
<children xsi:type="basic:Part"
xmi:id="_6pVbwMNsEeaiI_JEbgNbYQ"
elementId="C:\Users\name\Desktop\file-to-be-deleted.xml"
contributorURI="platform:/plugin/my-plugin"
contributionURI="bundleclass://my-plugin/my-plugin.autodocu.AutodocuForm"
label="file-to-be-deleted.xml"
iconURI="platform:/plugin/my-plugin/icons/file_obj.gif"
closeable="true">
</children>
</children>
というクラスによって作成されていることに注意してください-deleted.xml "を実行してアプリケーションを再起動すると、partStack内には表示されませんが、次の例外が発生します。
!ENTRY org.eclipse.e4.ui.workbench.swt 4 2 2016-12-20 11:09:38.601
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.e4.ui.workbench.swt".
!STACK 0
java.lang.NullPointerException
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.showTab(LazyStackRenderer.java:160)
...
...
!ENTRY org.eclipse.e4.ui.workbench 4 0 2016-12-20 11:09:38.601
!MESSAGE Exception occurred while rendering: [email protected]39478c45
(elementId: my-plugin.partstack.0,
tags: [NoAutoCollapse],
contributorURI: platform:/plugin/my-plugin)
(widget: CTabFolder {},
renderer: [email protected],
toBeRendered: true,
onTop: false,
visible: true,
containerData: 3066,
accessibilityPhrase: null)
!STACK 0
java.lang.NullPointerException
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.showTab(LazyStackRenderer.java:160)
...
...
パーツはモデルから削除されているようですが、パーツスタックは更新されていません。事前
RCPアプリケーション内のステップ2のみを許可します。 –
setToBeRenderedをfalseに設定すると、おそらく親から削除する必要はありません。 –
'parent.getChildren()。remove(elParte);'を削除し、以下の答えで定義されているコードを追加しています。 –