1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-26 08:12:05 +01:00

Add pubsub publishing and altaccuracy parameter to geoloc

This commit is contained in:
Fernando Ramirez 2018-04-04 15:02:23 +02:00 committed by Florian Schmaus
parent f8f70bc5fb
commit 632c172f6d
5 changed files with 78 additions and 8 deletions

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2015-2016 Ishan Khanna * Copyright 2015-2017 Ishan Khanna, Fernando Ramirez
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,12 +21,18 @@ import java.util.WeakHashMap;
import org.jivesoftware.smack.ConnectionCreationListener; import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.Manager; import org.jivesoftware.smack.Manager;
import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry; import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.geoloc.packet.GeoLocation; import org.jivesoftware.smackx.geoloc.packet.GeoLocation;
import org.jivesoftware.smackx.pubsub.LeafNode;
import org.jivesoftware.smackx.pubsub.PayloadItem;
import org.jivesoftware.smackx.pubsub.PubSubException.NotALeafNodeException;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jxmpp.jid.Jid; import org.jxmpp.jid.Jid;
@ -86,4 +92,39 @@ public final class GeoLocationManager extends Manager {
return GeoLocation.from(message) != null; return GeoLocation.from(message) != null;
} }
/**
* Send geolocation through the PubSub node.
*
* @param geoLocation
* @throws InterruptedException
* @throws NotConnectedException
* @throws XMPPErrorException
* @throws NoResponseException
* @throws NotALeafNodeException
*/
public void sendGeolocation(GeoLocation geoLocation)
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException, NotALeafNodeException {
getNode().publish(new PayloadItem<GeoLocation>(geoLocation));
}
/**
* Send empty geolocation through the PubSub node.
*
* @throws InterruptedException
* @throws NotConnectedException
* @throws XMPPErrorException
* @throws NoResponseException
* @throws NotALeafNodeException
*/
public void stopPublishingGeolocation()
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException, NotALeafNodeException {
GeoLocation emptyGeolocation = new GeoLocation.Builder().build();
getNode().publish(new PayloadItem<GeoLocation>(emptyGeolocation));
}
private LeafNode getNode()
throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException, NotALeafNodeException {
return PubSubManager.getInstance(connection()).getOrCreateLeafNode(GeoLocation.NAMESPACE);
}
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2015-2016 Ishan Khanna * Copyright 2015-2017 Ishan Khanna, Fernando Ramirez
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -43,6 +43,7 @@ public final class GeoLocation implements Serializable, ExtensionElement {
private final Double accuracy; private final Double accuracy;
private final Double alt; private final Double alt;
private final Double altAccuracy;
private final String area; private final String area;
private final Double bearing; private final Double bearing;
private final String building; private final String building;
@ -65,12 +66,13 @@ public final class GeoLocation implements Serializable, ExtensionElement {
private final String tzo; private final String tzo;
private final URI uri; private final URI uri;
private GeoLocation(Double accuracy, Double alt, String area, Double bearing, String building, String country, private GeoLocation(Double accuracy, Double alt, Double altAccuracy, String area, Double bearing, String building, String country,
String countryCode, String datum, String description, Double error, String floor, Double lat, String countryCode, String datum, String description, Double error, String floor, Double lat,
String locality, Double lon, String postalcode, String region, String room, Double speed, String locality, Double lon, String postalcode, String region, String room, Double speed,
String street, String text, Date timestamp, String tzo, URI uri) { String street, String text, Date timestamp, String tzo, URI uri) {
this.accuracy = accuracy; this.accuracy = accuracy;
this.alt = alt; this.alt = alt;
this.altAccuracy = altAccuracy;
this.area = area; this.area = area;
this.bearing = bearing; this.bearing = bearing;
this.building = building; this.building = building;
@ -118,6 +120,10 @@ public final class GeoLocation implements Serializable, ExtensionElement {
return alt; return alt;
} }
public Double getAltAccuracy() {
return altAccuracy;
}
public String getArea() { public String getArea() {
return area; return area;
} }
@ -213,6 +219,7 @@ public final class GeoLocation implements Serializable, ExtensionElement {
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optElement("accuracy", accuracy); xml.optElement("accuracy", accuracy);
xml.optElement("alt", alt); xml.optElement("alt", alt);
xml.optElement("altaccuracy", altAccuracy);
xml.optElement("area", area); xml.optElement("area", area);
xml.optElement("bearing", bearing); xml.optElement("bearing", bearing);
xml.optElement("building", building); xml.optElement("building", building);
@ -255,6 +262,7 @@ public final class GeoLocation implements Serializable, ExtensionElement {
private Double accuracy; private Double accuracy;
private Double alt; private Double alt;
private Double altAccuracy;
private String area; private String area;
private Double bearing; private Double bearing;
private String building; private String building;
@ -287,6 +295,11 @@ public final class GeoLocation implements Serializable, ExtensionElement {
return this; return this;
} }
public Builder setAltAccuracy(Double altAccuracy) {
this.altAccuracy = altAccuracy;
return this;
}
public Builder setArea(String area) { public Builder setArea(String area) {
this.area = area; this.area = area;
return this; return this;
@ -394,7 +407,7 @@ public final class GeoLocation implements Serializable, ExtensionElement {
public GeoLocation build() { public GeoLocation build() {
return new GeoLocation(accuracy, alt, area, bearing, building, country, countryCode, datum, description, return new GeoLocation(accuracy, alt, altAccuracy, area, bearing, building, country, countryCode, datum, description,
error, floor, lat, locality, lon, postalcode, region, room, speed, street, text, timestamp, error, floor, lat, locality, lon, postalcode, region, room, speed, street, text, timestamp,
tzo, uri); tzo, uri);
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2015-2016 Ishan Khanna * Copyright 2015-2017 Ishan Khanna, Fernando Ramirez
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -48,6 +48,9 @@ public class GeoLocationProvider extends ExtensionElementProvider<GeoLocation> {
case "alt": case "alt":
builder.setAlt(ParserUtils.getDoubleFromNextText(parser)); builder.setAlt(ParserUtils.getDoubleFromNextText(parser));
break; break;
case "altaccuracy":
builder.setAltAccuracy(ParserUtils.getDoubleFromNextText(parser));
break;
case "area": case "area":
builder.setArea(parser.nextText()); builder.setArea(parser.nextText());
break; break;

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2015-2016 Ishan Khanna * Copyright 2015-2017 Ishan Khanna, Fernando Ramirez
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -72,6 +72,14 @@ public class GeoLocationTest extends InitExtensions {
assertEquals((Double) 1.34, geoLocation.getAccuracy()); assertEquals((Double) 1.34, geoLocation.getAccuracy());
} }
@Test
public void altAccuracyTest() {
GeoLocation geoLocation = new GeoLocation.Builder().setAltAccuracy(1.52d).build();
assertEquals((Double) 1.52, geoLocation.getAltAccuracy());
}
@Test @Test
public void toXMLMethodTest() throws Exception { public void toXMLMethodTest() throws Exception {
@ -81,6 +89,7 @@ public class GeoLocationTest extends InitExtensions {
+ "<geoloc xmlns='http://jabber.org/protocol/geoloc'>" + "<geoloc xmlns='http://jabber.org/protocol/geoloc'>"
+ "<accuracy>23</accuracy>" + "<accuracy>23</accuracy>"
+ "<alt>1000</alt>" + "<alt>1000</alt>"
+ "<altaccuracy>10</altaccuracy>"
+ "<area>Delhi</area>" + "<area>Delhi</area>"
+ "<bearing>10</bearing>" + "<bearing>10</bearing>"
+ "<building>Small Building</building>" + "<building>Small Building</building>"
@ -113,7 +122,7 @@ public class GeoLocationTest extends InitExtensions {
assertNotNull(geoLocation); assertNotNull(geoLocation);
assertNotNull(geoLocation.toXML()); assertNotNull(geoLocation.toXML());
GeoLocation constructedGeoLocation = GeoLocation.builder().setAccuracy(23d).setAlt(1000d).setArea("Delhi").setBearing( GeoLocation constructedGeoLocation = GeoLocation.builder().setAccuracy(23d).setAlt(1000d).setAltAccuracy(10d).setArea("Delhi").setBearing(
10d).setBuilding("Small Building").setCountry("India").setCountryCode("IN").setDescription( 10d).setBuilding("Small Building").setCountry("India").setCountryCode("IN").setDescription(
"My Description").setError(90d).setFloor("top").setLat(25.098345d).setLocality("awesome").setLon( "My Description").setError(90d).setFloor("top").setLat(25.098345d).setLocality("awesome").setLon(
77.992034).setPostalcode("110085").setRegion("North").setRoom("small").setSpeed(250.0d).setStreet( 77.992034).setPostalcode("110085").setRegion("North").setRoom("small").setSpeed(250.0d).setStreet(

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2015-2016 Ishan Khanna * Copyright 2015-2017 Ishan Khanna, Fernando Ramirez
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -41,6 +41,7 @@ public class GeoLocationProviderTest extends InitExtensions {
+ "<geoloc xmlns='http://jabber.org/protocol/geoloc'>" + "<geoloc xmlns='http://jabber.org/protocol/geoloc'>"
+ "<accuracy>23</accuracy>" + "<accuracy>23</accuracy>"
+ "<alt>1000</alt>" + "<alt>1000</alt>"
+ "<altaccuracy>10</altaccuracy>"
+ "<area>Delhi</area>" + "<area>Delhi</area>"
+ "<bearing>10</bearing>" + "<bearing>10</bearing>"
+ "<building>Small Building</building>" + "<building>Small Building</building>"
@ -74,6 +75,7 @@ public class GeoLocationProviderTest extends InitExtensions {
assertEquals((Double) 23d, geoLocation.getAccuracy()); assertEquals((Double) 23d, geoLocation.getAccuracy());
assertEquals((Double) 1000d, geoLocation.getAlt()); assertEquals((Double) 1000d, geoLocation.getAlt());
assertEquals((Double) 10d, geoLocation.getAltAccuracy());
assertEquals("Delhi", geoLocation.getArea()); assertEquals("Delhi", geoLocation.getArea());
assertEquals((Double) 10d, geoLocation.getBearing()); assertEquals((Double) 10d, geoLocation.getBearing());
assertEquals("Small Building", geoLocation.getBuilding()); assertEquals("Small Building", geoLocation.getBuilding());
@ -107,6 +109,7 @@ public class GeoLocationProviderTest extends InitExtensions {
+ "<geoloc xmlns='http://jabber.org/protocol/geoloc'>" + "<geoloc xmlns='http://jabber.org/protocol/geoloc'>"
+ "<accuracy>23</accuracy>" + "<accuracy>23</accuracy>"
+ "<alt>1000</alt>" + "<alt>1000</alt>"
+ "<altaccuracy>10</altaccuracy>"
+ "<area>Delhi</area>" + "<area>Delhi</area>"
+ "<bearing>10</bearing>" + "<bearing>10</bearing>"
+ "<building>Small Building</building>" + "<building>Small Building</building>"
@ -141,6 +144,7 @@ public class GeoLocationProviderTest extends InitExtensions {
assertEquals((Double) 23d, geoLocation.getAccuracy()); assertEquals((Double) 23d, geoLocation.getAccuracy());
assertEquals((Double) 1000d, geoLocation.getAlt()); assertEquals((Double) 1000d, geoLocation.getAlt());
assertEquals((Double) 10d, geoLocation.getAltAccuracy());
assertEquals("Delhi", geoLocation.getArea()); assertEquals("Delhi", geoLocation.getArea());
assertEquals((Double) 10d, geoLocation.getBearing()); assertEquals((Double) 10d, geoLocation.getBearing());
assertEquals("Small Building", geoLocation.getBuilding()); assertEquals("Small Building", geoLocation.getBuilding());