我想知道我是否可以標記特定版本。 我想在我的項目中使用JCR,並且我們有許多由不同類型節點組成的分層類型樹,我們需要在爲分段或生產進行一系列更改之後保存一個版本。我想知道如何標記特定版本,以便保存特定節點及其子節點的所有更改。如何在jackrabbit/JCR中標記特定版本?
謝謝!
我想知道我是否可以標記特定版本。 我想在我的項目中使用JCR,並且我們有許多由不同類型節點組成的分層類型樹,我們需要在爲分段或生產進行一系列更改之後保存一個版本。我想知道如何標記特定版本,以便保存特定節點及其子節點的所有更改。如何在jackrabbit/JCR中標記特定版本?
謝謝!
是的,你可以用你選擇的字符串標記版本歷史中的版本。但是JCR 2.0稱他們爲「標籤」。
首先,你需要找到VersionHistory
特定節點一個已經簽入:,無論是通過遍歷所有版本
String path = ... // the path to the versioned node
VersionManager versionManager = session.getWorkspace().getVersionManager();
VersionHistory history = versionManager.getVersionHistory(path);
然後你就可以找到你要標註具體Version
,由獲得「根版本」,或獲得基礎版本。我不會展示這一點,因爲有很多方法可以做到這一點。
// Find the version ...
Version versionToBeLabeled = ...
然後你可以給這個版本添加一個標籤。請注意,標籤只能在單個節點的版本歷史記錄中使用一次,因此添加標籤時可以選擇是移動現有標籤(如果有)或拋出異常。這裏的代碼,移動它,如果已經使用它:
// Add a user-defined label to this version ...
String versionName = versionToBeLabeled.getName();
String versionLabel = "MyLabel";
boolean moveLabel = true;
VersionHistory.addVersionLabel(versionName, versionLabel, moveLabel);
注意,版本名稱是由JCR實現確定的,而標籤是用戶定義的。這就是爲什麼它往往是非常方便的添加自己的標籤,然後通過標籤,而不是由一些實現確定的名稱查找特定Version
實例:
Version foundVersion = versionHistory.getVersionByLabel(versionLabel);
當然,你可以找出是否有在歷史上的任何Version
具有特定標籤:
if (versionHistory.hasVersionLabel(versionLabel)) {
// do something
}
,或者特定的版本有一個標籤:
Version version = ...
if (versionHistory.hasVersionLabel(version,versionLabel) {
// do something
}
甚至刪除AP關節標籤:
versionHistory.removeLabel(versionLabel);
有關詳細信息,請參閱JCR 2.0 (JSR-283) specification的第15.4節。