package org.jivesoftware.openfire.pubsub.cluster; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.jivesoftware.openfire.XMPPServer; import org.jivesoftware.openfire.pubsub.Node; import org.jivesoftware.util.cache.ClusterTask; import org.jivesoftware.util.cache.ExternalizableUtil; /** * Base class of clustering tasks for pubsub. It simply stores/retrieves the * node. * * @author Robin Collier * */ public abstract class NodeChangeTask implements ClusterTask<Void> { private String nodeId; transient private Node node; public NodeChangeTask() { } public NodeChangeTask(String nodeIdent) { nodeId = nodeIdent; } public NodeChangeTask(Node node) { this.node = node; nodeId = node.getNodeID(); } @Override public void writeExternal(ObjectOutput out) throws IOException { ExternalizableUtil.getInstance().writeSafeUTF(out, nodeId); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { nodeId = ExternalizableUtil.getInstance().readSafeUTF(in); } public Node getNode() { if (node == null) node = XMPPServer.getInstance().getPubSubModule().getNode(nodeId); return node; } public String getNodeId() { return nodeId; } }