1 23 package org.infoglue.cms.applications.workflowtool.function; 24 25 import java.util.ArrayList ; 26 import java.util.HashMap ; 27 import java.util.Iterator ; 28 import java.util.List ; 29 import java.util.Map ; 30 import java.util.StringTokenizer ; 31 32 import org.apache.log4j.Logger; 33 import org.infoglue.cms.controllers.kernel.impl.simple.GroupControllerProxy; 34 35 import com.opensymphony.workflow.WorkflowException; 36 37 public class GroupsProvider extends InfoglueFunction 38 { 39 private final static Logger logger = Logger.getLogger(GroupsProvider.class.getName()); 40 41 44 public static final String GROUPS_PARAMETER = "groups"; 45 46 49 private static final String GROUPS_PROPERTYSET_PREFIX = "groups_"; 50 51 54 private static final String MODE_ARGUMENT = "mode"; 55 56 59 private static final int REQUEST_MODE = 0; 60 61 64 private static final String REQUEST_MODE_NAME = "request"; 65 66 69 private static final int ARGUMENT_MODE = 1; 70 71 74 private static final String ARGUMENT_MODE_NAME = "argument"; 75 76 79 private static final int PRINCIPAL_MODE = 2; 80 81 84 private static final String PRINCIPAL_MODE_NAME = "principal"; 85 86 89 private static final String GROUPS_ARGUMENT = "groups"; 90 91 94 private int mode; 95 96 99 private List groups = new ArrayList (); 100 101 104 public GroupsProvider() 105 { 106 super(); 107 } 108 109 112 protected void execute() throws WorkflowException 113 { 114 switch(mode) 115 { 116 case ARGUMENT_MODE: 117 populateGroupFromAttribute(); 118 break; 119 case PRINCIPAL_MODE: 120 populateGroupFromPrincipal(); 121 break; 122 default: 123 populateGroupFromRequest(); 124 break; 125 } 126 setParameter(GROUPS_PARAMETER, groups); 127 } 128 129 132 private void populateGroupFromAttribute() throws WorkflowException 133 { 134 logger.debug("Populating from attribute."); 135 for(final StringTokenizer st = new StringTokenizer (getArgument(GROUPS_ARGUMENT), ","); st.hasMoreTokens(); ) 136 { 137 populateGroup(st.nextToken()); 138 } 139 } 140 141 144 private void populateGroupFromPrincipal() throws WorkflowException 145 { 146 logger.debug("Populating from principal."); 147 for(final Iterator i = getPrincipal().getGroups().iterator(); i.hasNext(); ) 148 { 149 groups.add(i.next()); 150 } 151 } 152 153 156 private void populateGroupFromRequest() throws WorkflowException 157 { 158 logger.debug("Populating from request."); 159 for(final Iterator i = getParameters().keySet().iterator(); i.hasNext(); ) 160 { 161 final String key = i.next().toString(); 162 if(key.startsWith(GROUPS_PROPERTYSET_PREFIX)) 163 { 164 populateGroup(key.substring(GROUPS_PROPERTYSET_PREFIX.length())); 165 } 166 } 167 } 168 169 172 private void populateGroup(final String groupName) throws WorkflowException 173 { 174 try 175 { 176 groups.add(GroupControllerProxy.getController(getDatabase()).getGroup(groupName)); 177 } 178 catch(Exception e) 179 { 180 throwException(e); 181 } 182 } 183 184 190 protected void initialize() throws WorkflowException 191 { 192 super.initialize(); 193 this.mode = getMode(getArgument(MODE_ARGUMENT, REQUEST_MODE_NAME)); 194 } 195 196 199 private int getMode(final String modeName) 200 { 201 final Map modes = new HashMap (); 202 modes.put(REQUEST_MODE_NAME, new Integer (REQUEST_MODE)); 203 modes.put(ARGUMENT_MODE_NAME, new Integer (ARGUMENT_MODE)); 204 modes.put(PRINCIPAL_MODE_NAME, new Integer (PRINCIPAL_MODE)); 205 return modes.containsKey(modeName) ? ((Integer ) modes.get(modeName)).intValue() : REQUEST_MODE; 206 } 207 } 208 | Popular Tags |