6.8.10 バージョン付きオブジェクトのバージョン操作

ここでは,バージョン付きオブジェクトのバージョン操作について説明します。

次に示す操作は,バージョニングオブジェクトのインターフェースを使用して実行します。

なお,チェックアウト,チェックインまたはチェックアウトの取り消しと同時に,仮のバージョンオブジェクトまたはカレントバージョンのバージョンオブジェクトにプロパティを設定できます。

次の操作は,バージョンオブジェクトのインターフェースを使用して実行します。

バージョン管理の考え方については,「3.1 バージョン管理モデル」を参照してください。

<この項の構成>
(1) チェックアウト
(2) チェックイン
(3) チェックアウトの取り消し
(4) バージョンオブジェクトの一覧の取得
(5) バージョンの削除
(6) バージョニングオブジェクトのインターフェースの取得
(7) バージョン識別子の取得

(1) チェックアウト

チェックアウトは,バージョニングオブジェクトのインターフェースを使用して,DbjObj#checkOutメソッドで実行します。

また,チェックアウトをする時に,チェックアウト中のバージョニングオブジェクトおよび仮のバージョンオブジェクトに対して,プロパティを設定できます。なお,チェックアウト後のターゲットバージョンは,仮のバージョンになります。

チェックアウトの例を示します。この例では,チェックアウトしたバージョニングオブジェクトおよび仮のバージョンオブジェクトに対して,次のプロパティを設定します。

// チェックアウトの例
 
 // obj:DbjObjインターフェース
 
// Proxyオブジェクトに取得するプロパティ名を設定する
Set propdef = new HashSet();
propdef.add( "CheckOutFlag" );
propdef.add( "@VerCount" );
 
// カレントバージョンのプロパティをProxyオブジェクトにロードする
obj.readProperties( propdef );
 
// プロパティの値を更新する
obj.propSet().setPropVal("@VerCount",
       obj.propSet().getIntVal("@VerCount") + 1 );
obj.propSet().setPropVal("CheckOutFlag", 1 );
 
// チェックアウトと同時にProxyオブジェクトのプロパティを
// バージョニングオブジェクトおよび
// 仮のバージョンオブジェクトのプロパティにフラッシュする
obj.checkOut();

チェックアウト後のプロパティの値は,次の図に示すようになります。

図6-15 チェックアウト後のプロパティの値

[図データ]

(2) チェックイン

チェックアウトしたバージョン付きオブジェクトは,バージョニングオブジェクトのインターフェースを使用して,DbjObj#checkInメソッドでチェックインします。

また,チェックインする時に,チェックイン後のカレントバージョンオブジェクトに対して,プロパティを設定できます。なお,チェックイン後のターゲットバージョンは,カレントバージョンになります。

チェックインの例を示します。この例では,(1)でチェックアウトしたバージョン付きオブジェクトをチェックインします。同時に,バージョニングオブジェクトのCheckOutFlagプロパティの値を,チェックアウト中ではないことを示す値「0」に更新します。

// チェックインの例
 
 // obj : DbjObjインターフェース
 
// ProxyオブジェクトのCheckOutFlagプロパティの値を設定する
obj.propSet().setPropVal("CheckOutFlag", 0 );

// チェックインと同時にプロパティの値をフラッシュする
obj.checkIn();

チェックイン後のプロパティの値は,次のようになります。

図6-16 チェックイン後のプロパティの値

[図データ]

(3) チェックアウトの取り消し

チェックアウトを取り消す場合は,バージョニングオブジェクトのインターフェースを使用して,DbjObj#cancelCheckOutメソッドで取り消します。

チェックアウトを取り消す場合,取り消したあとのカレントバージョンオブジェクトに対してプロパティを設定できます。なお,チェックアウト時にバージョニングオブジェクトのプロパティを設定した場合,チェックアウトを取り消した時に元のプロパティの値に戻したい場合は,明示的にチェックアウト前の値でプロパティを更新し直す必要があります。また,チェックイン後のターゲットバージョンは,チェックアウト前のカレントバージョンになります。

チェックアウトの取り消しの例を示します。この例では,(1)でチェックアウトしたバージョン付きオブジェクトのチェックアウトを取り消します。同時に,チェックアウトした時に設定したプロパティの値も元に戻すように更新します。

//チェックアウトの取り消しの例
 
 // obj:DbjObjインターフェース
 
// ProxyオブジェクトのCheckOutFlagプロパティに
// チェックアウト前の値を設定する
obj.propSet().setPropVal("CheckOutFlag", 0 );

// チェックアウトの取り消しと同時にプロパティ値も元に戻す
obj.cancelCheckOut();

チェックアウト取り消し後には,バージョニングオブジェクトのCheckOutFlagプロパティの値は「0」に,カレントバージョンオブジェクトのVerCountプロパティの値は「1」になります。

(4) バージョンオブジェクトの一覧の取得

