Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) 2014 Philip Helger (www.helger.com) philip[at]helger[dot]com 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 com.helger.appbasics.security.role;
 
 import java.util.Map;
 
 
 
This class manages the available roles.

Author(s):
Philip Helger
 
 public final class RoleManager extends AbstractSimpleDAO implements IRoleManagerIReloadableDAO
 {
   public static final boolean DEFAULT_CREATE_DEFAULTS = true;
 
   private static final Logger s_aLogger = LoggerFactory.getLogger (RoleManager.class);
   private static final ReadWriteLock s_aRWLock = new ReentrantReadWriteLock ();
 
   @GuardedBy ("s_aRWLock")
   private static boolean s_bCreateDefaults = ;
 
   @GuardedBy ("m_aRWLock")
   private final Map <StringRolem_aRoles = new HashMap <StringRole> ();
 

Returns:
true if the default built-in roles should be created if no roles are present, false if not.
 
   public static boolean isCreateDefaults ()
   {
     .readLock ().lock ();
     try
     {
       return ;
     }
     finally
     {
       .readLock ().unlock ();
     }
   }
 
   public static void setCreateDefaults (final boolean bCreateDefaults)
   {
     .writeLock ().lock ();
     try
     {
        = bCreateDefaults;
     }
     finally
     {
       .writeLock ().unlock ();
     }
  }
  public RoleManager (@Nonnull @Nonempty final String sFilenamethrows DAOException
  {
    super (sFilename);
    initialRead ();
  }
  public void reload () throws DAOException
  {
    .writeLock ().lock ();
    try
    {
      .clear ();
      initialRead ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
  }
  protected EChange onInit ()
  {
    if (!isCreateDefaults ())
      return .;
    // Default should be created
    return .;
  }
  protected EChange onRead (@Nonnull final IMicroDocument aDoc)
  {
    for (final IMicroElement eRole : aDoc.getDocumentElement ().getAllChildElements ())
      _addRole (MicroTypeConverter.convertToNative (eRoleRole.class));
    return .;
  }
  {
    final IMicroDocument aDoc = new MicroDocument ();
    final IMicroElement eRoot = aDoc.appendElement ("roles");
    for (final Role aRole : ContainerHelper.getSortedByKey ().values ())
      eRoot.appendChild (MicroTypeConverter.convertToMicroElement (aRole"role"));
    return aDoc;
  }
  @ReturnsMutableObject (reason = "design")
  {
    return ;
  }
  private void _addRole (@Nonnull final Role aRole)
  {
    ValueEnforcer.notNull (aRole"Role");
    final String sRoleID = aRole.getID ();
    if (.containsKey (sRoleID))
      throw new IllegalArgumentException ("Role ID " + sRoleID + " is already in use!");
    .put (sRoleIDaRole);
  }
  public IRole createNewRole (@Nonnull @Nonempty final String sName)
  {
    return createNewRole (sName, (Map <StringString>) null);
  }
  public IRole createNewRole (@Nonnull @Nonempty final String sName, @Nullable final Map <String, ?> aCustomAttrs)
  {
    // Create role
    final Role aRole = new Role (sNameaCustomAttrs);
    .writeLock ().lock ();
    try
    {
      // Store
      _addRole (aRole);
      markAsChanged ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
    AuditUtils.onAuditCreateSuccess (.aRole.getID (), sName);
    // Execute callback as the very last action
    for (final IRoleModificationCallback aRoleCallback : .getAllCallbacks ())
      try
      {
        aRoleCallback.onRoleCreated (aRolefalse);
      }
      catch (final Throwable t)
      {
        .error ("Failed to invoke onRoleCreated callback on " + aRole.toString (), t);
      }
    return aRole;
  }
  public IRole createPredefinedRole (@Nonnull @Nonempty final String sID, @Nonnull @Nonempty final String sName)
  {
    // Create role
    final Role aRole = new Role (sIDsName);
    .writeLock ().lock ();
    try
    {
      // Store
      _addRole (aRole);
      markAsChanged ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
    AuditUtils.onAuditCreateSuccess (.aRole.getID (), "predefind-role"sName);
    // Execute callback as the very last action
    for (final IRoleModificationCallback aRoleCallback : .getAllCallbacks ())
      try
      {
        aRoleCallback.onRoleCreated (aRoletrue);
      }
      catch (final Throwable t)
      {
        .error ("Failed to invoke onRoleCreated callback on " + aRole.toString (), t);
      }
    return aRole;
  }
  public boolean containsRoleWithID (@Nullable final String sRoleID)
  {
    if (StringHelper.hasNoText (sRoleID))
      return false;
    .readLock ().lock ();
    try
    {
      return .containsKey (sRoleID);
    }
    finally
    {
      .readLock ().unlock ();
    }
  }
  public boolean containsAllRolesWithID (@Nullable final Collection <StringaRoleIDs)
  {
    if (ContainerHelper.isEmpty (aRoleIDs))
      return true;
    .readLock ().lock ();
    try
    {
      for (final String sRoleID : aRoleIDs)
        if (!.containsKey (sRoleID))
          return false;
      return true;
    }
    finally
    {
      .readLock ().unlock ();
    }
  }
  public Role getRoleOfID (@Nullable final String sRoleID)
  {
    if (StringHelper.hasNoText (sRoleID))
      return null;
    .readLock ().lock ();
    try
    {
      return .get (sRoleID);
    }
    finally
    {
      .readLock ().unlock ();
    }
  }
  public Collection <? extends IRolegetAllRoles ()
  {
    .readLock ().lock ();
    try
    {
      return ContainerHelper.newList (.values ());
    }
    finally
    {
      .readLock ().unlock ();
    }
  }
  public EChange deleteRole (@Nullable final String sRoleID)
  {
    IRole aDeletedRole;
    .writeLock ().lock ();
    try
    {
      aDeletedRole = .remove (sRoleID);
      if (aDeletedRole == null)
      {
        AuditUtils.onAuditDeleteFailure (."no-such-role-id"sRoleID);
        return .;
      }
      markAsChanged ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
    AuditUtils.onAuditDeleteSuccess (.sRoleID);
    // Execute callback as the very last action
    for (final IRoleModificationCallback aRoleCallback : .getAllCallbacks ())
      try
      {
        aRoleCallback.onRoleDeleted (aDeletedRole);
      }
      catch (final Throwable t)
      {
        .error ("Failed to invoke onRoleDeleted callback on " + aDeletedRole.toString (), t);
      }
    return .;
  }
  public EChange renameRole (@Nullable final String sRoleID, @Nonnull @Nonempty final String sNewName)
  {
    // Resolve user group
    final Role aRole = getRoleOfID (sRoleID);
    if (aRole == null)
    {
      AuditUtils.onAuditModifyFailure (.sRoleID"no-such-id");
      return .;
    }
    .writeLock ().lock ();
    try
    {
      if (aRole.setName (sNewName).isUnchanged ())
        return .;
      markAsChanged ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
    AuditUtils.onAuditModifySuccess (."name"sRoleIDsNewName);
    // Execute callback as the very last action
    for (final IRoleModificationCallback aRoleCallback : .getAllCallbacks ())
      try
      {
        aRoleCallback.onRoleRenamed (aRole);
      }
      catch (final Throwable t)
      {
        .error ("Failed to invoke onRoleRenamed callback on " + aRole.toString (), t);
      }
    return .;
  }
  public EChange setRoleData (@Nullable final String sRoleID,
                              @Nonnull @Nonempty final String sNewName,
                              @Nullable final Map <String, ?> aNewCustomAttrs)
  {
    // Resolve role
    final Role aRole = getRoleOfID (sRoleID);
    if (aRole == null)
    {
      AuditUtils.onAuditModifyFailure (.sRoleID"no-such-role-id");
      return .;
    }
    .writeLock ().lock ();
    try
    {
      EChange eChange = aRole.setName (sNewName);
      eChange = eChange.or (aRole.setAttributes (aNewCustomAttrs));
      if (eChange.isUnchanged ())
        return .;
      markAsChanged ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
                                     "all",
                                     aRole.getID (),
                                     sNewName,
                                     StringHelper.getToString (aNewCustomAttrs));
    // Execute callback as the very last action
    for (final IRoleModificationCallback aRoleCallback : .getAllCallbacks ())
      try
      {
        aRoleCallback.onRoleUpdated (aRole);
      }
      catch (final Throwable t)
      {
        .error ("Failed to invoke onRoleUpdated callback on " + aRole.toString (), t);
      }
    return .;
  }
New to GrepCode? Check out our FAQ X