blob: 9eaa520b6902088588049f359ad2e33d058d63e3 [file] [log] [blame]
/*
* 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.chemistry.opencmis.inmemory.storedobj.impl;
import java.util.Collections;
import java.util.List;
import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
public class InMemoryAce {
private static final String ANONYMOUS = "anonymous";
private static final String ANYONE = "anyone";
private final String principalId;
private Permission permission;
private static final InMemoryAce DEFAULT_ACE = new InMemoryAce(InMemoryAce.getAnyoneUser(), Permission.ALL);
public static final String getAnyoneUser() {
return ANYONE;
}
public static final String getAnonymousUser() {
return ANONYMOUS;
}
public static final InMemoryAce getDefaultAce() {
return DEFAULT_ACE;
}
public InMemoryAce(Ace commonsAce) {
if (null == commonsAce || null == commonsAce.getPrincipalId() || null == commonsAce.getPermissions()) {
throw new IllegalArgumentException("Cannot create InMemoryAce with null value");
}
List<String> perms = commonsAce.getPermissions();
if (perms.size() != 1) {
throw new IllegalArgumentException("InMemory only supports ACEs with a single permission.");
}
String perm = perms.get(0);
this.principalId = commonsAce.getPrincipalId();
this.permission = Permission.fromCmisString(perm);
}
public InMemoryAce(String prinicpalId, Permission permission) {
if (null == prinicpalId || null == permission) {
throw new IllegalArgumentException("Cannot create InMemoryAce with null value");
}
this.principalId = prinicpalId;
this.permission = permission;
}
public String getPrincipalId() {
return principalId;
}
public Permission getPermission() {
return permission;
}
public void setPermission(Permission newPermission) {
permission = newPermission;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((permission == null) ? 0 : permission.hashCode());
result = prime * result + ((principalId == null) ? 0 : principalId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
InMemoryAce other = (InMemoryAce) obj;
if (permission != other.permission) {
return false;
}
if (principalId == null) {
if (other.principalId != null) {
return false;
}
} else if (!principalId.equals(other.principalId)) {
return false;
}
return true;
}
public boolean hasPermission(Permission permission2) {
return this.permission.compareTo(permission2) >= 0;
}
@Override
public String toString() {
return "InMemoryAce [principalId=" + principalId + ", permission=" + permission + "]";
}
public Ace toCommonsAce() {
return new AccessControlEntryImpl(new AccessControlPrincipalDataImpl(principalId),
Collections.singletonList(permission.toCmisString()));
}
}