package org.buddycloud.channelserver.pubsub.model.impl; import java.util.Date; import org.buddycloud.channelserver.pubsub.affiliation.Affiliations; import org.buddycloud.channelserver.pubsub.model.NodeMembership; import org.buddycloud.channelserver.pubsub.subscription.Subscriptions; import org.xmpp.packet.JID; public class NodeMembershipImpl implements NodeMembership { private final Subscriptions subscription; private final JID user; private JID listener; // If different from user private final String nodeId; private Date lastUpdated; private Affiliations affiliation; private JID invitedBy; public NodeMembershipImpl(final String nodeId, final JID user, final Subscriptions subscription, final Affiliations affiliation, JID invitedBy) { this(nodeId, user, user, subscription, affiliation, invitedBy, new Date()); } public NodeMembershipImpl(final String nodeId, final JID user, final Subscriptions subscription, Affiliations affiliation, JID invitedBy, Date lastUpdated) { this(nodeId, user, user, subscription, affiliation, invitedBy, lastUpdated); } public NodeMembershipImpl(final String nodeId, final JID user, JID listener, final Subscriptions subscription, final Affiliations affiliation, JID invitedBy) { this(nodeId, user, listener, subscription, affiliation, invitedBy, new Date()); } public NodeMembershipImpl(final String nodeId, final JID user, JID listener, final Subscriptions subscription, final Affiliations affiliation, JID invitedBy, Date lastUpdated) { this.nodeId = nodeId; if (user.getResource() == null) { this.user = user; } else { this.user = new JID(user.toBareJID()); } this.lastUpdated = new Date(lastUpdated.getTime()); setListener(listener); this.subscription = subscription; this.affiliation = affiliation; this.invitedBy = invitedBy; } private void setListener(JID listener) { if (null == listener) { this.listener = this.user; return; } if (null == listener.getNode()) { this.listener = new JID(listener.getDomain()); return; } this.listener = new JID(listener.toBareJID()); } @Override public Subscriptions getSubscription() { return subscription; } @Override public Affiliations getAffiliation() { return affiliation; } @Override public JID getUser() { return user; } @Override public JID getListener() { return listener; } @Override public String getNodeId() { return nodeId; } @Override public JID getInvitedBy() { return invitedBy; } @Override public final int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((listener == null) ? 0 : listener.hashCode()); result = prime * result + ((nodeId == null) ? 0 : nodeId.hashCode()); result = prime * result + ((subscription == null) ? 0 : subscription.hashCode()); result = prime * result + ((affiliation == null) ? 0 : affiliation.hashCode()); result = prime * result + ((user == null) ? 0 : user.hashCode()); return result; } @Override public final boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof NodeMembershipImpl)) { return false; } NodeMembershipImpl other = (NodeMembershipImpl) obj; if (listener == null) { if (other.listener != null) { return false; } } else if (!listener.equals(other.listener)) { return false; } if (nodeId == null) { if (other.nodeId != null) { return false; } } else if (!nodeId.equals(other.nodeId)) { return false; } if (subscription != other.subscription) { return false; } if (affiliation != other.affiliation) { return false; } if (user == null) { if (other.user != null) { return false; } } else if (!user.equals(other.user)) { return false; } return true; } @Override public String toString() { return "NodeMembershipImpl [subscription=" + subscription + ", affiliation=" + affiliation + ",user=" + user + ", listener=" + listener + ", nodeId=" + nodeId + "]"; } @Override public String getUID() { return toString(); } @Override public Date getLastUpdated() { return lastUpdated; } }