blob: f38df5a5df4517c584beb3e7028b7705eb912013 [file] [log] [blame]
tom73094832014-09-29 13:47:08 -07001package org.onlab.onos.store.cluster.impl;
2
3import com.fasterxml.jackson.core.JsonEncoding;
4import com.fasterxml.jackson.core.JsonFactory;
5import com.fasterxml.jackson.databind.JsonNode;
6import com.fasterxml.jackson.databind.ObjectMapper;
7import com.fasterxml.jackson.databind.node.ArrayNode;
8import com.fasterxml.jackson.databind.node.ObjectNode;
9import org.onlab.onos.cluster.DefaultControllerNode;
10import org.onlab.onos.cluster.NodeId;
11import org.onlab.packet.IpPrefix;
12
13import java.io.File;
14import java.io.IOException;
15import java.util.HashSet;
16import java.util.Iterator;
17import java.util.Set;
18
Yuta HIGUCHI41f2ec02014-10-27 09:54:43 -070019//Not used right now
tom73094832014-09-29 13:47:08 -070020/**
21 * Allows for reading and writing cluster definition as a JSON file.
22 */
23public class ClusterDefinitionStore {
24
25 private final File file;
26
27 /**
28 * Creates a reader/writer of the cluster definition file.
29 *
30 * @param filePath location of the definition file
31 */
32 public ClusterDefinitionStore(String filePath) {
33 file = new File(filePath);
34 }
35
36 /**
37 * Returns set of the controller nodes, including self.
38 *
39 * @return set of controller nodes
40 */
41 public Set<DefaultControllerNode> read() throws IOException {
42 Set<DefaultControllerNode> nodes = new HashSet<>();
43 ObjectMapper mapper = new ObjectMapper();
44 ObjectNode clusterNodeDef = (ObjectNode) mapper.readTree(file);
45 Iterator<JsonNode> it = ((ArrayNode) clusterNodeDef.get("nodes")).elements();
46 while (it.hasNext()) {
47 ObjectNode nodeDef = (ObjectNode) it.next();
48 nodes.add(new DefaultControllerNode(new NodeId(nodeDef.get("id").asText()),
49 IpPrefix.valueOf(nodeDef.get("ip").asText()),
50 nodeDef.get("tcpPort").asInt(9876)));
51 }
52 return nodes;
53 }
54
55 /**
56 * Writes the given set of the controller nodes.
57 *
58 * @param nodes set of controller nodes
59 */
60 public void write(Set<DefaultControllerNode> nodes) throws IOException {
61 ObjectMapper mapper = new ObjectMapper();
62 ObjectNode clusterNodeDef = mapper.createObjectNode();
63 ArrayNode nodeDefs = mapper.createArrayNode();
64 clusterNodeDef.set("nodes", nodeDefs);
65 for (DefaultControllerNode node : nodes) {
66 ObjectNode nodeDef = mapper.createObjectNode();
67 nodeDef.put("id", node.id().toString())
68 .put("ip", node.ip().toString())
69 .put("tcpPort", node.tcpPort());
70 nodeDefs.add(nodeDef);
71 }
72 mapper.writeTree(new JsonFactory().createGenerator(file, JsonEncoding.UTF8),
73 clusterNodeDef);
74 }
75
76}