e212f8366b401e776c8561e8ea3837c95d23c884jvergara/*
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * CDDL HEADER START
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
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 *
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * or http://forgerock.org/license/CDDLv1.0.html.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * See the License for the specific language governing permissions
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * and limitations under the License.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * When distributing Covered Code, include this CDDL HEADER in each
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * file and include the License file at legal-notices/CDDLv1_0.txt.
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * If applicable, add the following below this CDDL HEADER, with the
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * fields enclosed by brackets "[]" replaced with your own identifying
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * information:
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Portions Copyright [yyyy] [name of copyright owner]
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * CDDL HEADER END
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Copyright 2009 Sun Microsystems, Inc.
e9229148425011dbe560c5e79427c350dd422112ludo * Portions Copyright 2013 ForgeRock AS.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergarapackage org.opends.guitools.controlpanel.task;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport static org.opends.messages.AdminToolMessages.*;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.io.File;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.ArrayList;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.Collection;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.Collections;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.LinkedHashMap;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.LinkedHashSet;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.List;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport java.util.Set;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport javax.naming.NamingException;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport javax.naming.directory.BasicAttribute;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport javax.naming.directory.DirContext;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport javax.naming.directory.ModificationItem;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport javax.swing.SwingUtilities;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
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.messages.Message;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.quicksetup.util.Utils;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.config.ConfigConstants;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.core.DirectoryServer;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.AttributeType;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.Attributes;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.CommonSchemaElements;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.Entry;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.ExistingFileBehavior;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.LDIFExportConfig;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.LDIFImportConfig;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.Modification;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.ModificationType;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.ObjectClass;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.types.OpenDsException;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.util.LDIFReader;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.util.LDIFWriter;
e212f8366b401e776c8561e8ea3837c95d23c884jvergaraimport org.opends.server.util.ServerConstants;
e9229148425011dbe560c5e79427c350dd422112ludoimport org.opends.server.util.StaticUtils;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara/**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * An abstract class used to re-factor some code between the different tasks
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * that create elements in the schema.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergarapublic class NewSchemaElementsTask extends Task
e212f8366b401e776c8561e8ea3837c95d23c884jvergara{
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<ObjectClass> ocsToAdd = new LinkedHashSet<ObjectClass>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<AttributeType> attrsToAdd = new LinkedHashSet<AttributeType>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
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 */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public NewSchemaElementsTask(ControlPanelInfo info, ProgressDialog dlg,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<ObjectClass> ocsToAdd,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<AttributeType> attrsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara super(info, dlg);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara this.ocsToAdd.addAll(ocsToAdd);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara this.attrsToAdd.addAll(attrsToAdd);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public Set<String> getBackends()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return Collections.emptySet();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public boolean canLaunch(Task taskToBeLaunched,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Collection<Message> incompatibilityReasons)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara boolean canLaunch = true;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (state == State.RUNNING &&
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 {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara incompatibilityReasons.add(getIncompatibilityMessage(this,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara taskToBeLaunched));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara canLaunch = false;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return canLaunch;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void runTask()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara state = State.RUNNING;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lastException = null;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara try
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara updateSchema();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara state = State.FINISHED_SUCCESSFULLY;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara catch (Throwable t)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lastException = t;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara state = State.FINISHED_WITH_ERROR;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public Type getType()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return Type.NEW_SCHEMA_ELEMENT;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public Message getTaskDescription()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (attrsToAdd.size() == 1 && ocsToAdd.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String attributeName = attrsToAdd.iterator().next().getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_ATTRIBUTE_TASK_DESCRIPTION.get(attributeName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else if (ocsToAdd.size() == 1 && attrsToAdd.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String ocName = ocsToAdd.iterator().next().getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_OBJECTCLASS_TASK_DESCRIPTION.get(ocName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> attrNames = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attribute : attrsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attrNames.add(attribute.getNameOrOID());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> ocNames = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : ocsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ocNames.add(oc.getNameOrOID());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (ocNames.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_ATTRIBUTES_TASK_DESCRIPTION.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utils.getStringFromCollection(attrNames, ", "));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else if (attrNames.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_OBJECTCLASSES_TASK_DESCRIPTION.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utils.getStringFromCollection(ocNames, ", "));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return INFO_CTRL_PANEL_NEW_SCHEMA_ELEMENTS_TASK_DESCRIPTION.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utils.getStringFromCollection(attrNames, ", "),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utils.getStringFromCollection(ocNames, ", "));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Update the schema.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * @throws OpenDsException if an error occurs.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchema() throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (isServerRunning())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara updateSchemaOnline();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara updateSchemaOffline();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara protected String getCommandLinePath()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return null;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara protected List<String> getCommandLineArguments()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return Collections.emptyList();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchemaOnline() throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
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 for (AttributeType attr : attrsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara addAttributeOnline(attr);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : ocsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara addObjectClassOnline(oc);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchemaOffline() throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara // Group the changes in the same schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashMap<String, List<AttributeType>> hmAttrs =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara new LinkedHashMap<String, List<AttributeType>>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attr : attrsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String fileName = getFileName(attr);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (fileName == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara fileName = "";
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<AttributeType> attrs = hmAttrs.get(fileName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (attrs == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attrs = new ArrayList<AttributeType>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara hmAttrs.put(fileName, attrs);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attrs.add(attr);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashMap<String, List<ObjectClass>> hmOcs =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara new LinkedHashMap<String, List<ObjectClass>>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : ocsToAdd)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String fileName = getFileName(oc);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (fileName == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara fileName = "";
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<ObjectClass> ocs = hmOcs.get(fileName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (ocs == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ocs = new ArrayList<ObjectClass>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara hmOcs.put(fileName, ocs);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ocs.add(oc);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LinkedHashSet<String> allFileNames = new LinkedHashSet<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara allFileNames.addAll(hmAttrs.keySet());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara allFileNames.addAll(hmOcs.keySet());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (String fileName : allFileNames)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<AttributeType> attrs = hmAttrs.get(fileName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<ObjectClass> ocs = hmOcs.get(fileName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (attrs == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attrs = Collections.emptyList();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (ocs == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ocs = Collections.emptyList();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (fileName.equals(""))
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara fileName = null;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara updateSchemaOffline(fileName, attrs, ocs);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont("<br><br>",
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void addAttributeOnline(final AttributeType attribute)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara printEquivalentCommandLineToAddOnline(attribute);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressWithPoints(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_CREATING_ATTRIBUTE_PROGRESS.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attribute.getNameOrOID()),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara try
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara BasicAttribute attr = new BasicAttribute(getAttributeName(attribute));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attr.add(getValueOnline(attribute));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attr);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getInfo().getDirContext().modifyAttributes(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara new ModificationItem[] { mod });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara catch (NamingException ne)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara throw new OnlineUpdateException(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne.toString()), ne);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara notifyConfigurationElementCreated(attribute);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressDone(ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void addObjectClassOnline(final ObjectClass objectClass)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara printEquivalentCommandLineToAddOnline(objectClass);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressWithPoints(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_CREATING_OBJECTCLASS_PROGRESS.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara objectClass.getNameOrOID()),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara try
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara BasicAttribute attr = new BasicAttribute(getAttributeName(objectClass));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attr.add(getValueOnline(objectClass));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ModificationItem mod = new ModificationItem(DirContext.ADD_ATTRIBUTE,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attr);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getInfo().getDirContext().modifyAttributes(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ConfigConstants.DN_DEFAULT_SCHEMA_ROOT,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara new ModificationItem[] { mod });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara catch (NamingException ne)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara throw new OnlineUpdateException(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(ne.toString()), ne);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara notifyConfigurationElementCreated(objectClass);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressDone(ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getValueOnline(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return element.toString();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getValueOffline(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Iterable<String> previousValues =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara (String)null);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String attributeWithoutFileDefinition = element.toString();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (previousValues != null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> vs = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (String s : previousValues)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara vs.add(s);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (!vs.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.setExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME, vs);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return attributeWithoutFileDefinition;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void printEquivalentCommandLineToAddOnline(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> args = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara args.add("-a");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara args.addAll(getObfuscatedCommandLineArguments(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getConnectionCommandLineArguments(true, true)));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara args.add(getNoPropertiesFileArgument());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String equiv = getEquivalentCommandLine(getCommandLinePath("ldapmodify"),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara args);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara StringBuilder sb = new StringBuilder();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Message msg;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (element instanceof AttributeType)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_ATTRIBUTE_ONLINE.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.getNameOrOID());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_OBJECTCLASS_ONLINE.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.getNameOrOID());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e9229148425011dbe560c5e79427c350dd422112ludo sb.append(msg).append("<br><b>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append(equiv);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("dn: cn=schema<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("changetype: modify<br>");
e9229148425011dbe560c5e79427c350dd422112ludo sb.append("add: ").append(getAttributeName(element)).append("<br>");
e9229148425011dbe560c5e79427c350dd422112ludo sb.append(getAttributeName(element)).append(": ")
e9229148425011dbe560c5e79427c350dd422112ludo .append(getValueOnline(element));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("</b><br><br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getAttributeName(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (element instanceof AttributeType)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return ConfigConstants.ATTR_ATTRIBUTE_TYPES;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return ConfigConstants.ATTR_OBJECTCLASSES;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private String getFileName(CommonSchemaElements element)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String value = null;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Iterable<String> vs =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara element.getExtraProperty(ServerConstants.SCHEMA_PROPERTY_FILENAME);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (vs != null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (vs.iterator().hasNext())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara value = vs.iterator().next();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return value;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchemaOffline(String file,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara final List<AttributeType> attributes,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara final List<ObjectClass> objectClasses) throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (file == null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara file = ConfigConstants.FILE_USER_SCHEMA_ELEMENTS;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara File f = new File(file);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (!f.isAbsolute())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara f = new File(
e9229148425011dbe560c5e79427c350dd422112ludo DirectoryServer.getEnvironmentConfig().getSchemaDirectory(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara file);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e9229148425011dbe560c5e79427c350dd422112ludo final String fileName = f.getAbsolutePath();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara final boolean isSchemaFileDefined = isSchemaFileDefined(fileName);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * {@inheritDoc}
e212f8366b401e776c8561e8ea3837c95d23c884jvergara */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara printEquivalentCommandToAddOffline(fileName, isSchemaFileDefined,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attributes, objectClasses);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (attributes.size() == 1 && objectClasses.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String attributeName = attributes.get(0).getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressWithPoints(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_CREATING_ATTRIBUTE_PROGRESS.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara attributeName),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else if (objectClasses.size() == 1 && attributes.isEmpty())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara String ocName = objectClasses.get(0).getNameOrOID();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressWithPoints(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_CREATING_OBJECTCLASS_PROGRESS.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ocName),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressWithPoints(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_UPDATING_SCHEMA_FILE_PROGRESS.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara fileName),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara updateSchemaFile(fileName, isSchemaFileDefined, attributes, objectClasses);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attr : attributes)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara notifyConfigurationElementCreated(attr);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara notifyConfigurationElementCreated(oc);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara SwingUtilities.invokeLater(new Runnable()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara public void run()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utilities.getProgressDone(ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara });
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void printEquivalentCommandToAddOffline(String schemaFile,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara boolean isSchemaFileDefined,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<AttributeType> attributes,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<ObjectClass> objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> names = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attr : attributes)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara names.add(attr.getNameOrOID());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara names.add(oc.getNameOrOID());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (isSchemaFileDefined)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara StringBuilder sb = new StringBuilder();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_SCHEMA_ELEMENT_OFFLINE.get(
e9229148425011dbe560c5e79427c350dd422112ludo Utils.getStringFromCollection(names, ", "),
e9229148425011dbe560c5e79427c350dd422112ludo schemaFile))
e9229148425011dbe560c5e79427c350dd422112ludo .append("<br><b>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attribute : attributes)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo sb.append(getAttributeName(attribute)).append(": ")
e9229148425011dbe560c5e79427c350dd422112ludo .append(getValueOffline(attribute)).append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo sb.append(getAttributeName(oc)).append(": ")
e9229148425011dbe560c5e79427c350dd422112ludo .append(getValueOffline(oc)).append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("</b><br><br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara StringBuilder sb = new StringBuilder();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append(INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_SCHEMA_ENTRY_OFFLINE.get(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Utils.getStringFromCollection(names, ", "),
e9229148425011dbe560c5e79427c350dd422112ludo schemaFile)).append("<br><b>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (String line : getSchemaEntryLines())
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append(line);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attribute : attributes)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo sb.append(getAttributeName(attribute)).append(": ")
e9229148425011dbe560c5e79427c350dd422112ludo .append(getValueOffline(attribute)).append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo sb.append(getAttributeName(oc)).append(": ")
e9229148425011dbe560c5e79427c350dd422112ludo .append(getValueOffline(oc)).append("<br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara sb.append("</b><br><br>");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getProgressDialog().appendProgressHtml(Utilities.applyFont(sb.toString(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ColorAndFontConstants.progressFont));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
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 */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private boolean isSchemaFileDefined(String schemaFile)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara boolean schemaDefined = false;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LDIFReader reader = null;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara try
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara reader = new LDIFReader(new LDIFImportConfig(schemaFile));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Entry entry = reader.readEntry();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (entry != null)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara schemaDefined = true;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara catch (Throwable t)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara finally
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo StaticUtils.close(reader);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e9229148425011dbe560c5e79427c350dd422112ludo
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return schemaDefined;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
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 */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private ArrayList<String> getSchemaEntryLines()
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> lines = new ArrayList<String>();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add("dn: cn=schema");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add("objectClass: top");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add("objectClass: ldapSubentry");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add("objectClass: subschema");
e212f8366b401e776c8561e8ea3837c95d23c884jvergara return lines;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara /**
e212f8366b401e776c8561e8ea3837c95d23c884jvergara * Updates the contents of the schema file.
e212f8366b401e776c8561e8ea3837c95d23c884jvergara *
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 */
e212f8366b401e776c8561e8ea3837c95d23c884jvergara private void updateSchemaFile(String schemaFile,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara boolean isSchemaFileDefined,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<AttributeType> attributes,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara List<ObjectClass> objectClasses) throws OpenDsException
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara if (isSchemaFileDefined)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LDIFExportConfig exportConfig =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara new LDIFExportConfig(schemaFile,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ExistingFileBehavior.OVERWRITE);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LDIFReader reader = null;
e9229148425011dbe560c5e79427c350dd422112ludo LDIFWriter writer = null;
e212f8366b401e776c8561e8ea3837c95d23c884jvergara try
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara reader = new LDIFReader(new LDIFImportConfig(schemaFile));
e9229148425011dbe560c5e79427c350dd422112ludo Entry schemaEntry = reader.readEntry();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attribute : attributes)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Modification mod = new Modification(ModificationType.ADD,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Attributes.create(getAttributeName(attribute).toLowerCase(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getValueOffline(attribute)));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara schemaEntry.applyModification(mod);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Modification mod = new Modification(ModificationType.ADD,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara Attributes.create(getAttributeName(oc).toLowerCase(),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getValueOffline(oc)));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara schemaEntry.applyModification(mod);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e9229148425011dbe560c5e79427c350dd422112ludo writer = new LDIFWriter(exportConfig);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara writer.writeEntry(schemaEntry);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara exportConfig.getWriter().newLine();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara catch (Throwable t)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo throw new OfflineUpdateException(
e9229148425011dbe560c5e79427c350dd422112ludo ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t.toString()), t);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara finally
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo StaticUtils.close(reader, exportConfig, writer);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara else
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LDIFExportConfig exportConfig =
e212f8366b401e776c8561e8ea3837c95d23c884jvergara new LDIFExportConfig(schemaFile,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ExistingFileBehavior.FAIL);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara try
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ArrayList<String> lines = getSchemaEntryLines();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (AttributeType attribute : attributes)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara getAttributeName(attribute)+": "+getValueOffline(attribute));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (ObjectClass oc : objectClasses)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara lines.add(getAttributeName(oc)+": "+getValueOffline(oc));
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara for (String line : lines)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara LDIFWriter.writeLDIFLine(new StringBuilder(line),
e212f8366b401e776c8561e8ea3837c95d23c884jvergara exportConfig.getWriter(), exportConfig.getWrapColumn() > 1,
e212f8366b401e776c8561e8ea3837c95d23c884jvergara exportConfig.getWrapColumn());
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara
e212f8366b401e776c8561e8ea3837c95d23c884jvergara exportConfig.getWriter().newLine();
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara catch (Throwable t)
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e212f8366b401e776c8561e8ea3837c95d23c884jvergara throw new OfflineUpdateException(
e212f8366b401e776c8561e8ea3837c95d23c884jvergara ERR_CTRL_PANEL_ERROR_UPDATING_SCHEMA.get(t.toString()), t);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara finally
e212f8366b401e776c8561e8ea3837c95d23c884jvergara {
e9229148425011dbe560c5e79427c350dd422112ludo StaticUtils.close(exportConfig);
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara }
e212f8366b401e776c8561e8ea3837c95d23c884jvergara}