NewSchemaElementsTask.java revision e9229148425011dbe560c5e79427c350dd422112
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * CDDL HEADER START
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * The contents of this file are subject to the terms of the
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Common Development and Distribution License, Version 1.0 only
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * (the "License"). You may not use this file except in compliance
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * with the License.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * You can obtain a copy of the license at
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * trunk/opends/resource/legal-notices/OpenDS.LICENSE
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * See the License for the specific language governing permissions
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * and limitations under the License.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * When distributing Covered Code, include this CDDL HEADER in each
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * file and include the License file at
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * add the following below this CDDL HEADER, with the fields enclosed
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * by brackets "[]" replaced with your own identifying information:
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Portions Copyright [yyyy] [name of copyright owner]
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * CDDL HEADER END
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Copyright 2009 Sun Microsystems, Inc.
e9229148425011dbe560c5e79427c350dd422112ludo * Portions Copyright 2013 ForgeRock AS.
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport static org.opends.messages.AdminToolMessages.*;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.guitools.controlpanel.ui.ProgressDialog;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.guitools.controlpanel.util.Utilities;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.CommonSchemaElements;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.ExistingFileBehavior;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * An abstract class used to re-factor some code between the different tasks
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * that create elements in the schema.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<ObjectClass> ocsToAdd = new LinkedHashSet<ObjectClass>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<AttributeType> attrsToAdd = new LinkedHashSet<AttributeType>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Constructor of the task.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param info the control panel information.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param dlg the progress dialog where the task progress will be displayed.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param ocsToAdd the object classes that must be created in order.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param attrsToAdd the attributes that must be created in order.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public NewSchemaElementsTask(ControlPanelInfo info, ProgressDialog dlg,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara boolean canLaunch = true;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara (taskToBeLaunched.getType() == Task.Type.DELETE_SCHEMA_ELEMENT ||
e212f8366b401e776c8561e8ea3837c95d23c884jvergara taskToBeLaunched.getType() == Task.Type.MODIFY_SCHEMA_ELEMENT ||
e212f8366b401e776c8561e8ea3837c95d23c884jvergara taskToBeLaunched.getType() == Task.Type.NEW_SCHEMA_ELEMENT))
e212f8366b401e776c8561e8ea3837c95d23c884jvergara incompatibilityReasons.add(getIncompatibilityMessage(this,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void runTask()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String attributeName = attrsToAdd.iterator().next().getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_ATTRIBUTE_TASK_DESCRIPTION.get(attributeName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else if (ocsToAdd.size() == 1 && attrsToAdd.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String ocName = ocsToAdd.iterator().next().getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_OBJECTCLASS_TASK_DESCRIPTION.get(ocName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> attrNames = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> ocNames = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_ATTRIBUTES_TASK_DESCRIPTION.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_OBJECTCLASSES_TASK_DESCRIPTION.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_SCHEMA_ELEMENTS_TASK_DESCRIPTION.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Update the schema.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @throws OpenDsException if an error occurs.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchemaOnline() throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara // Add the schema elements one by one: we are not sure that the server
e212f8366b401e776c8561e8ea3837c95d23c884jvergara // will handle the adds sequentially if we only send one modification.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchemaOffline() throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara // Group the changes in the same schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashMap<String, List<AttributeType>> hmAttrs =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<String> allFileNames = new LinkedHashSet<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void addAttributeOnline(final AttributeType attribute)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara BasicAttribute attr = new BasicAttribute(getAttributeName(attribute));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne.toString()), ne);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressDone(ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void addObjectClassOnline(final ObjectClass objectClass)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara printEquivalentCommandLineToAddOnline(objectClass);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara BasicAttribute attr = new BasicAttribute(getAttributeName(objectClass));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne.toString()), ne);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressDone(ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getValueOnline(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getValueOffline(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String attributeWithoutFileDefinition = element.toString();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME, vs);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void printEquivalentCommandLineToAddOnline(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String equiv = getEquivalentCommandLine(getCommandLinePath("ldapmodify"),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_ATTRIBUTE_ONLINE.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_OBJECTCLASS_ONLINE.get(
e9229148425011dbe560c5e79427c350dd422112ludo sb.append("add: ").append(getAttributeName(element)).append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getAttributeName(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getFileName(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara final List<ObjectClass> objectClasses) throws OpenDsException
e9229148425011dbe560c5e79427c350dd422112ludo DirectoryServer.getEnvironmentConfig().getSchemaDirectory(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara final boolean isSchemaFileDefined = isSchemaFileDefined(fileName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara printEquivalentCommandToAddOffline(fileName, isSchemaFileDefined,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (attributes.size() == 1 && objectClasses.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String attributeName = attributes.get(0).getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else if (objectClasses.size() == 1 && attributes.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String ocName = objectClasses.get(0).getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara updateSchemaFile(fileName, isSchemaFileDefined, attributes, objectClasses);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressDone(ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void printEquivalentCommandToAddOffline(String schemaFile,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_SCHEMA_ELEMENT_OFFLINE.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append(INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_SCHEMA_ENTRY_OFFLINE.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Returns whether the file defined in the schema element exists or not.
e9229148425011dbe560c5e79427c350dd422112ludo * @param schemaFile the path to the schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @return <CODE>true</CODE> if the schema file is defined and
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * <CODE>false</CODE> otherwise.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private boolean isSchemaFileDefined(String schemaFile)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara boolean schemaDefined = false;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara reader = new LDIFReader(new LDIFImportConfig(schemaFile));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Returns the list of LDIF lines that are enough to create the entry
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * containing only the schema element associated with this task.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @return the list of LDIF lines that are enough to create the entry
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * containing only the schema element associated with this task.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Updates the contents of the schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param schemaFile the schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param isSchemaFileDefined whether the schema is defined or not.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param attributes the attributes to add.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @param objectClasses the object classes to add.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @throws OpenDsException if an error occurs updating the schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<ObjectClass> objectClasses) throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara reader = new LDIFReader(new LDIFImportConfig(schemaFile));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Modification mod = new Modification(ModificationType.ADD,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Attributes.create(getAttributeName(attribute).toLowerCase(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Modification mod = new Modification(ModificationType.ADD,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Attributes.create(getAttributeName(oc).toLowerCase(),
e9229148425011dbe560c5e79427c350dd422112ludo ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t.toString()), t);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getAttributeName(attribute)+": "+getValueOffline(attribute));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add(getAttributeName(oc)+": "+getValueOffline(oc));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara exportConfig.getWriter(), exportConfig.getWrapColumn() > 1,