6.9.3 パブリックACLの操作

パブリックACLは,独立した文書空間オブジェクトです。ここでは,パブリックACLの作成と文書空間オブジェクトへのバインド,また,文書空間オブジェクトからのパブリックACLのバインドについて説明します。また,文書空間オブジェクトからバインドしているパブリックACLの一覧を取得したり,パブリックACLからバインドされている文書空間オブジェクトの一覧を取得したりする方法も説明します。

<この項の構成>
(1) パブリックACLの作成
(2) パブリックACLのバインド
(3) バインドしているパブリックACLの一覧取得
(4) バインドするパブリックACLの変更
(5) パブリックACLをバインドしている文書空間オブジェクトの一覧取得
(6) パブリックACLのアンバインド

(1) パブリックACLの作成

パブリックACLは,ほかの文書空間オブジェクトと同様に,DbjDocSpaceインターフェースのメソッドで作成します。

パブリックACLを作成する例を示します。この例では,パブリックACLを作成して,同時に文書空間オブジェクトからバインドさせます。

// パブリックACLを作成する例
 
 // factory:DbjFactoryインターフェース
 // docspc:DbjDocSpaceインターフェース
 
// パブリックACLに設定するローカルACLを作成する
DbjVArray acl = factory.createVArray( null );

DbjACE elm = factory.createACE(factory.createPropSet());
elm.setSystemSubject( DbjDef.SYSSUBJECT_EVERYONE );
elm.setPermission( DbjDef.PERM_READ_WRITE );

acl.addPropSet( elm.propSet() );

elm.setUserSubject( "hitachi" );
elm.setPermission( DbjDef.PERM_FULL_CONTROL );

acl.addPropSet( elm.propSet() );

DbjPropSet props = factory.createPropSet();
props.setPropVal( "dbrProp_ACL", acl );

// バインドするオブジェクトのリストを作成する
List bindobjlist = new ArrayList();
bindobjlist.add( docspc.createObjConnection( oiid1 ));
bindobjlist.add( docspc.createObjConnection( oiid2 ));

// パブリックACLを作成する
DbjObj pacl = docspc.createPublicACL(
                          "edmClass_PublicACL",
                          props,
                          bindobjlist );

(2) パブリックACLのバインド

ここでは,文書空間オブジェクトから,パブリックACLにバインドする方法について説明します。パブリックACLのバインドは,DbjObj#bindPublicACLメソッドで実行します。

文書空間オブジェクトからパブリックACLをバインドする例を示します。この例では,バインドするパブリックACLを検索で取得して,検索結果として得られたパブリックACLをすべて一括してバインドします。

// 文書空間オブジェクトからパブリックACLをバインドする例
 
 // docspc:DbjDocSpaceインターフェース
 // obj:DbjObjインターフェース
 //  (文書空間オブジェクトのインターフェース)
 
// パブリックACLを検索する
DbjResultSet result = docspc.executeSearch(
     "SELECT dmaProp_OIID  FROM edmClass_PublicACL WHERE...",
     null,
     null );

// 検索結果からDbjObjListインターフェースを取得する
DbjObjList objlist = docspc.createObjList( result , 0 , null );
 
// 検索結果として得られた複数のパブリックACLを一括してバインドする
obj.bindPublicACL( objlist );

(3) バインドしているパブリックACLの一覧取得

ここでは,文書空間オブジェクトにバインドしているパブリックACLの一覧を取得する方法について説明します。一覧の取得は,DbjObj#getPublicACLListメソッドで実行します。

バインドしているパブリックACLの一覧を取得する例を示します。

// バインドしているパブリックACLの一覧を取得する例
 
 // obj:DbjObjインターフェース
 //  (文書空間オブジェクトのインターフェース)
 
// バインドしているパブリックACLの一覧を取得する
DbjObjList objlist = obj.getPublicACLList ( null );

// パブリックACLのOIIDを出力する
for ( int i = 0 ; i<objlist.size() ; i++ ){
  System.out.println( "oiid = " + objlist.getObj(i).getOiid() );
}

(4) バインドするパブリックACLの変更

ここでは,文書空間オブジェクトにバインドしているパブリックACLを変更する方法について説明します。バインドしているパブリックACLは,dbrProp_PublicACLIdsプロパティに設定されています。このプロパティはVARRAY型のプロパティです。要素は,DbjPublicACLIdElmインターフェースまたはDbjPropSetインターフェースで操作します。

文書空間オブジェクトからバインドしているパブリックACLを変更する例を示します。ここでは,バインドするパブリックACLを,一つ削除して一つ追加します。

// 文書空間オブジェクトからバインドしているパブリックACLを変更する例
 
 // obj:DbjObjインターフェース
 //  (文書空間オブジェクトのインターフェース)
 
// バインドしているパブリックACLを要素とした可変長配列を取得する
Set propdef = new HashSet();
propdef.add( "dbrProp_PublicACLIds" );
obj.readProperties( propdef );

DbjVArray varray = obj.propSet()
 .getVArrayRef( "dbrProp_PublicACLIds" );

// 一つ目の要素を可変長配列から削除する
varray.remove(0);

// 追加するパブリックACLのOIIDを要素に設定する
DbjPublicACLIdElm elm = factory.createPublicACLIdElm();
elm.setId( pacloiid );

// 要素を可変長配列の末尾に追加する
varray.addPropSet( elm.propSet() );
 
// dbrProp_PublicACLIdsプロパティを更新する
obj.writeProperties();

(5) パブリックACLをバインドしている文書空間オブジェクトの一覧取得

ここでは,パブリックACLがバインドされている文書空間オブジェクトの一覧を取得する方法について説明します。一覧の取得は,DbjObj#getBindObjectListメソッドで実行します。

パブリックACLをバインドしている文書空間オブジェクトの一覧取得の例を示します。

// パブリックACLをバインドしている文書空間オブジェクトの一覧取得
 
 // obj:DbjObjインターフェース
 //  (パブリックACLのインターフェース)
 
// バインドされている文書空間オブジェクトとの一覧を取得する
DbjObjList objlist = obj.getBindObjectList(
            null,
            DbjDef.OBJTYPE_DOC, // 文書を取得
            null );

// バインドされている文書空間オブジェクトのOIIDを出力する
for ( int i = 0; i<objlist.size() ; i++ ){
  System.out.println( "oiid = " + objlist.getObj(i).getOiid() );
}

(6) パブリックACLのアンバインド

ここでは,パブリックACLをアンバインドする方法について説明します。

パブリックACLのアンバインドは,DbjObj#unbindPublicACLメソッドで実行します。

文書空間オブジェクトからパブリックACLをアンバインドする例を示します。

// 文書空間オブジェクトからパブリックACLをアンバインドする例
 
 // docspc:DbjDocSpaceインターフェース
 // obj:DbjObjインターフェース
 //   (文書空間オブジェクトのインターフェース)
 
// アンバインドするパブリックACLのリストを作成する
List unbindlist = new ArrayList();
unbindlist.add( docspc.createObjConnection( pacloiid ) );

// アンバインドを実行する
obj.unbindPublicACL( unbindlist );