/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2011 ForgeRock AS */ package org.opends.guitools.uninstaller.ui; import org.opends.quicksetup.CurrentInstallStatus; import org.opends.quicksetup.Installation; import org.opends.quicksetup.Configuration; import org.opends.quicksetup.ui.FieldName; import org.opends.quicksetup.ui.GuiApplication; import org.opends.quicksetup.ui.QuickSetupStepPanel; import org.opends.quicksetup.ui.UIFactory; import org.opends.quicksetup.util.Utils; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import java.io.IOException; import org.opends.messages.Message; import static org.opends.messages.AdminToolMessages.*; /** * This is the panel displayed when the user is uninstalling Open DS. It is * basically a panel with the text informing of the consequences of uninstalling * the server and asking for confirmation. * */ public class ConfirmUninstallPanel extends QuickSetupStepPanel { private static final Logger LOG = Logger.getLogger(ConfirmUninstallPanel.class.getName()); private static final long serialVersionUID = 81730510134697056L; private Set<String> outsideDbs; private Set<String> outsideLogs; private HashMap<FieldName, JCheckBox> hmCbs = new HashMap<FieldName, JCheckBox>(); /** * The constructor of this class. * @param application Application this panel represents * @param installStatus the object describing the current installation status. * */ public ConfirmUninstallPanel(GuiApplication application, CurrentInstallStatus installStatus) { super(application); } /** * {@inheritDoc} */ @Override public Object getFieldValue(FieldName fieldName) { Object value; switch (fieldName) { case EXTERNAL_DB_DIRECTORIES: Set<String> s1 = new HashSet<String>(); if (outsideDbs.size() > 0) { if (getCheckBox(FieldName.EXTERNAL_DB_DIRECTORIES).isSelected()) { s1.addAll(outsideDbs); } } value = s1; break; case EXTERNAL_LOG_FILES: Set<String> s2 = new HashSet<String>(); if (outsideLogs.size() > 0) { if (getCheckBox(FieldName.EXTERNAL_LOG_FILES).isSelected()) { s2.addAll(outsideLogs); } } value = s2; break; default: JCheckBox cb = getCheckBox(fieldName); value = cb.isSelected(); break; } return value; } /** * {@inheritDoc} */ @Override protected Message getTitle() { return INFO_CONFIRM_UNINSTALL_PANEL_TITLE.get(); } /** * {@inheritDoc} */ @Override protected Component createInputPanel() { FieldName[] fieldNames = { FieldName.REMOVE_LIBRARIES_AND_TOOLS, FieldName.REMOVE_DATABASES, FieldName.REMOVE_LOGS, FieldName.REMOVE_CONFIGURATION_AND_SCHEMA, FieldName.REMOVE_BACKUPS, FieldName.REMOVE_LDIFS, }; Message[] labels = { INFO_REMOVE_LIBRARIES_AND_TOOLS_LABEL.get(), INFO_REMOVE_DATABASES_LABEL.get(), INFO_REMOVE_LOGS_LABEL.get(), INFO_REMOVE_SCHEMA_AND_CONFIGURATION_LABEL.get(), INFO_REMOVE_BACKUPS_LABEL.get(), INFO_REMOVE_LDIFS_LABEL.get() }; Message[] tooltips = { INFO_REMOVE_LIBRARIES_AND_TOOLS_TOOLTIP.get(), INFO_REMOVE_DATABASES_TOOLTIP.get(), INFO_REMOVE_LOGS_TOOLTIP.get(), INFO_REMOVE_SCHEMA_AND_CONFIGURATION_TOOLTIP.get(), INFO_REMOVE_BACKUPS_TOOLTIP.get(), INFO_REMOVE_LDIFS_TOOLTIP.get() }; for (int i=0; i<fieldNames.length; i++) { JCheckBox cb = UIFactory.makeJCheckBox(labels[i], tooltips[i], UIFactory.TextStyle.INSTRUCTIONS); cb.setSelected(true); hmCbs.put(fieldNames[i], cb); } JPanel panel = new JPanel(new GridBagLayout()); panel.setOpaque(false); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = UIFactory.getEmptyInsets(); JPanel p = new JPanel(new GridBagLayout()); p.setOpaque(false); gbc.weightx = 0.0; gbc.gridwidth = GridBagConstraints.RELATIVE; gbc.anchor = GridBagConstraints.WEST; p.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, INFO_SERVER_PATH_LABEL.get(), UIFactory.TextStyle.PRIMARY_FIELD_VALID), gbc); gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD; p.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, Message.raw(Utils.getInstallPathFromClasspath()), UIFactory.TextStyle.INSTRUCTIONS), gbc); FieldName[] names = { FieldName.REMOVE_LIBRARIES_AND_TOOLS, FieldName.REMOVE_DATABASES, FieldName.REMOVE_LOGS, FieldName.REMOVE_CONFIGURATION_AND_SCHEMA, FieldName.REMOVE_BACKUPS, FieldName.REMOVE_LDIFS }; for (int i=0; i<names.length; i++) { gbc.gridwidth = GridBagConstraints.RELATIVE; p.add(Box.createHorizontalGlue(), gbc); gbc.insets.left = 0; gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD; p.add(getCheckBox(names[i]), gbc); } gbc.weightx = 1.0; gbc.fill = GridBagConstraints.NONE; gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.anchor = GridBagConstraints.WEST; gbc.insets.left = 0; panel.add(p, gbc); Installation installation = Installation.getLocal(); Configuration config = installation.getCurrentConfiguration(); try { outsideDbs = config.getOutsideDbs(); } catch (IOException ioe) { LOG.log(Level.INFO, "Unable to determin outside databases", ioe); } try { outsideLogs = config.getOutsideLogs(); } catch (IOException ioe) { LOG.log(Level.INFO, "Unable to determin outside logs", ioe); } gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 1.0; if (outsideDbs.size() > 0) { JPanel dbPanel = createDbPanel(); panel.add(dbPanel, gbc); } if (outsideLogs.size() > 0) { JPanel logPanel = createLogPanel(); panel.add(logPanel, gbc); } addVerticalGlue(panel); return panel; } /** * {@inheritDoc} */ @Override protected Message getInstructions() { return INFO_CONFIRM_UNINSTALL_PANEL_INSTRUCTIONS.get(); } /** * Creates a panel to ask the user if (s)he wants to remove the databases * located outside the installation path. * @return a panel to ask the user if (s)he wants to remove the databases * located outside the installation path. */ private JPanel createDbPanel() { JCheckBox cbOutsideDbs = UIFactory.makeJCheckBox( INFO_DELETE_OUTSIDE_DBS_LABEL.get(), INFO_DELETE_OUTSIDE_DBS_TOOLTIP.get(), UIFactory.TextStyle.INSTRUCTIONS); cbOutsideDbs.setSelected(true); hmCbs.put(FieldName.EXTERNAL_DB_DIRECTORIES, cbOutsideDbs); return createOutsidePathPanel(cbOutsideDbs, outsideDbs, INFO_DELETE_OUTSIDE_DBS_MSG.get()); } /** * Creates a panel to ask the user if (s)he wants to remove the logs located * outside the installation path. * @return a panel to ask the user if (s)he wants to remove the logs located * outside the installation path. */ private JPanel createLogPanel() { JCheckBox cbOutsideLogs = UIFactory.makeJCheckBox( INFO_DELETE_OUTSIDE_LOGS_LABEL.get(), INFO_DELETE_OUTSIDE_LOGS_TOOLTIP.get(), UIFactory.TextStyle.INSTRUCTIONS); cbOutsideLogs.setSelected(true); hmCbs.put(FieldName.EXTERNAL_LOG_FILES, cbOutsideLogs); return createOutsidePathPanel(cbOutsideLogs, outsideLogs, INFO_DELETE_OUTSIDE_LOGS_MSG.get()); } private JPanel createOutsidePathPanel(JCheckBox cb, Set<String> paths, Message msg) { JPanel panel = new JPanel(new GridBagLayout()); panel.setOpaque(false); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = UIFactory.getEmptyInsets(); gbc.weightx = 1.0; gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.anchor = GridBagConstraints.WEST; gbc.fill = GridBagConstraints.HORIZONTAL; panel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, msg, UIFactory.TextStyle.INSTRUCTIONS), gbc); DefaultListModel listModel = new DefaultListModel(); for (String path : paths) { listModel.addElement(path); } JList list = UIFactory.makeJList(UIFactory.TextStyle.INSTRUCTIONS); list.setModel(listModel); list.setBackground(UIFactory.CURRENT_STEP_PANEL_BACKGROUND); list.setVisibleRowCount(Math.min(3, listModel.getSize())); JScrollPane scroll = new JScrollPane(list); scroll.setViewportBorder(new EmptyBorder(0, 0, 0, 0)); gbc.insets.left = UIFactory.LEFT_INSET_RADIO_SUBORDINATE; panel.add(scroll, gbc); gbc.insets.left = 0; panel.add(cb, gbc); return panel; } /** * Returns the checkbox corresponding to the provided FieldName. * @param fieldName the FieldName object. * @return the checkbox corresponding to the provided FieldName. */ private JCheckBox getCheckBox(FieldName fieldName) { JCheckBox cb = hmCbs.get(fieldName); if (cb == null) { throw new IllegalArgumentException("The FieldName "+fieldName+ " has no checkbox associated."); } return cb; } }