/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: IdRepoSampleCreateId.java,v 1.15 2008/09/24 19:50:10 goodearth Exp $ * */ package com.sun.identity.samples.clientsdk.idrepo; import java.io.*; import java.util.*; import com.iplanet.sso.SSOException; import com.sun.identity.idm.AMIdentity; import com.sun.identity.idm.AMIdentityRepository; import com.sun.identity.idm.IdRepoException; import com.sun.identity.idm.IdSearchControl; import com.sun.identity.idm.IdSearchOpModifier; import com.sun.identity.idm.IdSearchResults; import com.sun.identity.idm.IdType; /** * This class * * * @author */ public class IdRepoSampleCreateId { IdRepoSampleUtils sampleUtils = null; AMIdentityRepository idRepo = null; private static final String AGENT_TYPE_ATTR = "AgentType"; private static final String WSP_ENDPOINT = "WSPEndpoint"; public IdRepoSampleCreateId (AMIdentityRepository idrepo) { sampleUtils = new IdRepoSampleUtils(); idRepo = idrepo; } public void createAMId () { /* * just create the identities with this selection. * to "exercise" identities, use the * "search identities" selection to find one to * exercise. */ IdType idtype = sampleUtils.getIdTypeToCreateOrDelete(); if (idtype == null) { return; } IdType tmpIdtype = idtype; if (idtype.equals(IdType.AGENT)) { tmpIdtype = IdType.AGENTONLY; } try { /* * get and display list of identities of idtype * for reference... */ IdSearchResults adRes = idRepo.searchIdentities(tmpIdtype, "*", new IdSearchControl()); Set adResSet = adRes.getSearchResults(); if (!adResSet.isEmpty()) { System.out.println(" Current list of " + idtype.getName() + "s:"); for (Iterator it = adResSet.iterator(); it.hasNext(); ) { System.out.println("\t" + ((AMIdentity)it.next()).getName()); } } else { System.out.println(" No " + idtype.getName() + "s found."); } String idName = sampleUtils.getLine("Enter idName to create: "); Map attrs = new HashMap(); Set vals = new HashSet(); AMIdentity tmpId = null; if (idtype.equals(IdType.AGENT)) { String tmpS = sampleUtils.getLine(idName + "'s password: "); vals = new HashSet(); vals.add(tmpS); attrs.put("userpassword", vals); tmpId = idRepo.createIdentity(IdType.AGENTONLY, idName, attrs); idtype = IdType.AGENTONLY; } else if (idtype.equals(IdType.AGENTONLY) || idtype.equals(IdType.AGENTGROUP)) { String tmpS = sampleUtils.getLine(idName + "'s agentType: "); vals.add(tmpS); attrs.put(AGENT_TYPE_ATTR, vals); tmpS = sampleUtils.getLine(idName + "'s password: "); vals = new HashSet(); vals.add(tmpS); attrs.put("userpassword", vals); tmpId = idRepo.createIdentity(idtype, idName, attrs); } else if (idtype.equals(IdType.USER)) { String tmpS = sampleUtils.getLine(idName + "'s password: "); vals.add(tmpS); attrs.put("userpassword", vals); vals = new HashSet(); tmpS = sampleUtils.getLine(idName + "'s last name: "); vals.add(tmpS); attrs.put("sn", vals); vals = new HashSet(); vals.add(idName + " " + tmpS); attrs.put("cn", vals); vals = new HashSet(); vals.add(idName); attrs.put("givenname", vals); // "full name" tmpId = idRepo.createIdentity(IdType.USER, idName, attrs); } else if (idtype.equals(IdType.REALM)) { String tmpS = sampleUtils.getLine( idName + " active/inactive [a,i]: "); String actVal = "Active"; if (tmpS.startsWith("i")) { actVal = "Inactive"; } vals.add(actVal); attrs.put("sunOrganizationStatus", vals); tmpId = idRepo.createIdentity(IdType.REALM, idName, attrs); } // identity should exist, since it was just created if (tmpId != null) { System.out.println(" Created " + idtype.getName() + " identity '" + idName + "' isExists = " + tmpId.isExists()); // now show list of the identities of type created adRes = idRepo.searchIdentities( idtype, "*", new IdSearchControl()); adResSet = adRes.getSearchResults(); if (!adResSet.isEmpty()) { System.out.println(" Current list of " + idtype.getName() + "s:"); for (Iterator it = adResSet.iterator(); it.hasNext(); ) { System.out.println("\t" + ((AMIdentity)it.next()).getName()); } } else { System.out.println(" Odd, no " + idtype.getName() + "s found."); } IdSearchControl WSCcontrol = new IdSearchControl(); String providerName = idName; WSCcontrol.setAllReturnAttributes(true); IdSearchResults WSCresults = idRepo.searchIdentities( IdType.AGENTONLY, providerName, WSCcontrol); Set agents = WSCresults.getSearchResults(); System.out.println("WSC Agents before removeMember: " + agents); if (idtype.equals(IdType.AGENTONLY) || idtype.equals(IdType.AGENTGROUP)) { String POLLINT = "com.sun.am.policy.am.polling.interval"; // now get the attributes of the identities of type created Map attrMap = null; String name = null; String type = null; name = tmpId.getName(); attrMap = tmpId.getAttributes(); if (!attrMap.isEmpty()) { Set keySet = attrMap.keySet(); for (Iterator it = keySet.iterator(); it.hasNext(); ) { String key = (String)it.next(); if (key.equalsIgnoreCase(POLLINT)) { System.out.println("Value before " + "removeAttribute: " + POLLINT + "=" + attrMap.get(POLLINT)); Set attrNameSet = null; attrNameSet = new HashSet(); attrNameSet.add(key); System.out.println("Attribute to remove :"+key); tmpId.removeAttributes(attrNameSet); } if (key.equalsIgnoreCase("userpassword")) { System.out.println("Value check for pwd " + "userpassword =" + attrMap.get("userpassword")); } } } else { System.out.println (name + " has no attributes."); } // get/check after remove attrMap = tmpId.getAttributes(); if (!attrMap.isEmpty()) { System.out.println ("Has key after removeAttribute : "+ POLLINT + " : true/false :" + attrMap.keySet().contains(POLLINT)); if (attrMap.keySet().contains(POLLINT)) { System.out.println ("Value after removeAttribute : "+ POLLINT + "=" + attrMap.get(POLLINT)); } } vals = new HashSet(); vals.add("WebAgent"); attrs.put(AGENT_TYPE_ATTR, vals); AMIdentity agroupIdentity = null; if (!((tmpId.getType()).equals(IdType.AGENTGROUP))) { System.out.println("\nChecking membership operations"); IdSearchResults res = idRepo.searchIdentities(IdType.AGENTGROUP, "myagrp", new IdSearchControl()); Set resSet = res.getSearchResults(); if (!resSet.isEmpty()) { Iterator iter = resSet.iterator(); if (iter.hasNext()) { agroupIdentity = (AMIdentity) iter.next(); } } else { agroupIdentity = idRepo.createIdentity( IdType.AGENTGROUP, "myagrp", attrs); } // Test for getMembers() System.out.println("Obtained agent group =" + agroupIdentity.getName()); System.out.println("\nAdding member to agent group: " + tmpId.getName()); agroupIdentity.addMember(tmpId); System.out.println("\nGetting member from agent "+ "group: " + agroupIdentity.getMembers(IdType.AGENTONLY)); // Test for getMemberships() Set agentgroupsOfAgent = tmpId.getMemberships(IdType.AGENTGROUP); System.out.println("Agent's agentGroup memberships = "); Iterator agiter = agentgroupsOfAgent.iterator(); while (agiter.hasNext() ){ AMIdentity id = (AMIdentity) agiter.next(); System.out.println("AgentGroup of agent = " + id.getName()); System.out.println("AgentGroup of agent "+ "isExists: " + id.isExists()); } System.out.println("\nRemoving member from agent "+ "group: " + tmpId.getName()); agroupIdentity.removeMember(tmpId); System.out.println("\nAfter removeMember : Getting "+ "member from agent group: " + agroupIdentity.getMembers(IdType.AGENTONLY)); } } IdSearchControl WSCcnt = new IdSearchControl(); WSCcnt.setAllReturnAttributes(true); IdSearchResults WSCres = idRepo.searchIdentities( IdType.AGENTONLY, providerName, WSCcnt); Set wscagents = WSCres.getSearchResults(); System.out.println("WSC Agents after removeMember: " + wscagents); // Test for avpairs filter while searching.. IdSearchControl avcontrol = new IdSearchControl(); avcontrol.setAllReturnAttributes(true); avcontrol.setTimeOut(0); Map kvPairMap = new HashMap(); Set avset = new HashSet(); avset.add("WSCAgent"); kvPairMap.put(AGENT_TYPE_ATTR, avset); avcontrol.setSearchModifiers(IdSearchOpModifier.OR, kvPairMap); IdSearchResults avresults = idRepo.searchIdentities(IdType.AGENTONLY, "*", avcontrol); Set avagents = avresults.getSearchResults(); System.out.println("WSC Agents with avpairs as filter: " + avagents); // Test : Search for WSPAgent type with its WSP End point // attribute value known. This search should not return // multiple WSP profies instead should return just one that // has given WSP end point attribute value. IdSearchControl wspcontrol = new IdSearchControl(); wspcontrol.setAllReturnAttributes(true); wspcontrol.setTimeOut(0); Map wspkvPairMap = new HashMap(); Set wspset = new HashSet(); wspset.add("WSPAgent"); wspkvPairMap.put(AGENT_TYPE_ATTR, wspset); wspset = new HashSet(); //String endpoint = "default"; String endpoint = "testendpoint1"; wspset.add(endpoint); wspkvPairMap.put(WSP_ENDPOINT, wspset); wspcontrol.setSearchModifiers(IdSearchOpModifier.OR, wspkvPairMap); IdSearchResults wspresults = idRepo.searchIdentities(IdType.AGENTONLY,"*", wspcontrol); Set wspagents = wspresults.getSearchResults(); System.out.println("WSP Agents with avpairs as filter: " + wspagents); } } catch (IdRepoException ire) { System.err.println("idRepoProcessing IdRepoException " + "creating '" + idtype + "': " + ire.getMessage()); } catch (SSOException ssoe) { System.err.println("idRepoProcessing: SSOException " + "creating '" + idtype + "': " + ssoe.getMessage()); } return; } }