ModifySubConfiguration.java revision 31a66e0bb8b340406b1fb73b937e77088b44ced1
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose/**
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * The contents of this file are subject to the terms
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * of the Common Development and Distribution License
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * (the License). You may not use this file except in
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * compliance with the License.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * You can obtain a copy of the License at
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * https://opensso.dev.java.net/public/CDDLv1.0.html or
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * opensso/legal/CDDLv1.0.txt
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * See the License for the specific language governing
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * permission and limitations under the License.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * When distributing Covered Code, include this CDDL
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * Header Notice in each file and include the License file
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * at opensso/legal/CDDLv1.0.txt.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * If applicable, add the following below the CDDL Header,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * with the fields enclosed by brackets [] replaced by
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * your own identifying information:
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * "Portions Copyrighted [year] [name of copyright owner]"
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * $Id: ModifySubConfiguration.java,v 1.4 2008/06/25 05:42:18 qcheng Exp $
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose */
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose/*
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * Portions Copyrighted 2013 ForgeRock AS
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * Portions Copyrighted 2013 Nomura Research Institute, Ltd
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose */
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bosepackage com.sun.identity.cli.schema;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.AttributeValues;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.CLIException;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.ExitCodes;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.IArgument;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.IOutput;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.LogWriter;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.cli.RequestContext;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.iplanet.sso.SSOException;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.iplanet.sso.SSOToken;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.sm.SMSException;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.sm.SMSSchema;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.sm.ServiceConfigManager;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport com.sun.identity.sm.ServiceConfig;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.text.MessageFormat;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.util.Iterator;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.util.List;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.util.Map;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.util.Set;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.util.StringTokenizer;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Boseimport java.util.logging.Level;
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose/**
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * Modifies sub configuration.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose */
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bosepublic class ModifySubConfiguration extends SchemaCommand {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose static final String ARGUMENT_OPERATION = "operation";
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose /**
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * Services a Commandline Request.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose *
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * @param rc Request Context.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose * @throws CLIException if the request cannot serviced.
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose */
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose public void handleRequest(RequestContext rc)
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose throws CLIException {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose super.handleRequest(rc);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ldapLogin();
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String serviceName = getStringOptionValue(IArgument.SERVICE_NAME);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String subConfigName = getStringOptionValue(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose IArgument.SUB_CONFIGURATION_NAME);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String realmName = getStringOptionValue(IArgument.REALM_NAME);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String operation = getStringOptionValue(ARGUMENT_OPERATION);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String datafile = getStringOptionValue(IArgument.DATA_FILE);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose List attrValues = rc.getOption(IArgument.ATTRIBUTE_VALUES);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose if ((datafile == null) && (attrValues == null)) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose throw new CLIException(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose getResourceString("missing-attributevalues"),
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ExitCodes.INCORRECT_OPTION, rc.getSubCommand().getName());
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose }
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose Map attributeValues = AttributeValues.parse(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose getCommandManager(), datafile, attrValues);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose if ((realmName == null) || (realmName.length() == 0)) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose modifySubConfigRoot(serviceName, subConfigName, attributeValues,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose operation);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose } else {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose modifySubConfigToRealm(realmName, serviceName, subConfigName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose attributeValues, operation);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose }
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose }
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose private void modifySubConfigToRealm(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String realmName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String serviceName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String subConfigName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose Map attrValues,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String operation
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ) throws CLIException {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose SSOToken adminSSOToken = getAdminSSOToken();
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose IOutput outputWriter = getOutputWriter();
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String[] params = {realmName, subConfigName, serviceName};
35f3a213e0f0f2c60e9b5f095a05388e21092ae2Sumit Bose
35f3a213e0f0f2c60e9b5f095a05388e21092ae2Sumit Bose writeLog(LogWriter.LOG_ACCESS, Level.INFO,
35f3a213e0f0f2c60e9b5f095a05388e21092ae2Sumit Bose "ATTEMPT_MODIFY_SUB_CONFIGURATION_IN_REALM", params);
35f3a213e0f0f2c60e9b5f095a05388e21092ae2Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose try {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ServiceConfigManager scm = new ServiceConfigManager(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose serviceName, adminSSOToken);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ServiceConfig sc = scm.getOrganizationConfig(realmName, null);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose if (sc == null) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose sc = scm.createOrganizationConfig(realmName, null);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose }
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose modifySubConfig(sc, subConfigName, attrValues, operation);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ACCESS, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "SUCCEED_MODIFY_SUB_CONFIGURATION_IN_REALM", params);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose outputWriter.printlnMessage(MessageFormat.format(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose getResourceString("modify-sub-configuration-to-realm-succeed"),
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose (Object[])params));
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose } catch (SSOException e) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String[] args = {realmName, subConfigName, serviceName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose e.getMessage()};
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose debugError("ModifySubConfiguration.modifySubConfigToRealm", e);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ERROR, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "FAILED_MODIFY_SUB_CONFIGURATIONT_IN_REALM", args);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose } catch (SMSException e) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String[] args = {realmName, subConfigName, serviceName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose e.getMessage()};
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose debugError("ModifySubConfiguration.modifySubConfigToRealm", e);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ERROR, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "FAILED_MODIFY_SUB_CONFIGURATIONT_IN_REALM", args);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose }
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose }
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose private void modifySubConfigRoot(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String serviceName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String subConfigName,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose Map attrValues,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String operation
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ) throws CLIException {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose SSOToken adminSSOToken = getAdminSSOToken();
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose IOutput outputWriter = getOutputWriter();
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String[] params = {subConfigName, serviceName};
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ACCESS, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "ATTEMPT_MODIFY_SUB_CONFIGURATION", params);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose try {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ServiceConfigManager scm = new ServiceConfigManager(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose serviceName, adminSSOToken);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose ServiceConfig sc = scm.getGlobalConfig(null);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose modifySubConfig(sc, subConfigName, attrValues, operation);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ACCESS, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "SUCCEED_MODIFY_SUB_CONFIGURATION", params);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose outputWriter.printlnMessage(MessageFormat.format(
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose getResourceString("modify-sub-configuration-succeed"),
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose (Object[])params));
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose } catch (SSOException e) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String[] args = {subConfigName, serviceName, e.getMessage()};
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose debugError("ModifySubConfiguration.addSubConfigToRoot", e);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ERROR, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "FAILED_MODIFY_SUB_CONFIGURATION", args);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose } catch (SMSException e) {
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose String[] args = {subConfigName, serviceName, e.getMessage()};
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose debugError("ModifySubConfiguration.addSubConfigToRoot", e);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose writeLog(LogWriter.LOG_ERROR, Level.INFO,
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose "FAILED_MODIFY_SUB_CONFIGURATION", args);
bf6c3f07d653d474da9e43b2b7cced57fc4ea069Sumit Bose throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
}
}
private void modifySubConfig(
ServiceConfig sc,
String subConfigName,
Map attrValues,
String operation
) throws SSOException, SMSException, CLIException{
StringTokenizer st = new StringTokenizer(subConfigName, "/");
int tokenCount = st.countTokens();
for (int i = 1; i <= tokenCount; i++) {
String scn = SMSSchema.unescapeName(st.nextToken());
sc = sc.getSubConfig(scn);
if (sc == null) {
Object[] params = { subConfigName };
String msg = MessageFormat.format(
getResourceString("modify-sub-configuration-does-not-exist"),
params);
throw new CLIException(msg,
ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
}
}
if (operation.equals("set")) {
sc.setAttributes(attrValues);
} else if (operation.equals("add")) {
for (Iterator i = attrValues.keySet().iterator(); i.hasNext(); ) {
String attrName = (String)i.next();
sc.addAttribute(attrName, (Set)attrValues.get(attrName));
}
} else if (operation.equals("delete")) {
for (Iterator i = attrValues.keySet().iterator(); i.hasNext(); ) {
sc.removeAttribute((String)i.next());
}
} else {
throw new CLIException(
getResourceString("modify-sub-configuration-invalid-operation"),
ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
}
}
}