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

Reply via email to