From: Alex Bennee <a...@cbnl.com> This is a pre-requisite for the slippy maps implementation. Instead of storing geo-location information in XML configuration it is now stored in node_geolocation table. This table is currently populated by the provisioning importer. --- .../src/main/liquibase/1.8.10-cbnl/changelog.xml | 28 +++ core/schema/src/main/liquibase/changelog.xml | 1 + .../src/main/filtered/etc/create.sql | 8 + opennms-config/src/main/castor/model-import.xsd | 11 + .../org/opennms/netmgt/dao/GeolocationDao.java | 59 +++++ .../dao/hibernate/GeolocationDaoHibernate.java | 84 ++++++++ .../META-INF/opennms/applicationContext-dao.xml | 1 + opennms-dao/src/test/resources/create.sql | 7 + .../org/opennms/netmgt/model/OnmsGeolocation.java | 223 ++++++++++++++++++++ .../java/org/opennms/netmgt/model/OnmsNode.java | 54 +++++- .../persist/AbstractRequisitionVisitor.java | 8 + .../persist/OnmsNodeGeolocationRequisition.java | 87 ++++++++ .../provision/persist/OnmsNodeRequisition.java | 17 ++ .../provision/persist/RequisitionVisitor.java | 17 ++- .../requisition/RequisitionGeolocation.java | 82 +++++++ .../persist/requisition/RequisitionNode.java | 17 ++- .../provision/service/DefaultProvisionService.java | 5 + .../netmgt/provision/service/ProvisionService.java | 4 + .../provision/service/RequisitionAccountant.java | 7 + .../service/operations/SaveOrUpdateOperation.java | 16 ++- .../netmgt/provision/service/ProvisionerTest.java | 13 +- opennms-webapp/src/main/webapp/includes/header.jsp | 18 ++- 22 files changed, 757 insertions(+), 10 deletions(-) create mode 100644 core/schema/src/main/liquibase/1.8.10-cbnl/changelog.xml create mode 100644 opennms-dao/src/main/java/org/opennms/netmgt/dao/GeolocationDao.java create mode 100644 opennms-dao/src/main/java/org/opennms/netmgt/dao/hibernate/GeolocationDaoHibernate.java create mode 100644 opennms-model/src/main/java/org/opennms/netmgt/model/OnmsGeolocation.java create mode 100644 opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeGeolocationRequisition.java create mode 100644 opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionGeolocation.java
diff --git a/core/schema/src/main/liquibase/1.8.10-cbnl/changelog.xml b/core/schema/src/main/liquibase/1.8.10-cbnl/changelog.xml new file mode 100644 index 0000000..0c4ffae --- /dev/null +++ b/core/schema/src/main/liquibase/1.8.10-cbnl/changelog.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<databaseChangeLog + xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 + http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd"> + +<changeSet author="gb@kynesim" id="1.8.6-cbnl-node_geoloctaion_table"> + <preConditions onFail="MARK_RAN"> + <not> + <tableExists tableName="node_geolocation" /> + </not> + </preConditions> + + + <createTable tableName="node_geolocation"> + <column name="nodeid" type="int"> + <constraints primaryKey="true" nullable="false"/> + </column> + <column name="id" type="int" /> + + <column name="geolocationlatitude" type="double precision"/> + <column name="geolocationlongitude" type="double precision"/> + </createTable> +</changeSet> + +</databaseChangeLog> diff --git a/core/schema/src/main/liquibase/changelog.xml b/core/schema/src/main/liquibase/changelog.xml index 6865e22..9f6df6c 100644 --- a/core/schema/src/main/liquibase/changelog.xml +++ b/core/schema/src/main/liquibase/changelog.xml @@ -42,6 +42,7 @@ <include file="1.8.6/changelog.xml" /> <include file="1.8.8/changelog.xml" /> <include file="1.8.11/changelog.xml" /> + <include file="1.8.10-cbnl/changelog.xml" /> <include file="stored-procedures/getManagePercentAvailIntfWindow.xml" /> <include file="stored-procedures/getManagePercentAvailNodeWindow.xml" /> diff --git a/opennms-base-assembly/src/main/filtered/etc/create.sql b/opennms-base-assembly/src/main/filtered/etc/create.sql index 57eee3d..01466c2 100644 --- a/opennms-base-assembly/src/main/filtered/etc/create.sql +++ b/opennms-base-assembly/src/main/filtered/etc/create.sql @@ -43,6 +43,7 @@ drop table snmpInterface cascade; drop table ipInterface cascade; drop table alarms cascade; drop table node cascade; +drop table node_geolocation cascade; drop table service cascade; drop table distPoller cascade; drop table events cascade; @@ -325,6 +326,13 @@ create table node ( constraint fk_dpName foreign key (dpName) references distPoller ); + +create table node_geolocation ( + nodeId integer not null, + geolocationlatitude real, + geolocationlongitude real +); + create index node_id_type_idx on node(nodeID, nodeType); create index node_label_idx on node(nodeLabel); create index node_dpname_idx on node(dpName); diff --git a/opennms-config/src/main/castor/model-import.xsd b/opennms-config/src/main/castor/model-import.xsd index c15f06c..26bd182 100644 --- a/opennms-config/src/main/castor/model-import.xsd +++ b/opennms-config/src/main/castor/model-import.xsd @@ -23,6 +23,7 @@ <sequence> <element ref="this:interface" minOccurs="0" maxOccurs="unbounded" /> <element ref="this:category" minOccurs="0" maxOccurs="unbounded" /> + <element ref="this:geolocation" minOccurs="0" maxOccurs="1" /> <element ref="this:asset" minOccurs="0" maxOccurs="unbounded" /> </sequence> <attribute name="node-label" use="required"> @@ -148,4 +149,14 @@ <attribute name="value" type="string" use="required" /> </complexType> </element> + + <element name="geolocation"> + <annotation> + <documentation>This element is used to specify a nodes physical location.</documentation> + </annotation> + <complexType> + <attribute name="lat" type="double" use="required" /> + <attribute name="lon" type="double" use="required" /> + </complexType> + </element> </schema> diff --git a/opennms-dao/src/main/java/org/opennms/netmgt/dao/GeolocationDao.java b/opennms-dao/src/main/java/org/opennms/netmgt/dao/GeolocationDao.java new file mode 100644 index 0000000..db64fe9 --- /dev/null +++ b/opennms-dao/src/main/java/org/opennms/netmgt/dao/GeolocationDao.java @@ -0,0 +1,59 @@ +// +// This file is part of the OpenNMS(R) Application. +// +// OpenNMS(R) is Copyright (C) 2006 The OpenNMS Group, Inc. All rights reserved. +// OpenNMS(R) is a derivative work, containing both original code, included code and modified +// code that was published under the GNU General Public License. Copyrights for modified +// and included code are below. +// +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. +// +// Modifications: +// +// 2007 Dec 09: Add getCriterionForGeolocationSetsUnion. - d...@opennms.org +// +// Original code base Copyright (C) 1999-2001 Oculan Corp. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// For more information contact: +// OpenNMS Licensing <lice...@opennms.org> +// http://www.opennms.org/ +// http://www.opennms.com/ + +package org.opennms.netmgt.dao; + +import java.util.List; + +import org.hibernate.criterion.Criterion; +import org.opennms.netmgt.model.OnmsGeolocation; + +/** + * <p>GeolocationDao interface.</p> + * + * @author ranger + * @version $Id: $ + */ +public interface GeolocationDao extends OnmsDao<OnmsGeolocation, Integer> { + + /** + * <p>findByName</p> + * + * @param name a {@link java.lang.String} object. + * @return a {@link org.opennms.netmgt.model.OnmsGeolocation} object. + */ + OnmsGeolocation findByLocation(Double lat, Double lon); + +} diff --git a/opennms-dao/src/main/java/org/opennms/netmgt/dao/hibernate/GeolocationDaoHibernate.java b/opennms-dao/src/main/java/org/opennms/netmgt/dao/hibernate/GeolocationDaoHibernate.java new file mode 100644 index 0000000..a686a1f --- /dev/null +++ b/opennms-dao/src/main/java/org/opennms/netmgt/dao/hibernate/GeolocationDaoHibernate.java @@ -0,0 +1,84 @@ +/* + * This file is part of the OpenNMS(R) Application. + * + * OpenNMS(R) is Copyright (C) 2006 The OpenNMS Group, Inc. All rights reserved. + * OpenNMS(R) is a derivative work, containing both original code, included code and modified + * code that was published under the GNU General Public License. Copyrights for modified + * and included code are below. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * Modifications: + * + * 2007 Dec 09: Format code, add getCriterionForGeolocationSetsUnion. - d...@opennms.org + * 2007 Jul 03: Organize imports. - d...@opennms.org + * + * Original code base Copyright (C) 1999-2001 Oculan Corp. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * For more information contact: + * OpenNMS Licensing <lice...@opennms.org> + * http://www.opennms.org/ + * http://www.opennms.com/ + * + */ +package org.opennms.netmgt.dao.hibernate; + +import java.util.ArrayList; +import java.util.List; + +import org.hibernate.Hibernate; +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Restrictions; +import org.hibernate.type.IntegerType; +import org.hibernate.type.Type; +import org.opennms.netmgt.dao.GeolocationDao; +import org.opennms.netmgt.model.OnmsGeolocation; +import org.opennms.netmgt.model.OnmsCriteria; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +/** + * <p>GeolocationDaoHibernate class.</p> + * + * @author ranger + * @version $Id: $ + */ +public class GeolocationDaoHibernate extends AbstractDaoHibernate<OnmsGeolocation, Integer> implements GeolocationDao { + + /** + * <p>Constructor for GeolocationDaoHibernate.</p> + */ + public GeolocationDaoHibernate() { + super(OnmsGeolocation.class); + } + + /** {@inheritDoc} */ + public OnmsGeolocation findByLocation(Double lat, Double lon) { + return findUnique("from OnmsGeolocation as node_geolocation where node_geolocation.geolocationlatitude = ? and node_geolocation.geolocationLongitude = lon", lat, lon); + } + + + /** {@inheritDoc} */ + // @Override + // protected String getKey(OnmsGeolocation geoloc) { + // return geoloc.getId().toString(); + //} + + + + +} diff --git a/opennms-dao/src/main/resources/META-INF/opennms/applicationContext-dao.xml b/opennms-dao/src/main/resources/META-INF/opennms/applicationContext-dao.xml index d3aa1fe..dbc6895 100644 --- a/opennms-dao/src/main/resources/META-INF/opennms/applicationContext-dao.xml +++ b/opennms-dao/src/main/resources/META-INF/opennms/applicationContext-dao.xml @@ -35,6 +35,7 @@ <list> <value>org.opennms.netmgt.model.OnmsDistPoller</value> <value>org.opennms.netmgt.model.OnmsAssetRecord</value> + <value>org.opennms.netmgt.model.OnmsGeolocation</value> <value>org.opennms.netmgt.model.PathElement</value> <value>org.opennms.netmgt.model.OnmsNode</value> <value>org.opennms.netmgt.model.OnmsIpInterface</value> diff --git a/opennms-dao/src/test/resources/create.sql b/opennms-dao/src/test/resources/create.sql index 4f7eca6..c6d10ea 100644 --- a/opennms-dao/src/test/resources/create.sql +++ b/opennms-dao/src/test/resources/create.sql @@ -42,6 +42,7 @@ drop table snmpInterface cascade; drop table ipInterface cascade; drop table alarms cascade; drop table node cascade; +drop table node_geolocation cascade; drop table service cascade; drop table distPoller cascade; drop table events cascade; @@ -304,6 +305,12 @@ create table node ( create index node_id_type_idx on node(nodeID, nodeType); create index node_label_idx on node(nodeLabel); +create table node_geolocation2 ( + nodeId integer not null, + geolocationlatitude real, + geolocationlongitude real +); + --######################################################################### --# snmpInterface Table - Augments the ipInterface table with information --# available from IP interfaces which also support diff --git a/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsGeolocation.java b/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsGeolocation.java new file mode 100644 index 0000000..654550c --- /dev/null +++ b/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsGeolocation.java @@ -0,0 +1,223 @@ +// +// This file is part of the OpenNMS(R) Application. +// +// OpenNMS(R) is Copyright (C) 2006 The OpenNMS Group, Inc. All rights reserved. +// OpenNMS(R) is a derivative work, containing both original code, included code and modified +// code that was published under the GNU General Public License. Copyrights for modified +// and included code are below. +// +// OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. +// +// Modifications: +// +// 2007 Apr 05: Organized imports. - d...@opennms.org +// +// Original code base Copyright (C) 1999-2001 Oculan Corp. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// For more information contact: +// OpenNMS Licensing <lice...@opennms.org> +// http://www.opennms.org/ +// http://www.opennms.com/ +// +package org.opennms.netmgt.model; + +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; + +import org.opennms.netmgt.model.OnmsNode; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import javax.xml.bind.annotation.XmlIDREF; +import javax.persistence.OneToOne; +import javax.persistence.FetchType; + +import org.hibernate.annotations.CollectionOfElements; +import org.springframework.core.style.ToStringCreator; + +/** + * <p>OnmsGeolocation class.</p> + * + * @author ranger + * @version $Id: $ + */ +@XmlRootElement(name = "geolocation") +@Entity +@Table(name="node_geolocation") +public class OnmsGeolocation implements Serializable, Comparable<OnmsGeolocation> { + + private static final long serialVersionUID = 4694348093332239377L; + + /** identifier field */ + private Integer m_id; + private OnmsNode node; + + /** persistent field */ + private Double lat; + private Double lon; + + + /** + * <p>Constructor for OnmsGeolocation.</p> + * + * @param lat a Double object. + * @param lonr a Double object. + */ + public OnmsGeolocation(Double lat, Double lon) { + this.lat = lat; + this.lon = lon; + } + + /** + * default constructor + */ + public OnmsGeolocation() { + } + + @Id + @SequenceGenerator(name="opennmsSequence", sequenceName="opennmsNxtId") + @GeneratedValue(generator="opennmsSequence") + public Integer getId() { + return m_id; + } + + protected void setId(Integer id) { + m_id = id; + } + + + /** + * <p>getNodeId</p> + * + * @return a {@link java.lang.Integer} object. + */ + @XmlIDREF + @OneToOne(fetch=FetchType.LAZY) + @JoinColumn(name="nodeId") + public OnmsNode getNode() { + return node; + } + + /** + * <p>setNodeId</p> + * + * @param id a {@link java.lang.Integer} object. + */ + public void setNode(OnmsNode node) { + this.node = node; + } + + /** + * <p>getLat</p> + * + * @return a {@link java.lang.Double} object. + */ + @XmlAttribute(name="latitude") + @Column(name="geolocationLatitude", unique=false, nullable=false) + public Double getLat() { + return this.lat; + } + /** + * <p>setlat</p> + * + * @param lat a {@link java.lang.Double} object. + */ + public void setLat(Double lat) { + System.out.println(" ***************************************** GEO SETLAT ****************************************" + lat); + this.lat = lat; + } + + /** + * <p>getDescription</p> + * + * @return a {@link java.lang.Double} object. + */ + @XmlElement(name="longitude") + @Column(name="geolocationLongitude") + public Double getLon() { + System.out.println(" ***************************************** GEO SETLON ****************************************" + lon); + + return this.lon; + } + + /** + * <p>setDescription</p> + * + * @param lon a {@link java.lang.Double} object. + */ + public void setLon(Double lon) { + this.lon = lon; + } + + /** + * <p>toString</p> + * + * @return a {@link java.lang.String} object. + */ + public String toString() { + return new ToStringCreator(this) + //.append("id", getNodeId()) + .append("lat", getLat()) + .append("lon", getLon()) + .toString(); + } + + /** {@inheritDoc} */ + public boolean equals(Object obj) { + if (obj instanceof OnmsGeolocation) { + OnmsGeolocation t = (OnmsGeolocation)obj; + return (this.lat == t.lat && this.lon == t.lon); + } + return false; + } + + public void mergeLocation(OnmsGeolocation newLocation) { + this.setLat(newLocation.getLat()); + this.setLon(newLocation.getLon()); + } + + /** + * <p>hashCode</p> + * + * @return a int. + */ + //public int hashCode() { + // return m_name.hashCode(); + // } + + /** + * <p>compareTo</p> + * + * @param o a {@link org.opennms.netmgt.model.OnmsGeolocation} object. + * @return a int. + */ + public int compareTo(OnmsGeolocation o) { + return (((o.lat - this.lat) < 0) ? -1 : 1); + } + +} diff --git a/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java b/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java index 1fe77ab..7ce3f1c 100644 --- a/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java +++ b/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java @@ -164,6 +164,8 @@ public class OnmsNode extends OnmsEntity implements Serializable, private Set<OnmsCategory> m_categories = new LinkedHashSet<OnmsCategory>(); + private OnmsGeolocation m_geolocation; + private PathElement m_pathElement; /** @@ -593,7 +595,7 @@ public class OnmsNode extends OnmsEntity implements Serializable, * * @return a {@link org.opennms.netmgt.model.OnmsAssetRecord} object. */ - @OneToOne(mappedBy="node", cascade = CascadeType.ALL, fetch=FetchType.LAZY) + @OneToOne(mappedBy="node", cascade = CascadeType.ALL, fetch=FetchType.LAZY) public OnmsAssetRecord getAssetRecord() { return m_assetRecord; } @@ -619,7 +621,7 @@ public class OnmsNode extends OnmsEntity implements Serializable, @AttributeOverride(name="serviceName", column=@Column(name="criticalPathServiceName", table="pathOutage")) }) public PathElement getPathElement() { - return m_pathElement; + return m_pathElement; } /** @@ -755,7 +757,28 @@ public class OnmsNode extends OnmsEntity implements Serializable, public boolean addCategory(OnmsCategory category) { return getCategories().add(category); } - + + + /** + * <p>setGeolocation</p> + * + * @param geolocation a {@link org.opennms.netmgt.model.OnmsGeolocation} object. + * @return void. + */ + public void setGeolocation(final OnmsGeolocation geoloc) { + m_geolocation = geoloc; + + if (geoloc != null) { + m_geolocation.setNode(this); + } + + } + + @OneToOne(mappedBy="node", cascade = CascadeType.ALL, fetch=FetchType.LAZY) + public OnmsGeolocation getGeolocation() { + return m_geolocation; + } + /** * <p>removeCategory</p> * @@ -1130,6 +1153,29 @@ public class OnmsNode extends OnmsEntity implements Serializable, } } + + /** + * Truly merges the node's geolocaion + * + * @param scannedNode a {@link org.opennms.netmgt.model.OnmsNode} object. + */ + public void mergeGeolocation(OnmsNode scannedNode) { + if (this.getGeolocation() == null) { + OnmsGeolocation last_geo = scannedNode.getGeolocation(); + m_geolocation = new OnmsGeolocation(last_geo.getLat(), + last_geo.getLon()); + m_geolocation.setNode(this); + + + System.out.println(" ######################################### NEW GEO ################################### " +last_geo.getLat() + ", " + last_geo.getLon() ); + + } + + this.getGeolocation().mergeLocation(scannedNode.getGeolocation()); + } + + + /** * Truly merges the node's assert record * @@ -1168,6 +1214,8 @@ public class OnmsNode extends OnmsEntity implements Serializable, mergeCategorySet(scannedNode); mergeAssets(scannedNode); + + mergeGeolocation(scannedNode); } } diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/AbstractRequisitionVisitor.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/AbstractRequisitionVisitor.java index 6a5a1d8..945d1f7 100644 --- a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/AbstractRequisitionVisitor.java +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/AbstractRequisitionVisitor.java @@ -65,6 +65,10 @@ public class AbstractRequisitionVisitor implements RequisitionVisitor { /** {@inheritDoc} */ public void completeNodeCategory(OnmsNodeCategoryRequisition catReq) { } + + /** {@inheritDoc} */ + public void completeNodeGeolocation(OnmsNodeGeolocationRequisition geoReq) { + } /** {@inheritDoc} */ public void completeServiceCategory(OnmsServiceCategoryRequisition catReq) { @@ -93,6 +97,10 @@ public class AbstractRequisitionVisitor implements RequisitionVisitor { /** {@inheritDoc} */ public void visitNodeCategory(OnmsNodeCategoryRequisition catReq) { } + + /** {@inheritDoc} */ + public void visitNodeGeolocation(OnmsNodeGeolocationRequisition geoReq) { + } /** {@inheritDoc} */ public void visitServiceCategory(OnmsServiceCategoryRequisition catReq) { diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeGeolocationRequisition.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeGeolocationRequisition.java new file mode 100644 index 0000000..3dff848 --- /dev/null +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeGeolocationRequisition.java @@ -0,0 +1,87 @@ +/* + * This file is part of the OpenNMS(R) Application. + * + * OpenNMS(R) is Copyright (C) 2009 The OpenNMS Group, Inc. All rights reserved. + * OpenNMS(R) is a derivative work, containing both original code, included code and modified + * code that was published under the GNU General Public License. Copyrights for modified + * and included code are below. + * + * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. + * + * Original code base Copyright (C) 1999-2001 Oculan Corp. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * For more information contact: + * OpenNMS Licensing <lice...@opennms.org> + * http://www.opennms.org/ + * http://www.opennms.com/ + */ +package org.opennms.netmgt.provision.persist; + +import org.opennms.netmgt.provision.persist.requisition.RequisitionGeolocation; + +/** + * OnmsGeolocationRequisition + * + * @author brozow + * @version $Id: $ + */ +public class OnmsNodeGeolocationRequisition { + + private RequisitionGeolocation m_geolocation; + + /** + * <p>Constructor for OnmsNodeGeolocationRequisition.</p> + * + * @param geolocation a {@link org.opennms.netmgt.provision.persist.requisition.RequisitionGeolocation} object. + */ + public OnmsNodeGeolocationRequisition(RequisitionGeolocation geolocation) { + m_geolocation = geolocation; + } + + /** + * @return the geolocation + */ + RequisitionGeolocation getGeolocation() { + return m_geolocation; + } + + /** + * <p>visit</p> + * + * @param visitor a {@link org.opennms.netmgt.provision.persist.RequisitionVisitor} object. + */ + public void visit(RequisitionVisitor visitor) { + visitor.visitNodeGeolocation(this); + visitor.completeNodeGeolocation(this); + } + + /** + * <p>getLat</p> + * + * @return a {@link java.lang.Double} object. + */ + public Double getLat() { + return m_geolocation.getLat(); + } + + public Double getLon() { + return m_geolocation.getLon(); + } + + + +} diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeRequisition.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeRequisition.java index d819030..a5b8095 100644 --- a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeRequisition.java +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/OnmsNodeRequisition.java @@ -57,6 +57,7 @@ public class OnmsNodeRequisition { private List<OnmsAssetRequisition> m_assetReqs; private List<OnmsIpInterfaceRequisition> m_ifaceReqs; private List<OnmsNodeCategoryRequisition> m_categoryReqs; + private OnmsNodeGeolocationRequisition m_geolocationReq; /** * <p>Constructor for OnmsNodeRequisition.</p> @@ -70,6 +71,7 @@ public class OnmsNodeRequisition { m_assetReqs = constructAssetRequistions(); m_ifaceReqs = constructIpInterfaceRequistions(); m_categoryReqs = constructCategoryRequistions(); + m_geolocationReq = constructGeolocationRequistion(); } /* (non-Javadoc) @@ -107,6 +109,16 @@ public class OnmsNodeRequisition { } return reqs; } + + private OnmsNodeGeolocationRequisition constructGeolocationRequistion() { + OnmsNodeGeolocationRequisition req = null; + + if (m_node.getGeolocation() != null) { + req = new OnmsNodeGeolocationRequisition(m_node.getGeolocation()); + } + + return req; + } /* (non-Javadoc) * @see org.opennms.netmgt.provision.persist.NodeRequisition#visit(org.opennms.netmgt.provision.persist.RequisitionVisitor) @@ -127,6 +139,11 @@ public class OnmsNodeRequisition { for(OnmsAssetRequisition assetReq : m_assetReqs) { assetReq.visit(visitor); } + + if (m_geolocationReq != null) { + m_geolocationReq.visit(visitor); + } + visitor.completeNode(this); } diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/RequisitionVisitor.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/RequisitionVisitor.java index 5c95be5..e33c754 100644 --- a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/RequisitionVisitor.java +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/RequisitionVisitor.java @@ -95,7 +95,7 @@ public interface RequisitionVisitor { * * @param catReq a {@link org.opennms.netmgt.provision.persist.OnmsNodeCategoryRequisition} object. */ - public void visitNodeCategory(OnmsNodeCategoryRequisition catReq); + public void visitNodeCategory(OnmsNodeCategoryRequisition catReq); /** * <p>completeNodeCategory</p> * @@ -126,5 +126,20 @@ public interface RequisitionVisitor { * @param assetReq a {@link org.opennms.netmgt.provision.persist.OnmsAssetRequisition} object. */ public void completeAsset(OnmsAssetRequisition assetReq); + + + /** + * <p>visitNodeGeolocation</p> + * + * @param geoReq a {@link org.opennms.netmgt.provision.persist.OnmsNodeGeolocationRequisition} object. + */ + public void visitNodeGeolocation(OnmsNodeGeolocationRequisition geoReq); + /** + * <p>completeNodeGeolocation</p> + * + * @param geoReq a {@link org.opennms.netmgt.provision.persist.OnmsNodeGeolocationRequisition} object. + */ + public void completeNodeGeolocation(OnmsNodeGeolocationRequisition geoReq); + } diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionGeolocation.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionGeolocation.java new file mode 100644 index 0000000..db7167b --- /dev/null +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionGeolocation.java @@ -0,0 +1,82 @@ +package org.opennms.netmgt.provision.persist.requisition; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +/** + * <p>RequisitionGeolocation class.</p> + * + * @author ranger + * @version $Id: $ + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name="") +@XmlRootElement(name="geolocation") +public class RequisitionGeolocation { + + @XmlAttribute(name="lat", required=true) + protected Double m_lat; + + + @XmlAttribute(name="lon", required=true) + protected Double m_lon; + + + /** + * <p>Constructor for RequisitionGeolocation.</p> + */ + public RequisitionGeolocation() { + } + + /** + * <p>Constructor for RequisitionGeolocation.</p> + * + * @param lat a {@link java.lang.Double} object. + * @param lon a {@link java.lang.Double} object. + */ + public RequisitionGeolocation(Double lat, Double lon) { + m_lat = lat; + m_lon = lon; + } + + /** + * <p>getName</p> + * + * @return a {@link java.lang.Double} object. + */ + public Double getLat() { + return m_lat; + } + + /** + * <p>setName</p> + * + * @param value a {@link java.lang.Double} object. + * @param value a {@link java.lang.Double} object. + */ + public void setLat(Double lat) { + m_lat = lat; + } + + /** + * <p>getName</p> + * + * @return a {@link java.lang.Double} object. + */ + public Double getLon() { + return m_lon; + } + + /** + * <p>setName</p> + * + * @param value a {@link java.lang.Double} object. + * @param value a {@link java.lang.Double} object. + */ + public void setLon(Double lon) { + m_lon = lon; + } +} diff --git a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionNode.java b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionNode.java index beea6f6..ecfac28 100644 --- a/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionNode.java +++ b/opennms-provision/opennms-provision-persistence/src/main/java/org/opennms/netmgt/provision/persist/requisition/RequisitionNode.java @@ -24,7 +24,7 @@ import org.apache.commons.lang.builder.ToStringBuilder; * @version $Id: $ */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { "m_interfaces", "m_categories", "m_assets" }) +@XmlType(name = "", propOrder = { "m_interfaces", "m_categories", "m_geolocation", "m_assets" }) @XmlRootElement(name = "node") public class RequisitionNode { @@ -34,6 +34,8 @@ public class RequisitionNode { protected List<RequisitionCategory> m_categories = new ArrayList<RequisitionCategory>(); @XmlElement(name="asset") protected List<RequisitionAsset> m_assets = new ArrayList<RequisitionAsset>(); + @XmlElement(name="geolocation") + protected RequisitionGeolocation m_geolocation; @XmlAttribute protected String building; @@ -363,6 +365,19 @@ public class RequisitionNode { } m_assets.add(0, asset); } + + /** + * <p>getCategories</p> + * + * @return a {@link java.util.List} object. + */ + public RequisitionGeolocation getGeolocation() { + return m_geolocation; + } + + public void setGeolocation(RequisitionGeolocation geo) { + m_geolocation = geo; + } /** * <p>Getter for the field <code>building</code>.</p> diff --git a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/DefaultProvisionService.java b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/DefaultProvisionService.java index 3f4f498..ea3a020 100644 --- a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/DefaultProvisionService.java +++ b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/DefaultProvisionService.java @@ -59,6 +59,7 @@ import org.opennms.netmgt.dao.SnmpInterfaceDao; import org.opennms.netmgt.model.AbstractEntityVisitor; import org.opennms.netmgt.model.EntityVisitor; import org.opennms.netmgt.model.OnmsCategory; +import org.opennms.netmgt.model.OnmsGeolocation; import org.opennms.netmgt.model.OnmsDistPoller; import org.opennms.netmgt.model.OnmsIpInterface; import org.opennms.netmgt.model.OnmsMonitoredService; @@ -418,6 +419,10 @@ public class DefaultProvisionService implements ProvisionService { } return category; } + + public OnmsGeolocation createGeolocationIfNecessary(Double lat, Double lon) { + return new OnmsGeolocation(lat, lon); + } /** {@inheritDoc} */ @Transactional(readOnly=true) diff --git a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/ProvisionService.java b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/ProvisionService.java index 17fe519..ec9bc68 100644 --- a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/ProvisionService.java +++ b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/ProvisionService.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Map; import org.opennms.netmgt.model.OnmsCategory; +import org.opennms.netmgt.model.OnmsGeolocation; import org.opennms.netmgt.model.OnmsDistPoller; import org.opennms.netmgt.model.OnmsIpInterface; import org.opennms.netmgt.model.OnmsMonitoredService; @@ -237,6 +238,9 @@ public interface ProvisionService { */ @Transactional public abstract OnmsCategory createCategoryIfNecessary(String name); + + @Transactional + public abstract OnmsGeolocation createGeolocationIfNecessary(Double lat, Double lon); /** * Creates a map of foreignIds to nodeIds for all nodes that have the indicated foreignSorce. diff --git a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/RequisitionAccountant.java b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/RequisitionAccountant.java index b21cdbb..2cd6abd 100644 --- a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/RequisitionAccountant.java +++ b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/RequisitionAccountant.java @@ -39,6 +39,7 @@ import org.opennms.netmgt.provision.persist.OnmsAssetRequisition; import org.opennms.netmgt.provision.persist.OnmsIpInterfaceRequisition; import org.opennms.netmgt.provision.persist.OnmsMonitoredServiceRequisition; import org.opennms.netmgt.provision.persist.OnmsNodeCategoryRequisition; +import org.opennms.netmgt.provision.persist.OnmsNodeGeolocationRequisition; import org.opennms.netmgt.provision.persist.OnmsNodeRequisition; import org.opennms.netmgt.provision.service.operations.ImportOperationsManager; import org.opennms.netmgt.provision.service.operations.SaveOrUpdateOperation; @@ -98,4 +99,10 @@ public class RequisitionAccountant extends AbstractRequisitionVisitor { public void visitAsset(OnmsAssetRequisition assetReq) { m_currentOp.foundAsset(assetReq.getName(), assetReq.getValue()); } + + /** {@inheritDoc} */ + @Override + public void visitNodeGeolocation(OnmsNodeGeolocationRequisition geoReq) { + m_currentOp.foundGeolocation(geoReq.getLat(), geoReq.getLon()); + } } diff --git a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/operations/SaveOrUpdateOperation.java b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/operations/SaveOrUpdateOperation.java index 993dddf..5dbade7 100644 --- a/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/operations/SaveOrUpdateOperation.java +++ b/opennms-provision/opennms-provisiond/src/main/java/org/opennms/netmgt/provision/service/operations/SaveOrUpdateOperation.java @@ -40,6 +40,7 @@ import java.net.UnknownHostException; import org.opennms.netmgt.config.modelimport.types.InterfaceSnmpPrimaryType; import org.opennms.netmgt.model.OnmsCategory; +import org.opennms.netmgt.model.OnmsGeolocation; import org.opennms.netmgt.model.OnmsIpInterface; import org.opennms.netmgt.model.OnmsMonitoredService; import org.opennms.netmgt.model.OnmsNode; @@ -185,8 +186,19 @@ public abstract class SaveOrUpdateOperation extends ImportOperation { * @param name a {@link java.lang.String} object. */ public void foundCategory(String name) { - OnmsCategory category = getProvisionService().createCategoryIfNecessary(name); - m_node.getCategories().add(category); + OnmsCategory category = getProvisionService().createCategoryIfNecessary(name); + m_node.getCategories().add(category); + } + + + /** + * <p>foundGeolocation</p> + * + * @param name a {@link java.lang.String} object. + */ + public void foundGeolocation(Double lat, Double lon) { + OnmsGeolocation geoloc = getProvisionService().createGeolocationIfNecessary(lat, lon); + m_node.setGeolocation(geoloc); } /** diff --git a/opennms-provision/opennms-provisiond/src/test/java/org/opennms/netmgt/provision/service/ProvisionerTest.java b/opennms-provision/opennms-provisiond/src/test/java/org/opennms/netmgt/provision/service/ProvisionerTest.java index 11ce016..3821715 100644 --- a/opennms-provision/opennms-provisiond/src/test/java/org/opennms/netmgt/provision/service/ProvisionerTest.java +++ b/opennms-provision/opennms-provisiond/src/test/java/org/opennms/netmgt/provision/service/ProvisionerTest.java @@ -94,6 +94,7 @@ import org.opennms.netmgt.provision.persist.OnmsIpInterfaceRequisition; import org.opennms.netmgt.provision.persist.OnmsMonitoredServiceRequisition; import org.opennms.netmgt.provision.persist.OnmsNodeCategoryRequisition; import org.opennms.netmgt.provision.persist.OnmsNodeRequisition; +import org.opennms.netmgt.provision.persist.OnmsNodeGeolocationRequisition; import org.opennms.netmgt.provision.persist.OnmsServiceCategoryRequisition; import org.opennms.netmgt.provision.persist.RequisitionVisitor; import org.opennms.netmgt.provision.persist.foreignsource.ForeignSource; @@ -1116,6 +1117,7 @@ public class ProvisionerTest implements MockSnmpAgentAware { private int m_modelImportCount; private int m_modelImportCompleted; private int m_nodeCount; + private int m_nodeGeolocationCount; private int m_nodeCompleted; private int m_nodeCategoryCount; private int m_nodeCategoryCompleted; @@ -1127,6 +1129,7 @@ public class ProvisionerTest implements MockSnmpAgentAware { private int m_svcCategoryCompleted; private int m_assetCount; private int m_assetCompleted; + private int m_nodeGeolocationCompleted; public int getModelImportCount() { return m_modelImportCount; @@ -1143,7 +1146,7 @@ public class ProvisionerTest implements MockSnmpAgentAware { public int getNodeCompletedCount() { return m_nodeCompleted; } - + public int getInterfaceCount() { return m_ifaceCount; } @@ -1193,6 +1196,10 @@ public class ProvisionerTest implements MockSnmpAgentAware { assertEquals("apknd", nodeReq.getNodeLabel()); assertEquals("4243", nodeReq.getForeignId()); } + + public void visitNodeGeolocation(OnmsNodeGeolocationRequisition nodeReq) { + m_nodeGeolocationCount++; + } public void visitInterface(OnmsIpInterfaceRequisition ifaceReq) { m_ifaceCount++; @@ -1240,6 +1247,10 @@ public class ProvisionerTest implements MockSnmpAgentAware { public void completeNode(OnmsNodeRequisition nodeReq) { m_nodeCompleted++; } + + public void completeNodeGeolocation(OnmsNodeGeolocationRequisition nodeReq) { + m_nodeGeolocationCompleted++; + } public void completeInterface(OnmsIpInterfaceRequisition ifaceReq) { m_ifaceCompleted++; diff --git a/opennms-webapp/src/main/webapp/includes/header.jsp b/opennms-webapp/src/main/webapp/includes/header.jsp index 821f210..bebf324 100644 --- a/opennms-webapp/src/main/webapp/includes/header.jsp +++ b/opennms-webapp/src/main/webapp/includes/header.jsp @@ -119,15 +119,29 @@ <c:out value="${script}" escapeXml="false" /> </c:forEach> + <c:forEach var="extras" items="${paramValues.extras}"> <c:out value="${extras}" escapeXml="false" /> </c:forEach> </head> + + <%-- The <body> tag is unmatched in this file (its matching tag is in the footer), so we hide it in a JSP code fragment so the Eclipse HTML validator doesn't complain. See bug #1728. --%> -<%= "<body>" %> +<%-- = "<body>" --%> + +<% + String js_onload = request.getParameter("js_onload"); + + if ( js_onload != null) { + out.println("<body onload=\"" + js_onload + "\">"); + } else { + out.println("<body>"); + } + +%> <c:choose> <c:when test="${param.quiet == 'true'}"> @@ -201,4 +215,4 @@ </c:forEach> </c:if> </h2> -</div> \ No newline at end of file +</div> -- 1.7.5.2 ------------------------------------------------------------------------------ Simplify data backup and recovery for your virtual environment with vRanger. Installation's a snap, and flexible recovery options mean your data is safe, secure and there when you need it. Data protection magic? Nope - It's vRanger. Get your free trial download today. http://p.sf.net/sfu/quest-sfdev2dev _______________________________________________ Please read the OpenNMS Mailing List FAQ: http://www.opennms.org/index.php/Mailing_List_FAQ opennms-devel mailing list To *unsubscribe* or change your subscription options, see the bottom of this page: https://lists.sourceforge.net/lists/listinfo/opennms-devel