2004/02
前回に引き続き、LDAPアクセスのライブラリを作ります。今回は更新系です。
前回の属性の取得を行うクラス同様、Command型の設計にしました。
更新を行うModifyAttributesCommandクラス、
作成を行うCreateSubcontextCommandクラス、
削除を行うDestroySubcontextCommandクラス、
です。
それじゃ、ソースいってみよう!
package jp.gr.java_conf.yamarou.ldap;
import java.util.*;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.NamingException;
/**
* LDAPのディレクトリ属性を更新するクラス。
* @author yamarou
*/
public class ModifyAttributesCommand {
private BasicAttributes attrs = new BasicAttributes();
/**
* 更新する属性を設定する。
* @param attrID 属性名
* @param value 更新値
*/
public void putAttribute(String attrID, Object value) {
attrs.put(attrID, value);
}
/**
* putAttributeメソッドで設定された内容でLDAPを更新する。
* @param name
* @throws Exception
*/
public void execute(String name) {
DirContext context = DirContextFactory.getDirContext();
try {
context.modifyAttributes(name, DirContext.REPLACE_ATTRIBUTE, attrs);
} catch (NamingException ex) {
throw new RuntimeException(ex);
}
}
}
package jp.gr.java_conf.yamarou.ldap;
import java.util.*;
import javax.naming.directory.DirContext;
import javax.naming.directory.BasicAttributes;
import javax.naming.NamingException;
/**
* LDAPのSubcontextを作成するクラス。
* @author yamarou
*/
public class CreateSubcontextCommand {
private BasicAttributes attrs = new BasicAttributes();
/**
* 属性を設定する。
* @param attrID 属性名
* @param value 更新値
*/
public void putAttribute(String attrID, Object value) {
attrs.put(attrID, value);
}
/**
* putAttributeメソッドで設定された内容でLDAPにSubcontextを作成する。
* @param name
* @throws Exception
*/
public void execute(String name) {
DirContext context = DirContextFactory.getDirContext();
try {
context.createSubcontext(name, attrs);
} catch (NamingException ex) {
throw new RuntimeException(ex);
}
}
}
package jp.gr.java_conf.yamarou.ldap;
import javax.naming.directory.DirContext;
import javax.naming.NamingException;
/**
* LDAPのSubcontextを削除するクラス。
* @author yamarou
*/
public class DestroySubcontextCommand {
/**
* nameのSubcontextを削除する。
* @param name
* @throws Exception
*/
public void execute(String name) {
DirContext context = DirContextFactory.getDirContext();
try {
context.destroySubcontext(name);
} catch (NamingException ex) {
throw new RuntimeException(ex);
}
}
}
package jp.gr.java_conf.yamarou.ldap;
import junit.framework.*;
public class LDAPTest
extends TestCase {
public LDAPTest(String name) {
super(name);
}
public void testModifyAttributes() {
ModifyAttributesCommand modify = new ModifyAttributesCommand();
modify.putAttribute("userName;lang-ja", "ベッカム");
modify.putAttribute("sex", "man");
modify.execute("uid=USER0008");
GetAttributesCommand get = new GetAttributesCommand();
get.execute("uid=USER0008");
String userName = get.getString("userName;lang-ja");
assertEquals("ベッカム", userName);
String sex = get.getString("sex");
assertEquals("man", sex);
}
public void testCreate() {
CreateSubcontextCommand create = new CreateSubcontextCommand();
create.putAttribute("userName;lang-ja", "ボブサップ");
create.putAttribute("objectClass", "person");
create.execute("uid=00000099");
DestroySubcontextCommand destroy = new DestroySubcontextCommand();
destroy.execute("uid=00000099");
}
}
使い方はLDAPTestクラスを見ると分かるんですが、
Commandをnewして
putAttributeで属性を設定して、
executeにキーを指定して実行というとても簡単な設計になってます。
機会があったらぜひ使ってみてくださいね!!