/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.services.jcr.access; import org.exoplatform.services.security.MembershipEntry; /** * Created by The eXo Platform SAS<br> * * A data structure consisting of a user name, group and a permission granted to it. * * @author Gennady Azarenkov * @version $Id: AccessControlEntry.java 14464 2008-05-19 11:05:20Z pnedonosko $ * @LevelAPI Experimental */ public class AccessControlEntry { private final String identity; private final String permission; private volatile MembershipEntry membership; public static final String DELIMITER = " "; private Integer hashcode = null; private String asString = null; public AccessControlEntry(String identity, String permission) { this.identity = identity; this.permission = permission; } /** * @return returns the identity */ public String getIdentity() { return identity; } /** * @return returns the permission type */ public String getPermission() { return permission; } /** * @return returns the membership */ public MembershipEntry getMembershipEntry() { if (membership == null) { synchronized (this) { if (membership == null) { membership = MembershipEntry.parse(getIdentity()); } } } return membership; } public String getAsString() { if (asString == null) { asString = identity + AccessControlEntry.DELIMITER + permission; } return asString; } @Override public int hashCode() { if (hashcode == null) { hashcode = getAsString().hashCode(); } return hashcode; } @Override public boolean equals(Object obj) { if (obj == this) return true; if (obj instanceof AccessControlEntry) { AccessControlEntry another = (AccessControlEntry)obj; return getAsString().equals(another.getAsString()); } return false; } @Override public String toString() { return super.toString() + " (" + getAsString() + ")"; } /** * Factory method. */ public static AccessControlEntry parse(String pstring) { if (pstring == null) throw new IllegalArgumentException("The string representation of an AccessControlEntry cannot be null"); int index = pstring.lastIndexOf(AccessControlEntry.DELIMITER); if (index == -1) throw new IllegalArgumentException("The string representation of an AccessControlEntry must contain the delimiter '" + AccessControlEntry.DELIMITER + "'"); String identity = pstring.substring(0, index); String permission = pstring.substring(index + 1); return new AccessControlEntry(identity, permission); } }