1 package com.lavans.luz2.lremote.node;
\r
3 import java.net.MalformedURLException;
\r
4 import java.util.ArrayList;
\r
5 import java.util.List;
\r
6 import java.util.Map;
\r
7 import java.util.concurrent.ConcurrentHashMap;
\r
9 import javax.xml.xpath.XPathExpressionException;
\r
11 import org.apache.commons.logging.Log;
\r
12 import org.apache.commons.logging.LogFactory;
\r
13 import org.w3c.dom.Element;
\r
14 import org.w3c.dom.Node;
\r
15 import org.w3c.dom.NodeList;
\r
17 import com.lavans.luz2.util.Config;
\r
25 public class RemoteNodeGroup implements Cloneable{
\r
27 private static final Log logger = LogFactory.getLog(RemoteNodeGroup.class);
\r
28 /** config reader */
\r
29 private static com.lavans.luz2.util.Config config = Config.getInstance("lremote.xml");
\r
30 private static Map<String, RemoteNodeGroup> groupMap;
\r
37 * Read node setting from lremote.xml.
\r
39 private static void init(){
\r
40 // Clear cache data.
\r
45 groupMap = new ConcurrentHashMap<String, RemoteNodeGroup>();
\r
48 String selfName = config.getNodeValue("/lremote/self_node");
\r
51 NodeList groupList = config.getNodeList("/lremote/node_group");
\r
52 for(int i=0; i<groupList.getLength(); i++){
\r
53 Element groupNode = (Element)groupList.item(i);
\r
54 RemoteNodeGroup group = new RemoteNodeGroup();
\r
55 group.setGroupName(groupNode.getAttribute("name"));
\r
56 groupMap.put(group.getGroupName(), group);
\r
58 NodeList nodeList = config.getNodeList("node", groupNode);
\r
59 for(int j=0; j<nodeList.getLength(); j++){
\r
60 Element node = (Element)nodeList.item(j);
\r
61 logger.debug(node.getNamespaceURI()+","+node.getNodeName());
\r
62 if((node.getNodeType()==Node.TEXT_NODE)||(node.getNodeType()==Node.TEXT_NODE)) continue;
\r
63 // create Remote node
\r
64 RemoteNode remoteNode = new RemoteNode(node.getAttribute("name"), node.getAttribute("uri"));
\r
65 group.nodeList.add(remoteNode);
\r
66 // check if it is self_node
\r
67 if(selfName.equals(remoteNode.getName())){
\r
68 remoteNode.setSelf(true);
\r
72 } catch (XPathExpressionException e) {
\r
73 logger.error("lremote.xml parse node error", e);
\r
74 } catch (MalformedURLException e) {
\r
75 logger.error("lremote.xml uri syntax error", e);
\r
83 public static RemoteNodeGroup getInstance(String name){
\r
84 return groupMap.get(name);
\r
87 private String groupName;
\r
88 private List<RemoteNode> nodeList = new ArrayList<RemoteNode>();
\r
91 * ��œn���ꂽ���O�����̃O���[�v�ɓ���Ă��邩�ǂ������f����B
\r
92 * <code>@LRemote("ap")</code>�Ƃ����w��������Ƃ��ɁA���̐ڑ��悪
\r
93 * local��remote���f���邽�߂Ɏg�p����B
\r
98 public boolean contains(String localName){
\r
99 boolean result = false;
\r
100 for(RemoteNode con: nodeList){
\r
101 if(localName.equals(con.getName())){
\r
111 * Clone RemoteNodeGroup.
\r
112 * nodeList must be deep copied.
\r
115 public Object clone() throws CloneNotSupportedException {
\r
116 RemoteNodeGroup dst = (RemoteNodeGroup)super.clone();
\r
117 dst.nodeList = new ArrayList<RemoteNode>();
\r
118 dst.nodeList.addAll(this.nodeList);
\r
123 * @return groupName
\r
125 public String getGroupName() {
\r
129 * @param groupName �Z�b�g���� groupName
\r
131 public void setGroupName(String groupName) {
\r
132 this.groupName = groupName;
\r
135 * @return connectionList
\r
137 public List<RemoteNode> getNodeList() {
\r
141 * @param connectionList �Z�b�g���� connectionList
\r
143 public void setConnectionList(List<RemoteNode> connectionList) {
\r
144 this.nodeList = connectionList;
\r