package com.telefonica.claudia.slm.monitoring; import java.util.Collection; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import com.telefonica.claudia.slm.common.PersistentObject; import com.telefonica.claudia.slm.naming.DirectoryEntry; import com.telefonica.claudia.slm.naming.FQN; @Entity public class nodedirectory extends DirectoryEntry implements PersistentObject { public static final int STATUS_ACTIVE=1; public static final int STATUS_DELETED=2; public static final int TYPE_VDC=1; public static final int TYPE_SERVICE=2; public static final int TYPE_VEE=3; public static final int TYPE_REPLICA=4; public static final int TYPE_NIC=5; @Id @GeneratedValue private long internalId; private long internalNodeId; private int status; private Date fechaCreacion; private Date fechaBorrado; private int tipo; @OneToMany(mappedBy="parent", fetch=FetchType.EAGER) private Set<nodedirectory> descendants = new HashSet<nodedirectory>(); @ManyToOne private nodedirectory parent; public void setInternalNodeId(long internalNodeId) { this.internalNodeId = internalNodeId; } public long getInternalNodeId() { return internalNodeId; } public void setStatus(int status) { this.status = status; } public int getStatus() { return status; } public void setFechaCreacion(Date fechaCreacion) { this.fechaCreacion = fechaCreacion; } public Date getFechaCreacion() { return fechaCreacion; } public void setFechaBorrado(Date fecha_borrado) { this.fechaBorrado = fecha_borrado; } public Date getFechaBorrado() { return fechaBorrado; } public void setTipo(int tipo) { this.tipo = tipo; } public int getTipo() { return tipo; } public void setType(int tipo) { this.tipo = tipo; } public int getType() { return tipo; } public void setDescendants(Set<nodedirectory> descendants) { this.descendants = descendants; } public Set<?> getDescendants() { return descendants; } @SuppressWarnings("unchecked") public Set<?> getAllDescendants() { Set<nodedirectory> nodes= new HashSet<nodedirectory>(); Set<nodedirectory> toBeProcessed = new HashSet<nodedirectory>(); Set<nodedirectory> nextLevel = new HashSet<nodedirectory>(); toBeProcessed.addAll(descendants); while (!toBeProcessed.isEmpty()) { nextLevel.clear(); for (nodedirectory nd: toBeProcessed) { nextLevel.addAll((Set<? extends nodedirectory>) nd.getDescendants()); } nodes.addAll(toBeProcessed); toBeProcessed.clear(); toBeProcessed.addAll(nextLevel); } return nodes; } public void addDescendant(nodedirectory node) { descendants.add(node); } public long getObjectId() { return internalId; } public void setParent(nodedirectory parent) { this.parent = parent; } public nodedirectory getParent() { return parent; } @Override public FQN getFQN() { return new FQN(getFqnString()); } }