001: package com.sun.portal.sra.admin.attribute.handlers;
002:
003: import java.util.ArrayList;
004: import java.util.Collections;
005: import java.util.HashMap;
006: import java.util.HashSet;
007: import java.util.Iterator;
008: import java.util.List;
009: import java.util.Map;
010: import java.util.Set;
011: import java.util.logging.Level;
012: import java.util.logging.Logger;
013:
014: import com.iplanet.sso.SSOException;
015: import com.iplanet.sso.SSOToken;
016: import com.sun.identity.sm.AttributeSchema;
017: import com.sun.identity.sm.SMSException;
018: import com.sun.identity.sm.ServiceConfig;
019: import com.sun.identity.sm.ServiceConfigManager;
020: import com.sun.identity.sm.ServiceSchema;
021: import com.sun.identity.sm.ServiceSchemaManager;
022: import com.sun.portal.admin.common.AttrOptionConstants;
023: import com.sun.portal.admin.common.AttributeInfo;
024: import com.sun.portal.admin.common.PSMBeanException;
025: import com.sun.portal.fabric.common.AttributeOperations;
026: import com.sun.portal.fabric.common.DSAMEAttributeOperations;
027: import com.sun.portal.log.common.PortalLogger;
028: import com.sun.portal.sra.admin.util.HandlerUtils;
029:
030: public class GatewayAttributeOperations implements AttributeOperations {
031: private SSOToken _token;
032:
033: public static final String GATEWAY_SERVICE_NAME = "srapGatewayService";
034:
035: public static final String GATEWAY_SERVICE_SUBSCHEMA_PREFIX = "Gateway-Profiles";
036:
037: public static final String ADD = "add";
038:
039: public static final String REMOVE = "remove";
040:
041: private Map _attributesMap = null;
042:
043: private static Logger logger = PortalLogger
044: .getLogger(GatewayAttributeOperations.class);
045:
046: private static String loggerName = "debug.com.sun.portal.admin.mbeans";
047:
048: public GatewayAttributeOperations(SSOToken token)
049: throws SSOException, SMSException {
050: _token = token;
051: }
052:
053: private Map getGatewayServiceAttributes(String instanceName,
054: String version) throws SMSException, SSOException {
055: ServiceConfigManager scm = new ServiceConfigManager(_token,
056: GATEWAY_SERVICE_NAME, version);
057: ServiceConfig sconfig = scm.getGlobalConfig(null).getSubConfig(
058: GATEWAY_SERVICE_SUBSCHEMA_PREFIX).getSubConfig(
059: instanceName);
060: return sconfig.getAttributes();
061: }
062:
063: private void setGatewayServiceAttributes(String instanceName,
064: String version, Map attributeValueMap) throws SMSException,
065: SSOException {
066: // attributeValueMap is a hash map of String -> Set
067: ServiceConfigManager scm = new ServiceConfigManager(_token,
068: GATEWAY_SERVICE_NAME, version);
069: ServiceConfig sconfig = scm.getGlobalConfig(null).getSubConfig(
070: GATEWAY_SERVICE_SUBSCHEMA_PREFIX).getSubConfig(
071: instanceName);
072: sconfig.setAttributes(attributeValueMap);
073: }
074:
075: private Map listAttributes(Map optionsMap) throws SSOException,
076: SMSException {
077: // Map of String and Sets
078: String version = "1.0";
079: String instanceName = "default";
080: if (optionsMap.containsKey("gateway-profile"))
081: instanceName = (String) optionsMap.get("gateway-profile");
082:
083: _attributesMap = getGatewayServiceAttributes(instanceName,
084: version);
085: Object[] params0 = { instanceName };
086: logger.log(Level.INFO, "PSSR_CSPS_ADM_ATTRIB_HNDLRS003",
087: params0);
088:
089: ServiceSchema schema = new ServiceSchemaManager(_token,
090: GATEWAY_SERVICE_NAME, version).getGlobalSchema()
091: .getSubSchema(GATEWAY_SERVICE_SUBSCHEMA_PREFIX)
092: .getSubSchema("One-Instance-Profile");
093:
094: Iterator iter = _attributesMap.keySet().iterator();
095: while (iter.hasNext()) {
096: String element = (String) iter.next();
097: Set values = (Set) _attributesMap.get(element);
098: AttributeSchema attribSchema = schema
099: .getAttributeSchema(element);
100:
101: List valueList = new ArrayList(values);
102: valueList.addAll(0, HandlerUtils
103: .updateAttributeMap(attribSchema));
104:
105: _attributesMap.put(element, valueList);
106: }
107:
108: logger.info("PSSR_CSPS_ADM_ATTRIB_HNDLRS005");
109: return _attributesMap;
110: }
111:
112: private List getAttribute(Map optionsMap) throws PSMBeanException,
113: SSOException, SMSException {
114: String instanceName = "default";
115: if (optionsMap.containsKey("gateway-profile"))
116: instanceName = (String) optionsMap.get("gateway-profile");
117:
118: _attributesMap = getGatewayServiceAttributes(instanceName,
119: "1.0");
120: String attribute = (String) optionsMap
121: .get(AttrOptionConstants.OPT_ATTR_NAME);
122: Object[] params3 = { attribute, " for the profile name -> ",
123: instanceName };
124: logger.log(Level.INFO, "PSSR_CSPS_ADM_ATTRIB_HNDLRS006",
125: params3);
126: Set s = (Set) _attributesMap.get(attribute);
127: Object[] params4 = { s };
128: logger.log(Level.INFO, "PSSR_CSPS_ADM_ATTRIB_HNDLRS007",
129: params4);
130: return new ArrayList(s);
131: }
132:
133: private void setAttribute(List values, Map optionsMap)
134: throws PSMBeanException, SSOException, SMSException {
135: Map extraInfoMap = getAddRemoveValueMap(optionsMap);
136:
137: Set addValues = (Set) extraInfoMap.get(ADD);
138: Set removeValues = (Set) extraInfoMap.get(REMOVE);
139:
140: if (addValues != null && removeValues != null) {
141: addAttributeValue(optionsMap, addValues);
142: removeAttributeValue(optionsMap, removeValues);
143: } else if (removeValues != null) {
144: removeAttributeValue(optionsMap, removeValues);
145: } else if (addValues != null) {
146: addAttributeValue(optionsMap, addValues);
147: } else {
148: setGatewayAttribute(optionsMap, values);
149: }
150:
151: }
152:
153: private void removeAttributeValue(Map optionsMap, Set removeValues)
154: throws SSOException, PSMBeanException, SMSException {
155: List attrValues = getAttribute(optionsMap);
156: Iterator iter = removeValues.iterator();
157:
158: while (iter.hasNext()) {
159: String valueToRemove = (String) iter.next();
160: if (attrValues.contains(valueToRemove))
161: attrValues.remove(valueToRemove);
162: }
163: setGatewayAttribute(optionsMap, attrValues);
164: }
165:
166: private void addAttributeValue(Map optionsMap, Set addValues)
167: throws SSOException, PSMBeanException, SMSException {
168: List attrValues = getAttribute(optionsMap);
169: Iterator iterator = addValues.iterator();
170: while (iterator.hasNext()) {
171: String valueToAdd = (String) iterator.next();
172: attrValues.add(valueToAdd);
173: }
174: setGatewayAttribute(optionsMap, attrValues);
175: }
176:
177: private void setGatewayAttribute(Map optionsMap, List values)
178: throws SSOException, SMSException {
179: String attrName = (String) optionsMap
180: .get(AttrOptionConstants.OPT_ATTR_NAME);
181: String instanceName = getProfileName(optionsMap);
182:
183: HashMap valueMap = new HashMap();
184: valueMap.put(attrName, new HashSet(values));
185: setGatewayServiceAttributes(instanceName, "1.0", valueMap);
186: }
187:
188: private String getProfileName(Map optionsMap) {
189: String instanceName = "default";
190:
191: if (optionsMap.containsKey("gateway-profile"))
192: instanceName = (String) optionsMap.get("gateway-profile");
193: return instanceName;
194: }
195:
196: private HashMap getAddRemoveValueMap(Map optionsMap) {
197: List addValues = (List) optionsMap
198: .get(AttrOptionConstants.OPT_ADD);
199: List removeValues = (List) optionsMap
200: .get(AttrOptionConstants.OPT_REMOVE);
201:
202: HashMap extraInfo = new HashMap();
203:
204: if (addValues != null)
205: extraInfo.put(DSAMEAttributeOperations.ADD, new HashSet(
206: addValues));
207:
208: if (removeValues != null)
209: extraInfo.put(DSAMEAttributeOperations.REMOVE, new HashSet(
210: removeValues));
211:
212: return extraInfo;
213: }
214:
215: public List getAttribute(String serviceName, String attrName,
216: Map extraInfo) throws Exception {
217: logger.info("PSSR_CSPS_ADM_ATTRIB_HNDLRS008");
218: return getAttribute(extraInfo);
219: }
220:
221: public void setAttribute(String serviceName, String attrName,
222: List valuesList, Map optionsMap) throws Exception {
223: logger.info("PSSR_CSPS_ADM_ATTRIB_HNDLRS009");
224: setAttribute(valuesList, optionsMap);
225: }
226:
227: public List getAllProfileNames() throws SSOException, SMSException {
228: ServiceConfigManager scm = new ServiceConfigManager(_token,
229: GATEWAY_SERVICE_NAME, "1.0");
230: Set s = scm.getGlobalConfig(null).getSubConfig(
231: GATEWAY_SERVICE_SUBSCHEMA_PREFIX).getSubConfigNames();
232: return new ArrayList(s);
233: }
234:
235: public Map listAttributes(String serviceName, Map extraInfo) {
236:
237: try {
238: return listAttributes(extraInfo);
239: } catch (SSOException e) {
240: logger.info("PSSR_CSPS_ADM_ATTRIB_HNDLRS010");
241: } catch (SMSException e) {
242: logger.info("PSSR_CSPS_ADM_ATTRIB_HNDLRS011");
243: }
244: return Collections.EMPTY_MAP;
245: }
246:
247: public Map getAttributes(String componentName, Set attrNames,
248: Map optionsMap) throws Exception {
249: String instanceName = "default";
250: if (optionsMap.containsKey("gateway-profile"))
251: instanceName = (String) optionsMap.get("gateway-profile");
252:
253: Map map = getGatewayServiceAttributes(instanceName, "1.0");
254: Iterator iterator = map.keySet().iterator();
255:
256: Map returnMap = new HashMap();
257:
258: while (iterator.hasNext()) {
259: String key = (String) iterator.next();
260: if (attrNames.contains(key)) {
261: Set value = (Set) map.get(key);
262: returnMap.put(key, new ArrayList(value));
263: }
264: }
265: return returnMap;
266: }
267:
268: // Set is called with a String->List map.
269: // IS'es set takes a String->Set map.
270: public void setAttributes(String componentName, Map nameValues,
271: Map optionsMap) throws Exception {
272: String instanceName = "default";
273: if (optionsMap.containsKey("gateway-profile"))
274: instanceName = (String) optionsMap.get("gateway-profile");
275:
276: Map newMap = new HashMap(nameValues);
277: Iterator iter = newMap.keySet().iterator();
278:
279: while (iter.hasNext()) {
280: String key = (String) iter.next();
281: List value = (List) newMap.get(key);
282: newMap.put(key, new HashSet(value));
283: }
284:
285: setGatewayServiceAttributes(instanceName, "1.0", newMap);
286: return;
287: }
288:
289: }
|