/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed 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 net.java.sip.communicator.impl.protocol.jabber;
import net.java.sip.communicator.service.protocol.*;
import java.util.*;
/**
* Implements group edit permissions.
*
* @author Damian Minkov
*/
public class OperationSetPersistentPresencePermissionsJabberImpl
implements OperationSetPersistentPresencePermissions
{
/**
* Will indicate everything is readonly.
*/
private static final String ALL_GROUPS_STR = "all";
/**
* Can be added to mark root group as readonly.
*/
private static final String ROOT_GROUP_STR = "root";
/**
* List of group names to be considered as readonly.
*/
private List<String> readonlyGroups = new ArrayList<String>();
/**
* The parent provider.
*/
private final ProtocolProviderServiceJabberImpl provider;
OperationSetPersistentPresencePermissionsJabberImpl(
ProtocolProviderServiceJabberImpl provider)
{
this.provider = provider;
String readOnlyGroupsStr = provider.getAccountID()
.getAccountPropertyString(
ProtocolProviderFactory.ACCOUNT_READ_ONLY_GROUPS);
if(readOnlyGroupsStr == null)
return;
StringTokenizer tokenizer = new StringTokenizer(readOnlyGroupsStr, ",");
while(tokenizer.hasMoreTokens())
{
readonlyGroups.add(tokenizer.nextToken().trim());
}
}
/**
* Is the whole contact list for the current provider readonly.
* @return <tt>true</tt> if the whole contact list is readonly, otherwise
* <tt>false</tt>.
*/
@Override
public boolean isReadOnly()
{
if(readonlyGroups.contains(ALL_GROUPS_STR))
return true;
List<String> groupsList = new ArrayList<String>();
groupsList.add(ROOT_GROUP_STR);
Iterator<ContactGroup> groupsIter = provider
.getOperationSet(OperationSetPersistentPresence.class)
.getServerStoredContactListRoot().subgroups();
while(groupsIter.hasNext())
{
groupsList.add(groupsIter.next().getGroupName());
}
if(groupsList.size() > readonlyGroups.size())
return false;
groupsList.removeAll(readonlyGroups);
if(groupsList.size() > 0)
return false;
return true;
}
/**
* Checks whether the <tt>contact</tt> can be edited, removed, moved. If
* the parent group is readonly.
* @param contact the contact to check.
* @return <tt>true</tt> if the contact is readonly, otherwise
* <tt>false</tt>.
*/
@Override
public boolean isReadOnly(Contact contact)
{
return isReadOnly(contact.getParentContactGroup());
}
/**
* Checks whether the <tt>group</tt> is readonly.
* @param group the group to check.
* @return <tt>true</tt> if the group is readonly, otherwise
* <tt>false</tt>.
*/
@Override
public boolean isReadOnly(ContactGroup group)
{
if(isReadOnly())
return true;
if(group instanceof RootContactGroupJabberImpl)
return readonlyGroups.contains(ROOT_GROUP_STR);
else
return readonlyGroups.contains(group.getGroupName());
}
}