All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opennms.netmgt.model.OnmsHwEntity Maven / Gradle / Ivy

There is a newer version: 33.1.2
Show newest version
/*
 * Licensed to The OpenNMS Group, Inc (TOG) under one or more
 * contributor license agreements.  See the LICENSE.md file
 * distributed with this work for additional information
 * regarding copyright ownership.
 *
 * TOG licenses this file to You under the GNU Affero General
 * Public License Version 3 (the "License") or (at your option)
 * any later version.  You may not use this file except in
 * compliance with the License.  You may obtain a copy of the
 * License at:
 *
 *      https://www.gnu.org/licenses/agpl-3.0.txt
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied.  See the License for the specific
 * language governing permissions and limitations under the
 * License.
 */
package org.opennms.netmgt.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.hibernate.annotations.Sort;
import org.hibernate.annotations.SortType;

/**
 * The Class OnmsHwEntity.
 * 
 * @author Alejandro Galue
 */
@XmlRootElement(name = "hwEntity")
@Entity
@Table(name="hwEntity")
@XmlAccessorType(XmlAccessType.NONE)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class OnmsHwEntity implements Serializable, Comparable {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = -543872118396806431L;

    /** The id. */
    private Integer m_id;

    /** The entity physical index. */
    private Integer m_entPhysicalIndex;

    /** The entity physical parent relative position. */
    private Integer m_entPhysicalParentRelPos;

    /** The entity physical contained in. */
    private Integer m_entPhysicalContainedIn;

    /** The entity physical name. */
    private String m_entPhysicalName;

    /** The entity physical description. */
    private String m_entPhysicalDescr;

    /** The entity physical alias. */
    private String m_entPhysicalAlias;

    /** The entity physical vendor type. */
    private String m_entPhysicalVendorType;

    /** The entity physical class. */
    private String m_entPhysicalClass;

    /** The entity physical manufacturer name. */
    private String m_entPhysicalMfgName;

    /** The entity physical model name. */
    private String m_entPhysicalModelName;

    /** The entity physical hardware revision. */
    private String m_entPhysicalHardwareRev;

    /** The entity physical firmware revision. */
    private String m_entPhysicalFirmwareRev;

    /** The entity physical software revision. */
    private String m_entPhysicalSoftwareRev;

    /** The entity physical serial number. */
    private String m_entPhysicalSerialNum;

    /** The entity physical asset id. */
    private String m_entPhysicalAssetID;

    /** The entity physical is FRU. */
    private Boolean m_entPhysicalIsFRU;

    /** The entity physical manufactured date. */
    private Date m_entPhysicalMfgDate; // FIXME This is not being used

    /** The entity physical URIs. */
    private String m_entPhysicalUris;

    /** The OpenNMS node. */
    private OnmsNode m_node;

    private Integer m_nodeId;

    /** The custom hardware attributes. */
    private SortedSet m_entAliases = new TreeSet<>();

    /** The custom hardware attributes. */
    private SortedSet m_hwAttributes = new TreeSet<>();

    /** The entity's parent. */
    private OnmsHwEntity m_parent;

    private Integer m_parentId;

    /** The entity's children. */
    private SortedSet m_children = new TreeSet<>();

    /**
     * The Constructor.
     */
    public OnmsHwEntity() {
    }

    /**
     * Gets the id.
     *
     * @return the id
     */
    @Id
    @Column(nullable=false)
    @XmlTransient
    @SequenceGenerator(name="opennmsSequence", sequenceName="opennmsNxtId")
    @GeneratedValue(generator="opennmsSequence")
    public Integer getId() {
        return m_id;
    }

    /**
     * Sets the id.
     *
     * @param id the id
     */
    public void setId(Integer id) {
        m_id = id;
    }

    /**
     * Gets the entity alias mappings.
     *
     * @return the entity alias mappings
     */
    @OneToMany(mappedBy="hwEntity", fetch=FetchType.LAZY, cascade={CascadeType.ALL}, orphanRemoval=true)
    @Sort(type = SortType.NATURAL)
    @XmlElement(name="hwEntityAliases")
    public SortedSet getEntAliases() {
        return m_entAliases;
    }

    /**
     * Sets the entity alias mappings.
     *
     * @param entAliases the entity alias mappings to set
     */
    public void setEntAliases(SortedSet entAliases) {
        m_entAliases = entAliases;
    }

    public void addEntAliases(SortedSet entAliases) {
        m_entAliases.addAll(entAliases);
    }

    public void addHwEntAliasList(List entityAliasList) {
        m_entAliases.addAll(entityAliasList);
    }

    /**
     * Gets the entity id.
     *
     * @return the entity id
     */
    @XmlID
    @XmlAttribute(name="entityId")
    @Transient
    public String getOnmsHwEntityId() {
        return getId() == null ? null : getId().toString();
    }

    /**
     * Sets the entity id.
     *
     * @param id the entity id
     */
    public void setOnmsHwEntityId(final String id) {
        setId(Integer.valueOf(id));
    }

    /**
     * Gets the entity physical index.
     *
     * @return the entity physical index
     */
    @Column(nullable=false)
    @XmlAttribute
    public Integer getEntPhysicalIndex() {
        return m_entPhysicalIndex;
    }

    /**
     * Sets the entity physical index.
     *
     * @param entPhysicalIndex the entity physical index
     */
    public void setEntPhysicalIndex(Integer entPhysicalIndex) {
        this.m_entPhysicalIndex = entPhysicalIndex;
    }

    /**
     * Gets the entity physical contained in.
     * 

This is used only by the ENTITY-MIB parser, it is not required to persist it on the database.

* * @return the entity physical contained in */ @Transient @XmlTransient public Integer getEntPhysicalContainedIn() { return m_entPhysicalContainedIn; } /** * Sets the entity physical contained in. * * @param entPhysicalContainedIn the entity physical contained in */ public void setEntPhysicalContainedIn(Integer entPhysicalContainedIn) { this.m_entPhysicalContainedIn = entPhysicalContainedIn; } /** * Gets the entity physical description. * * @return the entity physical description */ @Column @XmlElement public String getEntPhysicalDescr() { return m_entPhysicalDescr; } /** * Sets the entity physical description. * * @param entPhysicalDescr the entity physical description */ public void setEntPhysicalDescr(String entPhysicalDescr) { this.m_entPhysicalDescr = entPhysicalDescr; } /** * Gets the entity physical vendor type. * * @return the entity physical vendor type */ @Column @XmlElement public String getEntPhysicalVendorType() { return m_entPhysicalVendorType; } /** * Sets the entity physical vendor type. * * @param entPhysicalVendorType the entity physical vendor type */ public void setEntPhysicalVendorType(String entPhysicalVendorType) { this.m_entPhysicalVendorType = entPhysicalVendorType; } /** * Gets the entity physical class. * * @return the entity physical class */ @Column @XmlElement public String getEntPhysicalClass() { return m_entPhysicalClass; } /** * Sets the entity physical class. * * @param entPhysicalClass the entity physical class */ public void setEntPhysicalClass(String entPhysicalClass) { this.m_entPhysicalClass = entPhysicalClass; } /** * Gets the entity physical parent relative position. * * @return the entity physical parent relative position */ @Column @XmlTransient public Integer getEntPhysicalParentRelPos() { return m_entPhysicalParentRelPos; } /** * Sets the entity physical parent relative position. * * @param entPhysicalParentRelPos the entity physical parent relative position */ public void setEntPhysicalParentRelPos(Integer entPhysicalParentRelPos) { this.m_entPhysicalParentRelPos = entPhysicalParentRelPos; } /** * Gets the entity physical name. * * @return the entity physical name */ @Column @XmlElement public String getEntPhysicalName() { return m_entPhysicalName; } /** * Sets the entity physical name. * * @param entPhysicalName the entity physical name */ public void setEntPhysicalName(String entPhysicalName) { this.m_entPhysicalName = entPhysicalName; } /** * Gets the entity physical hardware revision. * * @return the entity physical hardware revision */ @Column @XmlElement public String getEntPhysicalHardwareRev() { return m_entPhysicalHardwareRev; } /** * Sets the entity physical hardware revision. * * @param entPhysicalHardwareRev the entity physical hardware revision */ public void setEntPhysicalHardwareRev(String entPhysicalHardwareRev) { this.m_entPhysicalHardwareRev = entPhysicalHardwareRev; } /** * Gets the entity physical firmware revision. * * @return the entity physical firmware revision */ @Column @XmlElement public String getEntPhysicalFirmwareRev() { return m_entPhysicalFirmwareRev; } /** * Sets the entity physical firmware revision. * * @param entPhysicalFirmwareRev the entity physical firmware revision */ public void setEntPhysicalFirmwareRev(String entPhysicalFirmwareRev) { this.m_entPhysicalFirmwareRev = entPhysicalFirmwareRev; } /** * Gets the entity physical software revision. * * @return the entity physical software revision */ @Column @XmlElement public String getEntPhysicalSoftwareRev() { return m_entPhysicalSoftwareRev; } /** * Sets the entity physical software revision. * * @param entPhysicalSoftwareRev the entity physical software revision */ public void setEntPhysicalSoftwareRev(String entPhysicalSoftwareRev) { this.m_entPhysicalSoftwareRev = entPhysicalSoftwareRev; } /** * Gets the entity physical serial number. * * @return the entity physical serial number */ @Column @XmlElement public String getEntPhysicalSerialNum() { return m_entPhysicalSerialNum; } /** * Sets the entity physical serial number. * * @param entPhysicalSerialNum the entity physical serial number */ public void setEntPhysicalSerialNum(String entPhysicalSerialNum) { this.m_entPhysicalSerialNum = entPhysicalSerialNum; } /** * Gets the entity physical manufacturer name. * * @return the entity physical manufacturer name */ @Column @XmlElement public String getEntPhysicalMfgName() { return m_entPhysicalMfgName; } /** * Sets the entity physical manufacturer name. * * @param entPhysicalMfgName the entity physical manufacturer name */ public void setEntPhysicalMfgName(String entPhysicalMfgName) { this.m_entPhysicalMfgName = entPhysicalMfgName; } /** * Gets the entity physical model name. * * @return the entity physical model name */ @Column @XmlElement public String getEntPhysicalModelName() { return m_entPhysicalModelName; } /** * Sets the entity physical model name. * * @param entPhysicalModelName the entity physical model name */ public void setEntPhysicalModelName(String entPhysicalModelName) { this.m_entPhysicalModelName = entPhysicalModelName; } /** * Gets the entity physical alias. * * @return the entity physical alias */ @Column @XmlElement public String getEntPhysicalAlias() { return m_entPhysicalAlias; } /** * Sets the entity physical alias. * * @param entPhysicalAlias the entity physical alias */ public void setEntPhysicalAlias(String entPhysicalAlias) { this.m_entPhysicalAlias = entPhysicalAlias; } /** * Gets the entity physical asset id. * * @return the entity physical asset id */ @Column @XmlElement public String getEntPhysicalAssetID() { return m_entPhysicalAssetID; } /** * Sets the entity physical asset id. * * @param entPhysicalAssetID the entity physical asset id */ public void setEntPhysicalAssetID(String entPhysicalAssetID) { this.m_entPhysicalAssetID = entPhysicalAssetID; } /** * Gets the entity physical is FRU. * * @return the entity physical is FRU */ @Column @XmlElement public Boolean getEntPhysicalIsFRU() { return m_entPhysicalIsFRU; } /** * Sets the entity physical is FRU. * * @param entPhysicalIsFRU the entity physical is FRU */ public void setEntPhysicalIsFRU(Boolean entPhysicalIsFRU) { this.m_entPhysicalIsFRU = entPhysicalIsFRU; } /** * Gets the entity physical manufactured date. * * @return the entity physical manufactured date */ @Column @XmlElement public Date getEntPhysicalMfgDate() { return m_entPhysicalMfgDate; } /** * Sets the entity physical manufactured date. * * @param entPhysicalMfgDate the entity physical manufactured date */ public void setEntPhysicalMfgDate(Date entPhysicalMfgDate) { this.m_entPhysicalMfgDate = entPhysicalMfgDate; } /** * Gets the entity physical URIs. * * @return the entity physical URIs */ @Column @XmlElement public String getEntPhysicalUris() { return m_entPhysicalUris; } /** * Sets the entity physical URIs. * * @param entPhysicalUris the entity physical URIs */ public void setEntPhysicalUris(String entPhysicalUris) { this.m_entPhysicalUris = entPhysicalUris; } /** * Gets the parent. * * @return the parent */ @XmlTransient @ManyToOne(cascade={CascadeType.ALL}, optional=true) @JoinColumn(name="parentId") public OnmsHwEntity getParent() { return m_parent; } /** * Sets the parent. * * @param parent the parent */ public void setParent(OnmsHwEntity parent) { this.m_parent = parent; } public void setParentId(Integer parentId) { this.m_parentId = parentId; } @Transient public Integer getParentId() { return m_parentId; } /** * Gets the parent id. * * @return the parent id */ @Transient @XmlAttribute(name="parentPhysicalIndex") public Integer getParentIndex() { return m_parent == null ? null : m_parent.getEntPhysicalIndex(); } /** * Gets the children. * * @return the children */ @XmlElement(name="hwEntity") @XmlElementWrapper(name="children") @Sort(type = SortType.NATURAL, comparator = OnmsHwEntity.class) @OneToMany(mappedBy="parent", fetch=FetchType.LAZY, cascade={CascadeType.ALL}) public SortedSet getChildren() { return m_children; } /** * Sets the children. * * @param children the children */ public void setChildren(SortedSet children) { if (children != null) this.m_children = children; } /** * Adds the child entity. * * @param child the child */ public void addChildEntity(OnmsHwEntity child) { child.setParent(this); getChildren().add(child); } /** * Gets the child by index. * * @param entPhysicalIndex the entity physical index * @return the child by index */ public OnmsHwEntity getChildByIndex(Integer entPhysicalIndex) { for (OnmsHwEntity child : m_children) { if (child.getEntPhysicalIndex() == entPhysicalIndex) { return child; } } return null; } /** * Removes the child. * * @param child child entity */ public void removeChild(OnmsHwEntity child) { if (m_children != null) m_children.remove(child); } /** * Gets the node. * * @return the node */ @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="nodeId") @XmlAttribute(name="nodeId") //@XmlIDREF @XmlJavaTypeAdapter(NodeIdAdapter.class) public OnmsNode getNode() { return m_node; } /** * Sets the node. * * @param node the node */ public void setNode(OnmsNode node) { if (node == null) return; m_node = node; if (m_children == null) return; for (OnmsHwEntity child : m_children) { child.setNode(node); } } @Transient public Integer getNodeId() { return m_nodeId; } public void setNodeId(Integer m_nodeId) { this.m_nodeId = m_nodeId; } /** * Gets the hardware entity attributes. * * @return the hardware entity attributes */ @OneToMany(mappedBy="hwEntity", fetch=FetchType.LAZY, cascade={CascadeType.ALL}, orphanRemoval=true) @Sort(type = SortType.NATURAL) @XmlElement(name="hwEntityAttribute") @XmlElementWrapper(name="vendorAttributes") public SortedSet getHwEntityAttributes() { return m_hwAttributes; } /** * Sets the hardware entity attributes. * * @param hwAttributes the hardware entity attributes */ public void setHwEntityAttributes(SortedSet hwAttributes) { if (hwAttributes != null) m_hwAttributes = hwAttributes; } /** * Adds the attribute. * * @param type the type * @param value the value */ public void addAttribute(HwEntityAttributeType type, String value) { OnmsHwEntityAttribute attr = new OnmsHwEntityAttribute(type, value); attr.setHwEntity(this); m_hwAttributes.add(attr); } /** * Gets the attribute. * * @param typeName the type name * @return the attribute */ public OnmsHwEntityAttribute getAttribute(String typeName) { for (OnmsHwEntityAttribute attr : m_hwAttributes) { if (attr.getTypeName().equals(typeName)) { return attr; } } return null; } /** * Gets the attribute value. * * @param typeName the type name * @return the attribute value */ public String getAttributeValue(String typeName) { final OnmsHwEntityAttribute attr = getAttribute(typeName); return attr == null ? null : attr.getValue(); } /** * Gets the attribute class. * * @param typeName the type name * @return the attribute class */ public String getAttributeClass(String typeName) { final OnmsHwEntityAttribute attr = getAttribute(typeName); return attr == null ? null : attr.getType().getAttributeClass(); } /** * Checks if is root. * * @return true, if checks if is root */ @Transient public boolean isRoot() { return m_parent == null || m_entPhysicalContainedIn == 0; } /** * Checks for children. * * @return true, if checks for children */ @Transient public boolean hasChildren() { return !m_hwAttributes.isEmpty(); } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { ToStringBuilder b = new ToStringBuilder(this.getClass().getSimpleName(), ToStringStyle.SHORT_PREFIX_STYLE); if (m_node != null) b.append("nodeId", m_node.getId()); if (getParentIndex() != null) b.append("parentPhysicalIndex", getParentIndex()); if (m_entPhysicalIndex != null) b.append("entPhysicalIndex", m_entPhysicalIndex); if (m_entAliases != null) b.append("entAlias", m_entAliases); if (m_entPhysicalName != null) b.append("entPhysicalName", m_entPhysicalName); if (m_entPhysicalDescr != null) b.append("entPhysicalDescr", m_entPhysicalDescr); if (m_entPhysicalAlias != null) b.append("entPhysicalAlias", m_entPhysicalAlias); if (m_entPhysicalVendorType != null) b.append("entPhysicalVendorType", m_entPhysicalVendorType); if (m_entPhysicalClass != null) b.append("entPhysicalClass", m_entPhysicalClass); if (m_entPhysicalMfgName != null) b.append("entPhysicalMfgName", m_entPhysicalMfgName); if (m_entPhysicalModelName != null) b.append("entPhysicalModelName", m_entPhysicalModelName); if (m_entPhysicalHardwareRev != null) b.append("entPhysicalHardwareRev", m_entPhysicalHardwareRev); if (m_entPhysicalFirmwareRev != null) b.append("entPhysicalFirmwareRev", m_entPhysicalFirmwareRev); if (m_entPhysicalSoftwareRev != null) b.append("entPhysicalSoftwareRev", m_entPhysicalSoftwareRev); if (m_entPhysicalSerialNum != null) b.append("entPhysicalSerialNum", m_entPhysicalSerialNum); if (!m_hwAttributes.isEmpty()) b.append("vendorAttributes", m_hwAttributes.toString()); if (!m_children.isEmpty()) b.append("children", m_children.toString()); return b.toString(); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return toString().hashCode(); } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj instanceof OnmsHwEntity) { return toString().equals(obj.toString()); } return false; } /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ @Override public int compareTo(OnmsHwEntity o) { if (o == null) return -1; return toString().compareTo(o.toString()); } /** * Fix relationships. * * When a node is created from a XML, the internal relationships may not be correct. * Prior storing an hardware object into the database, this method must be called to * ensure that the DB relationships are correct. */ public void fixRelationships() { for (OnmsHwEntityAttribute attrib : m_hwAttributes) { attrib.setHwEntity(this); } if (m_children == null) return; for (OnmsHwEntity child : m_children) { child.setParent(this); child.fixRelationships(); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy