Java tutorial
/** * Copyright (C) 2012 JBoss Inc * * 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 org.jboss.dashboard.security; import org.jboss.dashboard.database.hibernate.HibernateTxFragment; import org.hibernate.Session; import java.lang.reflect.Constructor; import java.security.Permission; import java.security.Principal; public class PermissionDescriptor { private static final transient org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory .getLog(PermissionDescriptor.class); // Constructor types private static final Class[] _prpalConstructorTypes = new Class[] { String.class }; private static final Object[] _permConstructorsTypes = { new Class[] { String.class, String.class }, new Class[] { String.class }, new Class[] {} }; // Properties private Long dbid; private String principalClass; private String principalName; private String permissionClass; private String permissionResource; private String permissionActions; private Boolean readonly; public PermissionDescriptor() { this.dbid = null; this.principalClass = null; this.principalName = null; this.permissionClass = null; this.permissionResource = null; this.permissionActions = null; this.readonly = false; } public PermissionDescriptor(Principal prpal, Permission perm) { this(); this.setPrincipal(prpal); this.setPermission(perm); } public String getItemClassName() { return PermissionDescriptor.class.getName(); } public Long getDbid() { return dbid; } public void setDbid(Long id) { dbid = id; } public String getPrincipalClass() { return principalClass; } public void setPrincipalClass(String principalClass) { this.principalClass = principalClass; } public String getPrincipalName() { return principalName; } public void setPrincipalName(String principalName) { this.principalName = principalName; } public String getPermissionClass() { return permissionClass; } public void setPermissionClass(String permissionClass) { this.permissionClass = permissionClass; } public String getPermissionResource() { return permissionResource; } public void setPermissionResource(String permissionResource) { this.permissionResource = permissionResource; } public String getPermissionActions() { return permissionActions; } public void setPermissionActions(String permissionActions) { this.permissionActions = permissionActions; } public Boolean isReadonly() { return readonly; } public void setReadonly(Boolean readonly) { this.readonly = readonly; } public Principal getPrincipal() throws InstantiationException { if (principalClass == null) return null; try { Class prpalClass = Class.forName(principalClass); Constructor constr = prpalClass.getConstructor(_prpalConstructorTypes); return (Principal) constr.newInstance(new Object[] { principalName }); } catch (Exception ignored) { } // If Permission can't be instantiated then throw an exception. throw new InstantiationException("Principal class not supported (" + principalClass + ")."); } public void setPrincipal(Principal prpal) { principalClass = null; principalName = null; if (prpal != null) { principalClass = prpal.getClass().getName(); principalName = prpal.getName(); } } public Permission getPermission() throws InstantiationException { if (permissionClass == null) return null; for (int i = 0; i < _permConstructorsTypes.length; i++) { try { Class permClass = Class.forName(permissionClass); Class[] constrTypes = (Class[]) _permConstructorsTypes[i]; Constructor constr = permClass.getConstructor(constrTypes); Object[] constrParams = new Object[] { permissionResource, permissionActions }; return (Permission) constr.newInstance(constrParams); } catch (Exception ignored) { log.error("Permission class not supported (" + permissionClass + ")."); } } // If Permission can't be instantiated then throw an exception. throw new InstantiationException("Permission class not supported (" + permissionClass + ")."); } public void setPermission(Permission perm) { permissionClass = null; permissionResource = null; permissionActions = null; if (perm != null) { permissionClass = perm.getClass().getName(); permissionResource = perm.getName(); permissionActions = perm.getActions(); } } public boolean equals(Object obj) { if (!(obj instanceof PermissionDescriptor)) return false; PermissionDescriptor that = (PermissionDescriptor) obj; if (permissionClass == null && that.permissionClass != null) return false; if (permissionResource == null && that.permissionResource != null) return false; if (principalClass == null && that.principalClass != null) return false; if (principalName == null && that.principalName != null) return false; if (permissionClass != null && !permissionClass.equals(that.permissionClass)) return false; if (permissionResource != null && !permissionResource.equals(that.permissionResource)) return false; if (principalClass != null && !principalClass.equals(that.principalClass)) return false; if (principalName != null && !principalName.equals(that.principalName)) return false; return true; } public String toString() { StringBuffer sb = new StringBuffer("<PermissionDescriptor: "); sb.append(" idPermission: " + dbid); sb.append(" principalClass: " + principalClass); sb.append(" principalName: " + principalName); sb.append(" permissionClass: " + permissionClass); sb.append(" permissionResource: " + permissionResource); sb.append(" permissionActions: " + permissionActions); sb.append(" >"); return sb.toString(); } // Persistent stuff public boolean isPersistent() { return dbid != null; } public boolean save() throws Exception { final boolean isTransient = !isPersistent(); new HibernateTxFragment() { protected void txFragment(Session session) throws Exception { if (isTransient) persist(0); else persist(1); } }.execute(); return isTransient; } public boolean delete() throws Exception { if (!isPersistent()) return false; persist(2); return true; } protected void persist(final int op) throws Exception { new HibernateTxFragment() { protected void txFragment(Session session) throws Exception { switch (op) { case 0: session.save(PermissionDescriptor.this); break; case 1: session.update(PermissionDescriptor.this); break; case 2: session.delete(PermissionDescriptor.this); break; } session.flush(); } }.execute(); } }