バージョン付きオブジェクトに含まれるバージョンオブジェクトの一覧は,DbjObj#getVersionObjListメソッドで取得します。また,バージョンオブジェクトの一覧を取得する時に,任意のプロパティの値を同時に取得することもできます。

バージョンオブジェクトの一覧を取得する例を示します。この例では,バージョンオブジェクトのうち,最も古いバージョンのCounterプロパティを取得して,値を更新します。

// バージョンオブジェクトの一覧を取得する例
 
 // obj : DbjObjインターフェース
 
// 取得するプロパティ名を設定する
Set propdef = new HashSet();
propdef.add("Counter");

// バージョン一覧を昇順(古いものから順番)に取得する
DbjVerObjList verlst = obj.getVersionObjList(
                        propdef,
                        DbjDef.ORDER_ASC,
                        null );

// 最も古いバージョンオブジェクトのインターフェースを取得する
DbjVerObj oldestVersion = verlst.getVerObj(0);

// 最も古いバージョンオブジェクトのCounterプロパティの値を1増やす
int counter = oldestVersion.propSet().getIntVal("Counter");
counter ++;
oldestVersion.propSet().setPropVal("Counter", counter );

// Proxyオブジェクトのプロパティの値を文書空間オブジェクトに
// フラッシュする
oldestVersion.writeProperties();

(5) バージョンの削除

バージョン付きオブジェクトの特定のバージョンを削除する場合は,DbjObj#deleteVersionメソッドを実行します。削除するバージョンは,メソッドの引数にバージョン識別子を指定することによって特定します。複数のバージョン識別子をリストとして指定すると,複数のバージョンを一括して削除できます。ただし,すべてのバージョンを削除することはできません。少なくとも一つのバージョンは残しておく必要があります。

なお,DbjObj#deleteVersionメソッドは,バージョニングオブジェクトのインターフェースで実行します。この操作の結果は,削除するバージョンオブジェクトのインターフェースを使用して,DbjObj#removeObjectメソッドを実行した場合と同じです。

バージョンを削除する例を示します。この例では,最新バージョン以外のバージョンを削除します。

// バージョンを削除する例
 
 // obj:DbjObjインターフェース
 
// バージョン一覧を降順(新しいものから順番)に取得する
DbjVerObjList verlst = obj.getVersionObjList(
             null,
             DbjDef.ORDER_DESC,
             null );
 
// 削除するバージョン識別子のリストを作成する
// リストから,最新バージョンのバージョン識別子だけを削除する
List delVersionList = verlst.getVersionIdList();
delVersionList.removeObjects(0);
 
// 一覧に指定したバージョン識別子のバージョンを一括削除する
obj.deleteVersion( delVersionList );

(6) バージョニングオブジェクトのインターフェースの取得

バージョンオブジェクトのインターフェースからバージョニングオブジェクトのインターフェースを取得するには,DbjObj#getVersioningInfoメソッドを実行します。

バージョニングオブジェクトのインターフェースを取得する例を示します。この例では,バージョンオブジェクトのインターフェースからバージョニングオブジェクトのインターフェースを取得します。その後,バージョニングオブジェクトでまとめているバージョンオブジェクトの一覧を取得します。

// バージョニングオブジェクトのインターフェースを取得する例
 
 // obj:DbjObjインターフェース
 // (バージョンオブジェクトのインターフェース)
 
// バージョンオブジェクトのインターフェースからバージョニングオブジェクトの
// インターフェースを取得する
DbjObj versioningObj = obj.getVersioningInfo();

// バージョニングオブジェクトのバージョン一覧を
// 降順(新しいものから順番)で取得する
DbjVerObjList verlst = versioningObj.getVersionObjList(
             null,
             DbjDef.ORDER_DESC,
             null );

(7) バージョン識別子の取得

ここでは,バージョン識別子の取得について説明します。バージョン識別子は,次のどちらかのメソッドで取得します。

DbjVerObjインターフェースは,ターゲットオブジェクトのバージョン識別子をプロパティに持っています。DbjVerObj#getVersionIdメソッドでは,このプロパティの値を取得します。

DbjObjインターフェースを使用して,バージョン識別子を取得する例を示します。この例では,まず,バージョンオブジェクトのインターフェースでバージョン識別子を取得し,そのあとでバージョニングオブジェクトのインターフェースで取得したバージョン識別子を持つバージョンオブジェクトを削除します。

// バージョン識別子を取得する例

 // obj:DbjObjインターフェース
 // (バージョンオブジェクトのインターフェース)

// バージョン識別子を取得する
String versionId = obj.getVersionId();

// バージョニングオブジェクトを取得する
DbjObj versioningObj = obj.getVersioningInfo();

// バージョン識別子を指定してバージョンを削除する
List dels = new ArrayList();
dels.add( versionId );
versioningObj.deleteVersion( dels );