OSDN Git Service

track
[luz/luz.git] / src / com / lavans / luz2 / lremote / node / RemoteNodeGroup.java
1 package com.lavans.luz2.lremote.node;\r
2 \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
8 \r
9 import javax.xml.xpath.XPathExpressionException;\r
10 \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
16 \r
17 import com.lavans.luz2.util.Config;\r
18 \r
19 /**\r
20  * NodeGroup.\r
21  * static\r
22  * @author mdobashi\r
23  *\r
24  */\r
25 public class RemoteNodeGroup implements Cloneable{\r
26         /** logger */\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
31         static {\r
32                 init();\r
33         }\r
34 \r
35         /**\r
36          * init.\r
37          * Read node setting from lremote.xml.\r
38          */\r
39         private static void init(){\r
40                 // Clear cache data.\r
41                 if(groupMap!=null){\r
42                         groupMap.clear();\r
43                 }\r
44 \r
45                 groupMap = new ConcurrentHashMap<String, RemoteNodeGroup>();\r
46                 try {\r
47                         // read self node.\r
48                         String selfName = config.getNodeValue("/lremote/self_node");\r
49 \r
50                         // get node group\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
57                                 // get node\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
69                                         }\r
70                                 }\r
71                         }\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
76                 }\r
77 \r
78         }\r
79 \r
80         /**\r
81          *\r
82          */\r
83         public static RemoteNodeGroup getInstance(String name){\r
84                 return groupMap.get(name);\r
85         }\r
86 \r
87         private String groupName;\r
88         private List<RemoteNode> nodeList = new ArrayList<RemoteNode>();\r
89 \r
90         /**\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
94          *\r
95          * @param localName\r
96          * @return\r
97          */\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
102                                 result = true;\r
103                                 break;\r
104                         }\r
105                 }\r
106 \r
107                 return result;\r
108         }\r
109 \r
110         /**\r
111          * Clone RemoteNodeGroup.\r
112          * nodeList must be deep copied.\r
113          *\r
114          */\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
119                 return dst;\r
120         }\r
121 \r
122         /**\r
123          * @return groupName\r
124          */\r
125         public String getGroupName() {\r
126                 return groupName;\r
127         }\r
128         /**\r
129          * @param groupName �Z�b�g���� groupName\r
130          */\r
131         public void setGroupName(String groupName) {\r
132                 this.groupName = groupName;\r
133         }\r
134         /**\r
135          * @return connectionList\r
136          */\r
137         public List<RemoteNode> getNodeList() {\r
138                 return nodeList;\r
139         }\r
140         /**\r
141          * @param connectionList �Z�b�g���� connectionList\r
142          */\r
143         public void setConnectionList(List<RemoteNode> connectionList) {\r
144                 this.nodeList = connectionList;\r
145         }\r
146 \r
147 }\r