/*_##########################################################################
_##
_## Copyright (C) 2013-2015 Kaito Yamada
_##
_##########################################################################
*/
package com.github.kaitoy.sneo.giane.model;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.MapKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.github.kaitoy.sneo.giane.action.message.FormMessage;
import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
import com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
@Entity
@Table(name = "SIMULATION")
public class Simulation extends AbstractModel implements FormMessage {
/**
*
*/
private static final long serialVersionUID = -931148670770303173L;
private String name;
private Network network;
private String descr;
private Map<SnmpAgent, TrapTargetGroup> trapTargetGroups;
private Map<RealNetworkInterface, RealNetworkInterfaceConfiguration> realNetworkInterfaceConfigurations;
private Map<Node, AdditionalIpV4RouteGroup> additionalIpV4RouteGroups;
private Map<Node, AdditionalIpV6RouteGroup> additionalIpV6RouteGroups;
@Column(name = "NAME", nullable = false, length = 200, unique = true)
public String getName() {
return name;
}
@RequiredStringValidator(
key = "RequiredStringValidator.error",
trim = true,
shortCircuit = true // Stops checking if detects error
)
@StringLengthFieldValidator(
key = "StringLengthFieldValidator.error.max",
trim = true,
maxLength = "200",
shortCircuit = true
)
@RegexFieldValidator(
key = "RegexFieldValidator.error.objectName",
// this field's value is/will be used for an MBean object name, and may be used in a command line.
regex = "[^,=:\"*?]+",
shortCircuit = true
)
public void setName(String name) {
this.name = name;
}
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "NETWORK_ID", nullable = false)
public Network getNetwork() {
return network;
}
@RequiredFieldValidator(
key = "RequiredFieldValidator.error",
shortCircuit = true // Stops checking if detects error
)
@ConversionErrorFieldValidator(
key = "ConversionErrorFieldValidator.error",
shortCircuit = true
)
@TypeConversion(converter = "com.github.kaitoy.sneo.giane.typeconverter.NetworkConverter")
public void setNetwork(Network network) {
this.network = network;
}
@Column(name = "DESCR", nullable = true, length = 5000, unique = false)
public String getDescr() {
return descr;
}
@StringLengthFieldValidator(
key = "StringLengthFieldValidator.error.max",
trim = true,
maxLength = "5000",
shortCircuit = true // Stops checking if detects error
)
public void setDescr(String descr) {
this.descr = descr;
}
@ManyToMany(fetch = FetchType.LAZY)
@MapKeyJoinColumn(name = "SNMP_AGENT_ID", nullable = false)
@JoinTable(
name = "SIMULATION__SNMP_AGENT__TRAP_TARGET_GROUP",
joinColumns
= @JoinColumn(name = "SIMULATION_ID", nullable = false),
inverseJoinColumns
= @JoinColumn(name = "TRAP_TARGET_GROUP_ID", nullable = false)
)
public Map<SnmpAgent, TrapTargetGroup> getTrapTargetGroups() {
return trapTargetGroups;
}
public void setTrapTargetGroups(
Map<SnmpAgent, TrapTargetGroup> trapTargetGroups
) {
this.trapTargetGroups = trapTargetGroups;
}
@Transient
public TrapTargetGroup getTrapTargetGroup(Integer snmpAgentId) {
SnmpAgent key = new SnmpAgent();
key.setId(snmpAgentId);
return trapTargetGroups.get(key);
}
@ManyToMany(fetch = FetchType.LAZY)
@MapKeyJoinColumn(name = "REAL_NETWORK_INTERFACE_ID", nullable = false)
@JoinTable(
name = "SIMULATION__"
+ "REAL_NETWORK_INTERFACE__"
+ "REAL_NETWORK_INTERFACE_CONFIGURATION",
joinColumns
= @JoinColumn(name = "SIMULATION_ID", nullable = false),
inverseJoinColumns
= @JoinColumn(
name = "REAL_NETWORK_INTERFACE_CONFIGURATION_ID",
nullable = false
)
)
public Map<RealNetworkInterface, RealNetworkInterfaceConfiguration>
getRealNetworkInterfaceConfigurations() {
return realNetworkInterfaceConfigurations;
}
public void setRealNetworkInterfaceConfigurations(
Map<RealNetworkInterface, RealNetworkInterfaceConfiguration>
realNetworkInterfaceConfigurations
) {
this.realNetworkInterfaceConfigurations
= realNetworkInterfaceConfigurations;
}
@Transient
public RealNetworkInterfaceConfiguration getRealNetworkInterfaceConfiguration(
Integer realNetworkInterfaceId
) {
RealNetworkInterface key = new RealNetworkInterface();
key.setId(realNetworkInterfaceId);
return realNetworkInterfaceConfigurations.get(key);
}
@ManyToMany(fetch = FetchType.LAZY)
@MapKeyJoinColumn(name = "NODE_ID", nullable = false)
@JoinTable(
name = "SIMULATION__NODE__ADDITIONAL_IP_V4_ROUTE_GROUP",
joinColumns
= @JoinColumn(name = "SIMULATION_ID", nullable = false),
inverseJoinColumns
= @JoinColumn(name = "ADDITIONAL_IP_V4_ROUTE_GROUP_ID", nullable = false)
)
public Map<Node, AdditionalIpV4RouteGroup> getAdditionalIpV4RouteGroups() {
return additionalIpV4RouteGroups;
}
public void setAdditionalIpV4RouteGroups(
Map<Node, AdditionalIpV4RouteGroup> additionalIpV4RouteGroups
) {
this.additionalIpV4RouteGroups = additionalIpV4RouteGroups;
}
@Transient
public AdditionalIpV4RouteGroup getAdditionalIpV4RouteGroup(Integer nodeId) {
Node key = new Node();
key.setId(nodeId);
return additionalIpV4RouteGroups.get(key);
}
@ManyToMany(fetch = FetchType.LAZY)
@MapKeyJoinColumn(name = "NODE_ID", nullable = false)
@JoinTable(
name = "SIMULATION__NODE__ADDITIONAL_IP_V6_ROUTE_GROUP",
joinColumns
= @JoinColumn(name = "SIMULATION_ID", nullable = false),
inverseJoinColumns
= @JoinColumn(name = "ADDITIONAL_IP_V6_ROUTE_GROUP_ID", nullable = false)
)
public Map<Node, AdditionalIpV6RouteGroup> getAdditionalIpV6RouteGroups() {
return additionalIpV6RouteGroups;
}
public void setAdditionalIpV6RouteGroups(
Map<Node, AdditionalIpV6RouteGroup> additionalIpV6RouteGroups
) {
this.additionalIpV6RouteGroups = additionalIpV6RouteGroups;
}
@Transient
public AdditionalIpV6RouteGroup getAdditionalIpV6RouteGroup(Integer nodeId) {
Node key = new Node();
key.setId(nodeId);
return additionalIpV6RouteGroups.get(key);
}
}