001: /* Copyright 2001 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal.channels.permissionsmanager;
007:
008: import java.util.Calendar;
009: import java.util.Enumeration;
010: import java.util.HashMap;
011:
012: import org.jasig.portal.ChannelStaticData;
013: import org.jasig.portal.IChannel;
014: import org.jasig.portal.IPermissible;
015: import org.jasig.portal.IServant;
016: import org.jasig.portal.PortalException;
017: import org.jasig.portal.security.IAuthorizationPrincipal;
018: import org.apache.commons.logging.Log;
019: import org.apache.commons.logging.LogFactory;
020:
021: /**
022: * CPermissionsManagerServantFactory
023: *
024: * calling getPermissionsServant will return an instance of the default
025: * CPermissionsManagerServant implementation
026: *
027: * @author Alex Vigdor
028: * @version $Revision: 34912 $
029: */
030: public class CPermissionsManagerServantFactory {
031: private static final Log log = LogFactory
032: .getLog(CPermissionsManagerServantFactory.class);
033: private static CPermissionsManagerServantFactory _instance;
034: private HashMap servantClasses = new HashMap();
035:
036: /** Creates new CPermissionsManagerServantFactory */
037: protected CPermissionsManagerServantFactory() {
038: }
039:
040: /**
041: * put your documentation comment here
042: * @return
043: */
044: static IServant getPermissionsServant() {
045: return getPermissionsServant("CPermissionsManagerServant");
046: }
047:
048: /**
049: * put your documentation comment here
050: * @param name
051: * @return
052: */
053: protected static IServant getPermissionsServant(String name) {
054: return instance().getServant(name);
055: }
056:
057: /**
058: * put your documentation comment here
059: * @param owner
060: * @param principals
061: * @param activities
062: * @param targets
063: * @param staticData
064: * @return the permissions servant
065: * @exception org.jasig.portal.PortalException
066: */
067: public static IServant getPermissionsServant(IPermissible owner,
068: ChannelStaticData staticData,
069: IAuthorizationPrincipal[] principals, String[] activities,
070: String[] targets) throws org.jasig.portal.PortalException {
071: boolean isOK = true;
072: long time1 = Calendar.getInstance().getTime().getTime();
073: RDBMPermissibleRegistry.registerPermissible(owner.getClass()
074: .getName());
075:
076: IServant servant = getPermissionsServant();
077: IPermissible[] owners = new IPermissible[1];
078: owners[0] = owner;
079: if (activities == null) {
080: activities = owner.getActivityTokens();
081: }
082: if (targets == null) {
083: targets = owner.getTargetTokens();
084: }
085: if (staticData != null) {
086: try {
087: ChannelStaticData slaveSD = (ChannelStaticData) staticData
088: .clone();
089: Enumeration srd = slaveSD.keys();
090: while (srd.hasMoreElements()) {
091: slaveSD.remove(srd.nextElement());
092: }
093: HashMap tHash = new HashMap(1);
094: tHash.put(owner.getOwnerToken(), targets);
095: HashMap aHash = new HashMap(1);
096: aHash.put(owner.getOwnerToken(), activities);
097: if (principals != null) {
098: slaveSD.put("prmPrincipals", principals);
099: }
100: slaveSD.put("prmOwners", owners);
101: slaveSD.put("prmActivities", aHash);
102: slaveSD.put("prmTargets", tHash);
103: slaveSD.put("prmView", "Assign By Owner");
104: ((IChannel) servant).setStaticData(slaveSD);
105: } catch (Exception e) {
106: isOK = false;
107: }
108: } else {
109: isOK = false;
110: }
111: if (!isOK) {
112: throw (new PortalException(
113: "CPermissionsServantFactory.getPermissionsServant():: unable to properly initialize servant, check that mast staticData is being properly passed to this method"));
114: }
115: if (log.isInfoEnabled()) {
116: long time2 = Calendar.getInstance().getTime().getTime();
117: log.info("CPermissionsManagerFactory took "
118: + String.valueOf((time2 - time1))
119: + " ms to instantiate");
120: }
121:
122: return servant;
123: }
124:
125: /**
126: * put your documentation comment here
127: * @param name
128: * @return
129: */
130: protected IServant getServant(String name) {
131: IServant rs = null;
132: if (servantClasses.get(name) == null) {
133: try {
134: Class cserv = Class
135: .forName("org.jasig.portal.channels.permissionsmanager."
136: + name);
137: servantClasses.put(name, cserv);
138: } catch (Exception e) {
139: log.error(e, e);
140: }
141: }
142: if (servantClasses.get(name) != null) {
143: try {
144: rs = (IServant) ((Class) servantClasses.get(name))
145: .newInstance();
146: } catch (Exception e) {
147: log.error(e, e);
148: }
149: }
150: return rs;
151: }
152:
153: /**
154: * put your documentation comment here
155: * @return
156: */
157: protected static synchronized CPermissionsManagerServantFactory instance() {
158: if (_instance == null) {
159: _instance = new CPermissionsManagerServantFactory();
160: }
161: return _instance;
162: }
163: }
|