package com.openedit.users.filesystem; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import com.openedit.OpenEditException; import com.openedit.OpenEditRuntimeException; import com.openedit.config.Configuration; import com.openedit.config.XMLConfiguration; import com.openedit.page.Page; import com.openedit.page.manage.PageManager; import com.openedit.users.Permission; import com.openedit.util.XmlUtil; public class PermissionsManager { protected List fieldSystemPermissionGroups; protected PermissionGroup fieldUserPermissionGroup; protected long fieldLastEditTime; protected PageManager fieldPageManager; protected File fieldRootDir; public PermissionsManager() { } public void addSystemPermissions(Reader inReader) { PermissionGroup group = loadPermissions(inReader); getSystemPermissionGroups().add(group); } protected PermissionGroup loadPermissions(Reader inReader) { List permissions = new ArrayList(); XMLConfiguration userManagerConfig = new XMLConfiguration(); userManagerConfig.populate(new XmlUtil().getXml(inReader,"UTF-8")); PermissionGroup pgroup = new PermissionGroup(); String name = userManagerConfig.getAttribute("name"); pgroup.setName(name); permissions = new ArrayList( ); for (Iterator iter = userManagerConfig.getChildren("permission").iterator(); iter.hasNext();) { Configuration permissionElem = (Configuration)iter.next(); String desc = permissionElem.getAttribute("description"); if ( desc == null) { desc = permissionElem.getValue(); } Permission perm = new Permission(permissionElem.getAttribute("id"),desc); perm.setDescription(""); desc = permissionElem.getValue(); if (desc != null) { perm.setDescription(desc); } permissions.add( perm ); } pgroup.setPermissions(permissions); return pgroup; } public PermissionGroup loadPermissions(Page inPage) throws OpenEditException { if( !inPage.exists()) { return new PermissionGroup(); } return loadPermissions(inPage.getReader()); } public List getSystemPermissionGroups() { if (fieldSystemPermissionGroups == null) { fieldSystemPermissionGroups = new ArrayList(); } return fieldSystemPermissionGroups; } public void setSystemPermissionGroups(List inSystemPermissions) { fieldSystemPermissionGroups = inSystemPermissions; } public List getSystemPermissions() { List permissions = new ArrayList(); for (Iterator iter = getSystemPermissionGroups().iterator(); iter.hasNext();) { PermissionGroup group = (PermissionGroup) iter.next(); permissions.addAll(group.getPermissions()); } return permissions; } public PageManager getPageManager() { return fieldPageManager; } public void setPageManager(PageManager inPageManager) { fieldPageManager = inPageManager; } public void loadPermissions() { try { try { ClassLoader loader = getClass().getClassLoader(); if( loader == null) { loader = ClassLoader.getSystemClassLoader(); } Enumeration pluginDefs = loader.getResources( "permissions.xml" ); while( pluginDefs.hasMoreElements() ) { URL url = (URL) pluginDefs.nextElement(); addSystemPermissions( new InputStreamReader(url.openStream() ) ); } } catch ( IOException ex) { throw new OpenEditRuntimeException(ex); } } catch ( Exception ex) { throw new OpenEditRuntimeException(ex); } } // protected void loadPermissionsDefs(Reader inUrl) // { // // FileReader reader; // try // { // reader = new FileReader(inUrl); // } catch (Exception ex) // { // throw new OpenEditRuntimeException(ex); // } // addSystemPermissions(reader); // } }