| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| package org.apache.vysper.xmpp.modules.roster; |
| |
| import static org.apache.vysper.xmpp.modules.roster.AskSubscriptionType.NOT_SET; |
| import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.BOTH; |
| import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.FROM; |
| import static org.apache.vysper.xmpp.modules.roster.SubscriptionType.TO; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.apache.vysper.xmpp.addressing.Entity; |
| |
| /** |
| * one contact in the roster of a user, the subscription can either be pending, or established, depending on the values |
| * of the subscriptionType and askSubscriptionType fields. |
| * |
| * @author The Apache MINA Project (dev@mina.apache.org) |
| */ |
| public class RosterItem { |
| |
| /** |
| * the contact's JID, eg. "zappa@vysper.org" |
| */ |
| private Entity jid; |
| |
| /** |
| * a user-chosen, descriptive, often short name ('nick'), eg. "Frank Zappa", or "Frank" |
| */ |
| private String name; |
| |
| /** |
| * all the groups the item is displayed under. this list can be empty. |
| */ |
| private final List<RosterGroup> groups = new ArrayList<RosterGroup>(); |
| |
| /** |
| * type of subscription either FROM, TO or both. depending on the value of askSubscriptionType, FROM or TO |
| * subscriptions might be still pending and awaiting approval |
| */ |
| private SubscriptionType subscriptionType; |
| |
| /** |
| * records pending subscriptions, awaiting approval |
| */ |
| private AskSubscriptionType askSubscriptionType; |
| |
| public RosterItem(Entity jid, SubscriptionType subscriptionType) { |
| this(jid, null, subscriptionType, null); |
| } |
| |
| public RosterItem(Entity jid, SubscriptionType subscriptionType, AskSubscriptionType askSubscriptionType) { |
| this(jid, null, subscriptionType, askSubscriptionType); |
| } |
| |
| public RosterItem(Entity jid, String name, SubscriptionType subscriptionType, |
| AskSubscriptionType askSubscriptionType) { |
| this.jid = jid; |
| this.name = name; |
| this.subscriptionType = subscriptionType; |
| this.askSubscriptionType = askSubscriptionType == null ? NOT_SET : askSubscriptionType; |
| } |
| |
| public RosterItem(Entity jid, String name, SubscriptionType subscriptionType, |
| AskSubscriptionType askSubscriptionType, List<RosterGroup> groups) { |
| this(jid, name, subscriptionType, askSubscriptionType); |
| this.groups.addAll(groups); |
| } |
| |
| public Entity getJid() { |
| return jid; |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| /** |
| * sets the user-chosen name for the contact |
| * @param name |
| */ |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| /** |
| * unmodifyable list of groups containing this contact |
| * @return list, containing 0..n groups |
| */ |
| public List<RosterGroup> getGroups() { |
| return Collections.unmodifiableList(groups); |
| } |
| |
| /** |
| * the list of groups the contact will be contained in. all previous groups are replaced by the given list. |
| * @param newGroups 0..n groups |
| */ |
| public void setGroups(List<RosterGroup> newGroups) { |
| this.groups.clear(); |
| if (newGroups != null) |
| this.groups.addAll(newGroups); |
| } |
| |
| public SubscriptionType getSubscriptionType() { |
| return subscriptionType; |
| } |
| |
| /** |
| * should be set using the RosterSubscriptionMutator |
| */ |
| /*package*/void setSubscriptionType(SubscriptionType subscriptionType) { |
| this.subscriptionType = subscriptionType; |
| } |
| |
| public AskSubscriptionType getAskSubscriptionType() { |
| return askSubscriptionType; |
| } |
| |
| /** |
| * should be set using the RosterSubscriptionMutator |
| */ |
| /*package*/void setAskSubscriptionType(AskSubscriptionType askSubscribe) { |
| this.askSubscriptionType = askSubscribe; |
| } |
| |
| /** |
| * @return TRUE, iff the contact sends presence to the user |
| */ |
| public boolean hasTo() { |
| return subscriptionType == TO || subscriptionType == BOTH; |
| } |
| |
| /** |
| * @return TRUE, iff the contact receives presence from the contact |
| */ |
| public boolean hasFrom() { |
| return subscriptionType == FROM || subscriptionType == BOTH; |
| } |
| |
| /** |
| * @return TRUE, iff the user and the contact mutually receive each other's presence |
| */ |
| public boolean isBoth() { |
| return subscriptionType == BOTH; |
| } |
| |
| @Override |
| public String toString() { |
| return "RosterItem{" + "jid=" + (jid == null ? "NULL" : jid.getFullQualifiedName()) + ", name='" + name + '\'' |
| + ", groups=" + groups + ", subscriptionType=" + subscriptionType + ", askSubscriptionType=" |
| + askSubscriptionType + '}'; |
| } |
| } |