/*
* Copyright 2010 Robert Csakany <robson@semmi.se>.
*
* 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.
* under the License.
*/
package org.liveSense.service.securityManager;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;
/**
*
* @author Robert Csakany (robson@semmi.se)
* @created Feb 26, 2010
*/
public class AccessRightsImpl implements AccessRights {
private Set<SerializablePrivilege> granted = new HashSet<SerializablePrivilege>();
private Set<SerializablePrivilege> denied = new HashSet<SerializablePrivilege>();
private transient static ResourceBundle resBundle = null;
private ResourceBundle getResourceBundle(Locale locale) {
if (resBundle == null || !resBundle.getLocale().equals(locale)) {
resBundle = ResourceBundle.getBundle(getClass().getPackage().getName() + ".PrivilegesResources", locale);
}
return resBundle;
}
public Set<SerializablePrivilege> getGranted() {
return granted;
}
public Set<SerializablePrivilege> getDenied() {
return denied;
}
public String[] getGrantedAsString() {
String[] privStr = new String[granted.size()];
int i = 0;
for (SerializablePrivilege privilege : granted) {
privStr[i] = privilege.getName();
i++;
}
return privStr;
}
public String[] getDeniedAsString() {
String[] privStr = new String[denied.size()];
int i = 0;
for (SerializablePrivilege privilege : denied) {
privStr[i] = privilege.getName();
i++;
}
return privStr;
}
public String getPrivilegeSetDisplayName(Locale locale) {
if (denied != null && !denied.isEmpty()) {
//if there are any denied privileges, then this is a custom privilege set
return getResourceBundle(locale).getString("privilegeset.custom");
} else {
if (granted.isEmpty()) {
//appears to have an empty privilege set
return getResourceBundle(locale).getString("privilegeset.none");
}
if (granted.size() == 1) {
//check if the single privilege is jcr:all or jcr:read
Iterator<SerializablePrivilege> iterator = granted.iterator();
SerializablePrivilege next = iterator.next();
if ("jcr:all".equals(next.getName())) {
//full control privilege set
return getResourceBundle(locale).getString("privilegeset.all");
} else if ("jcr:read".equals(next.getName())) {
//readonly privilege set
return getResourceBundle(locale).getString("privilegeset.readonly");
}
} else if (granted.size() == 2) {
//check if the two privileges are jcr:read and jcr:write
Iterator<SerializablePrivilege> iterator = granted.iterator();
SerializablePrivilege next = iterator.next();
SerializablePrivilege next2 = iterator.next();
if ( ("jcr:read".equals(next.getName()) && "jcr:write".equals(next2.getName())) ||
("jcr:read".equals(next2.getName()) && "jcr:write".equals(next.getName())) ) {
//read/write privileges
return getResourceBundle(locale).getString("privilegeset.readwrite");
}
}
//some other set of privileges
return getResourceBundle(locale).getString("privilegeset.custom");
}
}
}