AMP should use provider/packet packages and JUL

- Move AMPExtensionProvider to amp.provider
- Move AMPExtension to amp.packet
- Move java.util.logging for logging

SMACK-544
This commit is contained in:
Florian Schmaus 2014-03-10 17:00:36 +01:00
parent 6110872062
commit 0058631ed6
8 changed files with 48 additions and 28 deletions

View File

@ -17,6 +17,8 @@
package org.jivesoftware.smackx.amp; package org.jivesoftware.smackx.amp;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.amp.packet.AMPExtension;
public class AMPDeliverCondition implements AMPExtension.Condition { public class AMPDeliverCondition implements AMPExtension.Condition {
@ -26,8 +28,9 @@ public class AMPDeliverCondition implements AMPExtension.Condition {
* Check if server supports deliver condition * Check if server supports deliver condition
* @param connection Smack connection instance * @param connection Smack connection instance
* @return true if deliver condition is supported. * @return true if deliver condition is supported.
* @throws XMPPException
*/ */
public static boolean isSupported(XMPPConnection connection) { public static boolean isSupported(XMPPConnection connection) throws XMPPException {
return AMPManager.isConditionSupported(connection, NAME); return AMPManager.isConditionSupported(connection, NAME);
} }

View File

@ -17,7 +17,9 @@
package org.jivesoftware.smackx.amp; package org.jivesoftware.smackx.amp;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.util.XmppDateTime; import org.jivesoftware.smack.util.XmppDateTime;
import org.jivesoftware.smackx.amp.packet.AMPExtension;
import java.util.Date; import java.util.Date;
@ -30,8 +32,9 @@ public class AMPExpireAtCondition implements AMPExtension.Condition {
* Check if server supports expire-at condition * Check if server supports expire-at condition
* @param connection Smack connection instance * @param connection Smack connection instance
* @return true if expire-at condition is supported. * @return true if expire-at condition is supported.
* @throws XMPPException
*/ */
public static boolean isSupported(XMPPConnection connection) { public static boolean isSupported(XMPPConnection connection) throws XMPPException {
return AMPManager.isConditionSupported(connection, NAME); return AMPManager.isConditionSupported(connection, NAME);
} }

View File

@ -19,6 +19,7 @@ package org.jivesoftware.smackx.amp;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.ConnectionCreationListener; import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.amp.packet.AMPExtension;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo; import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
@ -82,8 +83,9 @@ public class AMPManager {
* @param connection active xmpp connection * @param connection active xmpp connection
* @param action action to check * @param action action to check
* @return true if this action is supported. * @return true if this action is supported.
* @throws XMPPException
*/ */
public static boolean isActionSupported(XMPPConnection connection, AMPExtension.Action action) { public static boolean isActionSupported(XMPPConnection connection, AMPExtension.Action action) throws XMPPException {
String featureName = AMPExtension.NAMESPACE + "?action=" + action.toString(); String featureName = AMPExtension.NAMESPACE + "?action=" + action.toString();
return isFeatureSupportedByServer(connection, featureName, AMPExtension.NAMESPACE); return isFeatureSupportedByServer(connection, featureName, AMPExtension.NAMESPACE);
} }
@ -93,28 +95,25 @@ public class AMPManager {
* @param connection active xmpp connection * @param connection active xmpp connection
* @param conditionName name of condition to check * @param conditionName name of condition to check
* @return true if this condition is supported. * @return true if this condition is supported.
* @throws XMPPException
* @see AMPDeliverCondition * @see AMPDeliverCondition
* @see AMPExpireAtCondition * @see AMPExpireAtCondition
* @see AMPMatchResourceCondition * @see AMPMatchResourceCondition
*/ */
public static boolean isConditionSupported(XMPPConnection connection, String conditionName) { public static boolean isConditionSupported(XMPPConnection connection, String conditionName) throws XMPPException {
String featureName = AMPExtension.NAMESPACE + "?condition=" + conditionName; String featureName = AMPExtension.NAMESPACE + "?condition=" + conditionName;
return isFeatureSupportedByServer(connection, featureName, AMPExtension.NAMESPACE); return isFeatureSupportedByServer(connection, featureName, AMPExtension.NAMESPACE);
} }
private static boolean isFeatureSupportedByServer(XMPPConnection connection, String featureName, String node) { private static boolean isFeatureSupportedByServer(XMPPConnection connection, String featureName, String node) throws XMPPException {
try { ServiceDiscoveryManager discoveryManager = ServiceDiscoveryManager.getInstanceFor(connection);
ServiceDiscoveryManager discoveryManager = ServiceDiscoveryManager.getInstanceFor(connection); DiscoverInfo info = discoveryManager.discoverInfo(connection.getServiceName(), node);
DiscoverInfo info = discoveryManager.discoverInfo(connection.getServiceName(), node); Iterator<DiscoverInfo.Feature> it = info.getFeatures();
Iterator<DiscoverInfo.Feature> it = info.getFeatures(); while (it.hasNext()) {
while (it.hasNext()) { DiscoverInfo.Feature feature = it.next();
DiscoverInfo.Feature feature = it.next(); if (featureName.equals(feature.getVar())) {
if (featureName.equals(feature.getVar())) { return true;
return true;
}
} }
} catch (XMPPException e) {
e.printStackTrace();
} }
return false; return false;
} }

View File

@ -17,6 +17,8 @@
package org.jivesoftware.smackx.amp; package org.jivesoftware.smackx.amp;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.amp.packet.AMPExtension;
public class AMPMatchResourceCondition implements AMPExtension.Condition { public class AMPMatchResourceCondition implements AMPExtension.Condition {
@ -26,8 +28,9 @@ public class AMPMatchResourceCondition implements AMPExtension.Condition {
* Check if server supports match-resource condition * Check if server supports match-resource condition
* @param connection Smack connection instance * @param connection Smack connection instance
* @return true if match-resource condition is supported. * @return true if match-resource condition is supported.
* @throws XMPPException
*/ */
public static boolean isSupported(XMPPConnection connection) { public static boolean isSupported(XMPPConnection connection) throws XMPPException {
return AMPManager.isConditionSupported(connection, NAME); return AMPManager.isConditionSupported(connection, NAME);
} }

View File

@ -14,9 +14,12 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jivesoftware.smackx.amp; package org.jivesoftware.smackx.amp.packet;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.amp.AMPDeliverCondition;
import org.jivesoftware.smackx.amp.AMPExpireAtCondition;
import org.jivesoftware.smackx.amp.AMPMatchResourceCondition;
import java.util.*; import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -259,7 +262,7 @@ public class AMPExtension implements PacketExtension {
*/ */
notify; notify;
static final String ATTRIBUTE_NAME="action"; public static final String ATTRIBUTE_NAME="action";
} }
/** /**

View File

@ -14,14 +14,21 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jivesoftware.smackx.amp; package org.jivesoftware.smackx.amp.provider;
import java.util.logging.Logger;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider; import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smackx.amp.AMPDeliverCondition;
import org.jivesoftware.smackx.amp.AMPExpireAtCondition;
import org.jivesoftware.smackx.amp.AMPMatchResourceCondition;
import org.jivesoftware.smackx.amp.packet.AMPExtension;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
public class AMPExtensionProvider implements PacketExtensionProvider { public class AMPExtensionProvider implements PacketExtensionProvider {
private static final Logger LOGGER = Logger.getLogger(AMPExtensionProvider.class.getName());
/** /**
* Creates a new AMPExtensionProvider. * Creates a new AMPExtensionProvider.
@ -46,7 +53,7 @@ public class AMPExtensionProvider implements PacketExtensionProvider {
try { try {
status = AMPExtension.Status.valueOf(statusString); status = AMPExtension.Status.valueOf(statusString);
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
System.err.println("Found invalid amp status " + statusString); LOGGER.severe("Found invalid amp status " + statusString);
} }
} }
@ -73,12 +80,12 @@ public class AMPExtensionProvider implements PacketExtensionProvider {
try { try {
action = AMPExtension.Action.valueOf(actionString); action = AMPExtension.Action.valueOf(actionString);
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
System.err.println("Found invalid rule action value " + actionString); LOGGER.severe("Found invalid rule action value " + actionString);
} }
} }
if (action == null || condition == null) { if (action == null || condition == null) {
System.err.println("Rule is skipped because either it's action or it's condition is invalid"); LOGGER.severe("Rule is skipped because either it's action or it's condition is invalid");
} else { } else {
AMPExtension.Rule rule = new AMPExtension.Rule(action, condition); AMPExtension.Rule rule = new AMPExtension.Rule(action, condition);
ampExtension.addRule(rule); ampExtension.addRule(rule);
@ -96,7 +103,7 @@ public class AMPExtensionProvider implements PacketExtensionProvider {
private AMPExtension.Condition createCondition(String name, String value) { private AMPExtension.Condition createCondition(String name, String value) {
if (name == null || value == null) { if (name == null || value == null) {
System.err.println("Can't create rule condition from null name and/or value"); LOGGER.severe("Can't create rule condition from null name and/or value");
return null; return null;
} }
@ -105,7 +112,7 @@ public class AMPExtensionProvider implements PacketExtensionProvider {
try { try {
return new AMPDeliverCondition(AMPDeliverCondition.Value.valueOf(value)); return new AMPDeliverCondition(AMPDeliverCondition.Value.valueOf(value));
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
System.err.println("Found invalid rule delivery condition value " + value); LOGGER.severe("Found invalid rule delivery condition value " + value);
return null; return null;
} }
} else if (AMPExpireAtCondition.NAME.equals(name)) { } else if (AMPExpireAtCondition.NAME.equals(name)) {
@ -114,11 +121,11 @@ public class AMPExtensionProvider implements PacketExtensionProvider {
try { try {
return new AMPMatchResourceCondition(AMPMatchResourceCondition.Value.valueOf(value)); return new AMPMatchResourceCondition(AMPMatchResourceCondition.Value.valueOf(value));
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
System.err.println("Found invalid rule match-resource condition value " + value); LOGGER.severe("Found invalid rule match-resource condition value " + value);
return null; return null;
} }
} else { } else {
System.err.println("Found unknown rule condition name " + name); LOGGER.severe("Found unknown rule condition name " + name);
return null; return null;
} }
} }

View File

@ -453,7 +453,7 @@
<extensionProvider> <extensionProvider>
<elementName>amp</elementName> <elementName>amp</elementName>
<namespace>http://jabber.org/protocol/amp</namespace> <namespace>http://jabber.org/protocol/amp</namespace>
<className>org.jivesoftware.smackx.amp.AMPExtensionProvider</className> <className>org.jivesoftware.smackx.amp.provider.AMPExtensionProvider</className>
</extensionProvider> </extensionProvider>
</smackProviders> </smackProviders>

View File

@ -17,6 +17,8 @@
package org.jivesoftware.smackx.amp; package org.jivesoftware.smackx.amp;
import org.jivesoftware.smack.packet.PacketExtension; import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.amp.packet.AMPExtension;
import org.jivesoftware.smackx.amp.provider.AMPExtensionProvider;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;