0066eddda7203f6345b56f77d146a759298dc635gryzor/**
0066eddda7203f6345b56f77d146a759298dc635gryzor * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0066eddda7203f6345b56f77d146a759298dc635gryzor *
dbf005d9197b5918404a963cb0e9caf410c7059flgentis * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
0066eddda7203f6345b56f77d146a759298dc635gryzor *
0066eddda7203f6345b56f77d146a759298dc635gryzor * The contents of this file are subject to the terms
0066eddda7203f6345b56f77d146a759298dc635gryzor * of the Common Development and Distribution License
0066eddda7203f6345b56f77d146a759298dc635gryzor * (the License). You may not use this file except in
0066eddda7203f6345b56f77d146a759298dc635gryzor * compliance with the License.
0066eddda7203f6345b56f77d146a759298dc635gryzor *
0066eddda7203f6345b56f77d146a759298dc635gryzor * You can obtain a copy of the License at
0066eddda7203f6345b56f77d146a759298dc635gryzor * https://opensso.dev.java.net/public/CDDLv1.0.html or
0066eddda7203f6345b56f77d146a759298dc635gryzor * opensso/legal/CDDLv1.0.txt
0066eddda7203f6345b56f77d146a759298dc635gryzor * See the License for the specific language governing
0066eddda7203f6345b56f77d146a759298dc635gryzor * permission and limitations under the License.
0066eddda7203f6345b56f77d146a759298dc635gryzor *
0066eddda7203f6345b56f77d146a759298dc635gryzor * When distributing Covered Code, include this CDDL
0066eddda7203f6345b56f77d146a759298dc635gryzor * Header Notice in each file and include the License file
0066eddda7203f6345b56f77d146a759298dc635gryzor * at opensso/legal/CDDLv1.0.txt.
0066eddda7203f6345b56f77d146a759298dc635gryzor * If applicable, add the following below the CDDL Header,
0066eddda7203f6345b56f77d146a759298dc635gryzor * with the fields enclosed by brackets [] replaced by
0066eddda7203f6345b56f77d146a759298dc635gryzor * your own identifying information:
0066eddda7203f6345b56f77d146a759298dc635gryzor * "Portions Copyrighted [year] [name of copyright owner]"
0066eddda7203f6345b56f77d146a759298dc635gryzor *
0066eddda7203f6345b56f77d146a759298dc635gryzor * $Id: AddAttributeSchema.java,v 1.4 2008/06/25 05:42:17 qcheng Exp $
0066eddda7203f6345b56f77d146a759298dc635gryzor *
0066eddda7203f6345b56f77d146a759298dc635gryzor */
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis
0066eddda7203f6345b56f77d146a759298dc635gryzorpackage com.sun.identity.cli.schema;
0066eddda7203f6345b56f77d146a759298dc635gryzor
0066eddda7203f6345b56f77d146a759298dc635gryzor
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.iplanet.sso.SSOException;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.cli.CLIConstants;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.cli.CLIException;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.cli.CommandManager;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.cli.Debugger;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentisimport com.sun.identity.cli.ExitCodes;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.cli.IArgument;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.cli.IOutput;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentisimport com.sun.identity.cli.LogWriter;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentisimport com.sun.identity.cli.RequestContext;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport com.sun.identity.sm.SMSException;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentisimport com.sun.identity.sm.ServiceSchema;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentisimport java.io.ByteArrayInputStream;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport java.io.FileInputStream;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentisimport java.io.IOException;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport java.util.Iterator;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport java.util.List;
0066eddda7203f6345b56f77d146a759298dc635gryzorimport java.util.logging.Level;
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis/**
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis * Adds attribute schema command.
0066eddda7203f6345b56f77d146a759298dc635gryzor */
e1f52108da39e2914eb8941eca6257f6588e07b0lgentispublic class AddAttributeSchema extends SchemaCommand {
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis static final String ARGUMENT_SCHEMA_FILES = "attributeschemafile";
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis /**
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis * Services a Commandline Request.
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis *
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis * @param rc Request Context.
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis * @throws CLIException if the request cannot serviced.
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis */
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis public void handleRequest(RequestContext rc)
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis throws CLIException {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis super.handleRequest(rc);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis ldapLogin();
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis List listContinues = (List)rc.getOption(IArgument.CONTINUE);
0066eddda7203f6345b56f77d146a759298dc635gryzor boolean continueFlag = (listContinues != null);
0066eddda7203f6345b56f77d146a759298dc635gryzor IOutput outputWriter = getOutputWriter();
0066eddda7203f6345b56f77d146a759298dc635gryzor List fileNames = (List)rc.getOption(ARGUMENT_SCHEMA_FILES);
0066eddda7203f6345b56f77d146a759298dc635gryzor String serviceName = getStringOptionValue(IArgument.SERVICE_NAME);
0066eddda7203f6345b56f77d146a759298dc635gryzor String schemaType = getStringOptionValue(IArgument.SCHEMA_TYPE);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis ServiceSchema ss = getServiceSchema();
0066eddda7203f6345b56f77d146a759298dc635gryzor
0066eddda7203f6345b56f77d146a759298dc635gryzor CommandManager mgr = getCommandManager();
0066eddda7203f6345b56f77d146a759298dc635gryzor String url = mgr.getWebEnabledURL();
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis if ((url != null) && (url.length() > 0)) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis String[] param = {CLIConstants.WEB_INPUT};
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis writeLog(LogWriter.LOG_ACCESS, Level.INFO,
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis "ATTEMPT_ADD_ATTRIBUTE_SCHEMA", param);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis addAttributeSchemaXML(ss, serviceName, schemaType,
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis (String)fileNames.iterator().next());
0066eddda7203f6345b56f77d146a759298dc635gryzor outputWriter.printlnMessage(getResourceString(
0066eddda7203f6345b56f77d146a759298dc635gryzor "attribute-schema-added"));
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis writeLog(LogWriter.LOG_ACCESS, Level.INFO,
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis "SUCCEED_ADD_ATTRIBUTE_SCHEMA", param);
0066eddda7203f6345b56f77d146a759298dc635gryzor } else {
0066eddda7203f6345b56f77d146a759298dc635gryzor for (Iterator i = fileNames.iterator(); i.hasNext(); ) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis String name = (String)i.next();
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis String[] param = {serviceName, schemaType, name};
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis
0066eddda7203f6345b56f77d146a759298dc635gryzor try {
0066eddda7203f6345b56f77d146a759298dc635gryzor writeLog(LogWriter.LOG_ACCESS, Level.INFO,
0066eddda7203f6345b56f77d146a759298dc635gryzor "ATTEMPT_ADD_ATTRIBUTE_SCHEMA", param);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis addAttributeSchema(ss, serviceName, schemaType, name);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis outputWriter.printlnMessage(
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis getResourceString("attribute-schema-added"));
0066eddda7203f6345b56f77d146a759298dc635gryzor writeLog(LogWriter.LOG_ACCESS, Level.INFO,
5afb587bf5f22668d06e92e49b4ff0522f1cb79algentis "SUCCEED_ADD_ATTRIBUTE_SCHEMA", param);
dbf005d9197b5918404a963cb0e9caf410c7059flgentis } catch (CLIException e) {
dbf005d9197b5918404a963cb0e9caf410c7059flgentis if (continueFlag) {
5afb587bf5f22668d06e92e49b4ff0522f1cb79algentis outputWriter.printlnError(
0066eddda7203f6345b56f77d146a759298dc635gryzor getResourceString("add-attribute-schema-failed") +
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis e.getMessage());
0066eddda7203f6345b56f77d146a759298dc635gryzor if (isVerbose()) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis outputWriter.printlnError(Debugger.getStackTrace(e));
0066eddda7203f6345b56f77d146a759298dc635gryzor }
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis } else {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis throw e;
0066eddda7203f6345b56f77d146a759298dc635gryzor }
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis }
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis }
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis }
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis }
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis private void addAttributeSchemaXML(
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis ServiceSchema ss,
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis String serviceName,
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis String schemaType,
0066eddda7203f6345b56f77d146a759298dc635gryzor String xml
0066eddda7203f6345b56f77d146a759298dc635gryzor ) throws CLIException {
0066eddda7203f6345b56f77d146a759298dc635gryzor ByteArrayInputStream bis = null;
0066eddda7203f6345b56f77d146a759298dc635gryzor try {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis bis = new ByteArrayInputStream(xml.getBytes());
0066eddda7203f6345b56f77d146a759298dc635gryzor ss.addAttributeSchema(bis);
e1f52108da39e2914eb8941eca6257f6588e07b0lgentis } catch (SSOException e) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis String[] args = {CLIConstants.WEB_INPUT, schemaType, xml,
0066eddda7203f6345b56f77d146a759298dc635gryzor e.getMessage()};
0066eddda7203f6345b56f77d146a759298dc635gryzor writeLog(LogWriter.LOG_ACCESS, Level.INFO,
0066eddda7203f6345b56f77d146a759298dc635gryzor "FAILED_ADD_ATTRIBUTE_SCHEMA", args);
0066eddda7203f6345b56f77d146a759298dc635gryzor throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
0066eddda7203f6345b56f77d146a759298dc635gryzor } catch (SMSException e) {
0066eddda7203f6345b56f77d146a759298dc635gryzor String[] args = {CLIConstants.WEB_INPUT, schemaType, xml,
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis e.getMessage()};
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis writeLog(LogWriter.LOG_ACCESS, Level.INFO,
0066eddda7203f6345b56f77d146a759298dc635gryzor "FAILED_ADD_ATTRIBUTE_SCHEMA", args);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
0066eddda7203f6345b56f77d146a759298dc635gryzor } finally {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis if (bis != null) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis try {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis bis.close();
0066eddda7203f6345b56f77d146a759298dc635gryzor } catch (IOException ie) {
5afb587bf5f22668d06e92e49b4ff0522f1cb79algentis //ignore if file input stream cannot be closed.
dbf005d9197b5918404a963cb0e9caf410c7059flgentis }
5afb587bf5f22668d06e92e49b4ff0522f1cb79algentis }
0066eddda7203f6345b56f77d146a759298dc635gryzor }
ee93e5f676dff5e42f52a2de815f52745f6868b3lgentis }
0066eddda7203f6345b56f77d146a759298dc635gryzor
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis private void addAttributeSchema(
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis ServiceSchema ss,
ee93e5f676dff5e42f52a2de815f52745f6868b3lgentis String serviceName,
0066eddda7203f6345b56f77d146a759298dc635gryzor String schemaType,
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis String fileName
0066eddda7203f6345b56f77d146a759298dc635gryzor ) throws CLIException {
0066eddda7203f6345b56f77d146a759298dc635gryzor FileInputStream fis = null;
0066eddda7203f6345b56f77d146a759298dc635gryzor try {
0066eddda7203f6345b56f77d146a759298dc635gryzor fis = new FileInputStream(fileName);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis ss.addAttributeSchema(fis);
0066eddda7203f6345b56f77d146a759298dc635gryzor } catch (IOException e) {
d28e54f867ab1292ce75324d90680396c1d5f47dlgentis String[] args = {serviceName, schemaType, fileName, e.getMessage()};
dbf005d9197b5918404a963cb0e9caf410c7059flgentis writeLog(LogWriter.LOG_ACCESS, Level.INFO,
d28e54f867ab1292ce75324d90680396c1d5f47dlgentis "FAILED_ADD_ATTRIBUTE_SCHEMA", args);
0066eddda7203f6345b56f77d146a759298dc635gryzor throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis } catch (SMSException e) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis String[] args = {serviceName, schemaType, fileName, e.getMessage()};
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis writeLog(LogWriter.LOG_ACCESS, Level.INFO,
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis "FAILED_ADD_ATTRIBUTE_SCHEMA", args);
0066eddda7203f6345b56f77d146a759298dc635gryzor throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis } catch (SSOException e) {
0066eddda7203f6345b56f77d146a759298dc635gryzor String[] args = {serviceName, schemaType, fileName, e.getMessage()};
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis writeLog(LogWriter.LOG_ACCESS, Level.INFO,
0066eddda7203f6345b56f77d146a759298dc635gryzor "FAILED_ADD_ATTRIBUTE_SCHEMA", args);
0066eddda7203f6345b56f77d146a759298dc635gryzor throw new CLIException(e, ExitCodes.REQUEST_CANNOT_BE_PROCESSED);
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis } finally {
0066eddda7203f6345b56f77d146a759298dc635gryzor if (fis != null) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis try {
0066eddda7203f6345b56f77d146a759298dc635gryzor fis.close();
0066eddda7203f6345b56f77d146a759298dc635gryzor } catch (IOException ie) {
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis //igore if file input stream cannot be closed.
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis }
0066eddda7203f6345b56f77d146a759298dc635gryzor }
8cf362f300047e397e95acfab0b69ef7a6f3d93clgentis }
0066eddda7203f6345b56f77d146a759298dc635gryzor }
5afb587bf5f22668d06e92e49b4ff0522f1cb79algentis}
dbf005d9197b5918404a963cb0e9caf410c7059flgentis