summaryrefslogtreecommitdiffstats
path: root/verigraph/src/main/java/it/polito/escape/verify/model/Node.java
blob: 9f667ce0756d346b99461c95f5f7c862bde14427 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*******************************************************************************
 * Copyright (c) 2017 Politecnico di Torino and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Apache License, Version 2.0
 * which accompanies this distribution, and is available at
 * http://www.apache.org/licenses/LICENSE-2.0
 *******************************************************************************/

package it.polito.escape.verify.model;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import it.polito.escape.verify.deserializer.NodeCustomDeserializer;
import it.polito.escape.verify.serializer.CustomMapSerializer;

@ApiModel(value = "Node")
@XmlRootElement
@JsonDeserialize(using = NodeCustomDeserializer.class)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Node {

	@ApiModelProperty(required = false, hidden = true)
	@XmlTransient
	private long					id;

	@ApiModelProperty(required = true, example = "ep", value = "The name of the node can be any string")
	private String					name;

	@ApiModelProperty(	required = true,
						example = "endpoint",
						value = "The functional types that are currently supported are: endpoint, firewall, nat, antispam, webclient, webserver, mailclient, mailserver")
	private String					functional_type;

	@ApiModelProperty(required = false, hidden = true)
	@XmlTransient
	private Configuration			configuration	= new Configuration();

	@ApiModelProperty(	name = "neighbours",
						notes = "Neighbours",
						dataType = "List[it.polito.escape.verify.model.Neighbour]")
	private Map<Long, Neighbour>	neighbours		= new HashMap<Long, Neighbour>();

	@ApiModelProperty(required = false, hidden = true)
	@XmlTransient
	private Set<Link>				links			= new HashSet<>();

	public Node() {

	}

	public Node(long id, String name, String functional_type, Configuration configuration) {
		this.id = id;
		this.name = name;
		this.functional_type = functional_type;
		this.configuration = configuration;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getFunctional_type() {
		return functional_type;
	}

	public void setFunctional_type(String functional_type) {
		this.functional_type = functional_type;
	}

	// @XmlTransient
	public Configuration getConfiguration() {
		return configuration;
	}

	public void setConfiguration(Configuration configuration) {
		this.configuration = configuration;
	}

	@JsonSerialize(using = CustomMapSerializer.class)
	public Map<Long, Neighbour> getNeighbours() {
		return neighbours;
	}

	public void setNeighbours(Map<Long, Neighbour> neighbours) {
		this.neighbours = neighbours;
	}

	public long getId() {
		return this.id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Set<Link> getLinks() {
		return links;
	}

	public void setLinks(Set<Link> links) {
		this.links = links;
	}

	public void addLink(String url, String rel) {
		Link link = new Link();
		link.setLink(url);
		link.setRel(rel);
		links.add(link);
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		else
			return false;
	}

	public Neighbour searchNeighbourByName(String name) {
		for (Neighbour neighbour : this.neighbours.values()) {
			if (neighbour.getName().equals(name))
				return neighbour;
		}
		return null;
	}

}