All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.util.ant.CmsAntTaskSelectionDialog Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

The newest version!
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software GmbH, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.util.ant;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.border.Border;

/**
 * This is a highly configurable Swing GUI dialog for selection.
 * 

* * @since 6.0.0 * * @see CmsAntTaskSelectionPrompt */ public class CmsAntTaskSelectionDialog extends JDialog implements ActionListener { /** Constant for border width. */ private static final int C_BORDER_SIZE = 10; /** Serial version UID required for safe serialization. */ private static final long serialVersionUID = -8439685952987222098L; /** Aborted flag. */ protected boolean m_aborted = true; /** Array of all entries. */ private String[] m_allList; /** Border. */ private final Border m_border = BorderFactory.createEmptyBorder(C_BORDER_SIZE, C_BORDER_SIZE, 0, C_BORDER_SIZE); /** Panel for buttons. */ private final JPanel m_buttons = new JPanel(); /** Cancel button. */ private final JButton m_cancel = new JButton("Cancel"); /** Main Panel. */ private final JPanel m_content = new JPanel(); /** Array of by default selected items. */ private String[] m_defList; /** Label for prompt. */ private JLabel m_label; /** Ok button. */ private final JButton m_ok = new JButton("Ok"); /** Associated ant task. */ private final CmsAntTaskSelectionPrompt m_promptTask; /** Select all button. */ private final JButton m_selAll = new JButton("All"); /** Array of selection buttons, check boxes or radio buttons. */ private JToggleButton[] m_selections; /** Select none button. */ private final JButton m_selNone = new JButton("None"); /** Scrollable view. */ private final JScrollPane m_view = new JScrollPane(m_content); /** * Default Constructor. *

* * @param promptTask the {@link CmsAntTaskSelectionPrompt} object. *

*/ public CmsAntTaskSelectionDialog(CmsAntTaskSelectionPrompt promptTask) { super((JFrame)null, promptTask.getTitle(), true); m_promptTask = promptTask; m_allList = m_promptTask.getAllValues().split(CmsAntTaskSelectionPrompt.LIST_SEPARATOR); m_defList = getDefaultList(); m_label = new JLabel(m_promptTask.getPrompt()); addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { m_aborted = true; setVisible(false); } }); getRootPane().setDefaultButton(m_ok); m_label.setBorder(m_border); if (!m_promptTask.isSingleSelection()) { JPanel p1 = new JPanel(); p1.add(new JLabel("Select: ")); m_selAll.addActionListener(this); p1.add(m_selAll); m_selNone.addActionListener(this); p1.add(m_selNone); JPanel p = new JPanel(new BorderLayout()); p.add(m_label, BorderLayout.NORTH); p.add(p1, BorderLayout.SOUTH); getContentPane().add(p, BorderLayout.NORTH); } else { getContentPane().add(m_label, BorderLayout.NORTH); } m_view.setBorder(m_border); m_selections = new JToggleButton[m_promptTask.getAllValues().split( CmsAntTaskSelectionPrompt.LIST_SEPARATOR).length]; // layout of selection elements int elements = m_selections.length; GridLayout layout = new GridLayout((elements / m_promptTask.getColumns()) + 1, m_promptTask.getColumns()); layout.setHgap(20); m_content.setLayout(layout); for (int i = 0; i < m_selections.length; i++) { if (m_promptTask.isSingleSelection()) { m_selections[i] = new JRadioButton( m_allList[i].trim(), firstPositionOfItemInArray(m_defList, m_allList[i]) != -1); } else { m_selections[i] = new JCheckBox( m_allList[i].trim(), firstPositionOfItemInArray(m_defList, m_allList[i]) != -1); } m_content.add(m_selections[i]); } if (m_promptTask.isSingleSelection()) { ButtonGroup group = new ButtonGroup(); for (int i = 0; i < m_selections.length; i++) { group.add(m_selections[i]); } } getContentPane().add(m_view, BorderLayout.CENTER); m_buttons.setBorder( BorderFactory.createEmptyBorder(C_BORDER_SIZE, C_BORDER_SIZE, C_BORDER_SIZE / 2, C_BORDER_SIZE)); m_ok.addActionListener(this); m_buttons.add(m_ok); m_cancel.addActionListener(this); m_buttons.add(m_cancel); getContentPane().add(m_buttons, BorderLayout.SOUTH); pack(); } /** * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals(m_ok.getText()) || e.getActionCommand().equals(m_cancel.getText())) { m_aborted = !e.getActionCommand().equals(m_ok.getText()); setVisible(false); } else if (e.getActionCommand().equals(m_selAll.getText())) { for (int i = 0; i < m_selections.length; i++) { m_selections[i].setSelected(true); } } else if (e.getActionCommand().equals(m_selNone.getText())) { for (int i = 0; i < m_selections.length; i++) { m_selections[i].setSelected(false); } } } /** * Returns null if the dialog was canceled, or a list of selected items if not. *

* * @return the user selection */ public String getSelection() { center(); setVisible(true); String ret = ""; for (int i = 0; i < m_selections.length; i++) { if (m_selections[i].isSelected()) { ret += m_selections[i].getText() + CmsAntTaskSelectionPrompt.LIST_SEPARATOR; } } if (m_aborted || (ret.trim().length() < CmsAntTaskSelectionPrompt.LIST_SEPARATOR.length())) { dispose(); return null; } dispose(); return ret.substring(0, ret.length() - CmsAntTaskSelectionPrompt.LIST_SEPARATOR.length()); } /** * Centers the dialog on the screen. *

* * If the size of the dialog exceeds that of the screen, then the size of the dialog is reset to * the size of the screen. *

*/ private void center() { Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); Dimension window = getSize(); // ensure that no parts of the dialog will be off-screen int height = window.height; int width = window.width; if (window.height > screen.height) { window.height = screen.height; height = screen.height - 50; width = width + 50; } if (window.width > screen.width) { window.width = screen.width; } int xCoord = ((screen.width / 2) - (window.width / 2)); int yCoord = ((screen.height / 2) - (window.height / 2)); setLocation(xCoord, yCoord); setSize(width, height); } /** * Looks for the position of a string in an array of string, performing triming and taking into * account the null cases. *

* * @param array the string array to search in * @param item the item to search for * * @return the position of the item in the array or -1 if not found */ private int firstPositionOfItemInArray(String[] array, String item) { for (int i = 0; i < array.length; i++) { if (array[i] == null) { if (item == null) { return i; } } else { if ((item != null) && array[i].trim().equals(item.trim())) { return i; } } } return -1; } /** * Returns the array of items selected by default, if no one is given all items will be * considered. *

* * @return the array of items selected by default */ private String[] getDefaultList() { if ((m_promptTask.getDefaultValue() == null) || m_promptTask.getDefaultValue().trim().equals("")) { return m_allList; } return m_promptTask.getDefaultValue().split(CmsAntTaskSelectionPrompt.LIST_SEPARATOR); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy