2012-07-17 62 views
2

我想知道我是否可以標記特定版本。 我想在我的項目中使用JCR,並且我們有許多由不同類型節點組成的分層類型樹,我們需要在爲分段或生產進行一系列更改之後保存一個版本。我想知道如何標記特定版本,以便保存特定節點及其子節點的所有更改。如何在jackrabbit/JCR中標記特定版本?

謝謝!

回答

3

是的,你可以用你選擇的字符串標記版本歷史中的版本。但是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節。