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

de.invation.code.toval.misc.wd.AbstractWorkingDirectoryDialog Maven / Gradle / Ivy

Go to download

TOVAL comprises a set of java classes for common programming issues. It includes utils for arrays, lists, sets and collections for convenient handling and modification, but also support for mathematic definitions concerning logic (clauses + resolution) together with some algorithms for permutations, powersets and resolution. Additionally it contains a number of types for multisets, matrices with object keys and much more.

The newest version!
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package de.invation.code.toval.misc.wd;

import de.invation.code.toval.debug.SimpleDebugger;
import de.invation.code.toval.file.FileUtils;
import de.invation.code.toval.graphic.dialog.AbstractDialog;
import de.invation.code.toval.graphic.renderer.AlternatingRowColorListCellRenderer;
import de.invation.code.toval.validate.ExceptionDialog;
import de.invation.code.toval.validate.ExceptionListener;
import de.invation.code.toval.validate.ParameterException;
import de.invation.code.toval.validate.Validate;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;

/**
 *
 * @author stocker
 */
public abstract class AbstractWorkingDirectoryDialog extends AbstractDialog implements PropertyChangeListener, ExceptionListener {

    private static final long serialVersionUID = 2306027725394345926L;
    
    public static final Dimension PREFERRED_SIZE = new Dimension(500, 300);

    private final JPanel contentPanel = new JPanel();

    private JList listKnownDirectories;
    private JButton btnOK;
    private JButton btnCancel;
    private DefaultListModel modelListKnownDirectories = new DefaultListModel();

    private NewWorkingDirectoryAction newDirectoryAction;
    private OpenWorkingDirectoryAction openDirectoryAction;

    private List directories = new ArrayList<>();
    private AbstractWorkingDirectoryProperties properties;
    private SimpleDebugger debugger;

    protected AbstractWorkingDirectoryDialog(Window owner, AbstractWorkingDirectoryProperties properties) throws Exception{
        this(owner, properties, null);
    }

    protected AbstractWorkingDirectoryDialog(Window owner, AbstractWorkingDirectoryProperties properties, SimpleDebugger debugger) throws Exception {
        super(owner);
        Validate.notNull(properties);
        this.properties = properties;
        this.debugger = debugger;
    }

    @Override
    protected void setTitle() {
        setTitle("Please choose a " + properties.getWorkingDirectoryDescriptor().toLowerCase());
    }
    
    @Override
    public Dimension getPreferredSize(){
        return PREFERRED_SIZE;
    }

    @Override
    protected void addComponents() throws Exception {
        mainPanel().setLayout(new BorderLayout());
        JScrollPane scrollPane = new JScrollPane(getListKnownDirectories());
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        mainPanel().add(scrollPane, BorderLayout.CENTER);
    }

    @Override
    protected List getLefthandButtons() {
        newDirectoryAction = new NewWorkingDirectoryAction(AbstractWorkingDirectoryDialog.this, properties, debugger);
        newDirectoryAction.addPropertyChangeListener(AbstractWorkingDirectoryDialog.this);
        newDirectoryAction.addExceptionListener(AbstractWorkingDirectoryDialog.this);
        openDirectoryAction = new OpenWorkingDirectoryAction(AbstractWorkingDirectoryDialog.this, properties, debugger);
        openDirectoryAction.addPropertyChangeListener(AbstractWorkingDirectoryDialog.this);
        openDirectoryAction.addExceptionListener(AbstractWorkingDirectoryDialog.this);
        List buttons = super.getLefthandButtons();
        JButton newDirectoryButton = new JButton(newDirectoryAction);
        buttons.add(newDirectoryButton);
        JButton openDirectoryButton = new JButton(openDirectoryAction);
        buttons.add(openDirectoryButton);
        return buttons;
    }

    @Override
    protected void okProcedure() {
        if (!modelListKnownDirectories.isEmpty()) {
            if (listKnownDirectories.getSelectedValue() == null) {
                JOptionPane.showMessageDialog(AbstractWorkingDirectoryDialog.this, "Please choose a " + properties.getWorkingDirectoryDescriptor().toLowerCase(), "Invalid Parameter", JOptionPane.ERROR_MESSAGE);
                return;
            }
            setDialogObject(directories.get(listKnownDirectories.getSelectedIndex()));
            super.okProcedure();
        } else {
            JOptionPane.showMessageDialog(AbstractWorkingDirectoryDialog.this, "No known entries, please create new " + properties.getWorkingDirectoryDescriptor().toLowerCase(), "Invalid Parameter", JOptionPane.ERROR_MESSAGE);
            return;
        }
    }

    private JList getListKnownDirectories() {
        if (listKnownDirectories == null) {
            listKnownDirectories = new JList(modelListKnownDirectories) {
                private static final long serialVersionUID = -5571466323700430126L;

                @Override
                public String getToolTipText(MouseEvent event) {
                    int index = locationToIndex(event.getPoint());
                    if (index != -1) {
                        return directories.get(index);
                    }
                    return super.getToolTipText(event);
                }

            };
            listKnownDirectories.setCellRenderer(new AlternatingRowColorListCellRenderer());
            listKnownDirectories.setFixedCellHeight(20);
            listKnownDirectories.setVisibleRowCount(10);
            listKnownDirectories.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            listKnownDirectories.setBorder(null);

            updateListKnownDirectories();
        }
        return listKnownDirectories;
    }

    private void updateListKnownDirectories() {
        modelListKnownDirectories.clear();
        try {
            for (String knownDirectory : properties.getKnownWorkingDirectories()) {
                try {
                    modelListKnownDirectories.addElement(FileUtils.getDirName(knownDirectory));
                    directories.add(knownDirectory);
                } catch (ParameterException e) {
                    //Directory no longer available. Do not put into directories list
                }
            }
        } catch (Exception e) {
            ExceptionDialog.showException(AbstractWorkingDirectoryDialog.this, "Working Directory Exception", new Exception("Cannot update list of known " + properties.getWorkingDirectoryDescriptor().toLowerCase(), e), true);
        }
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getSource() instanceof NewWorkingDirectoryAction || evt.getSource() instanceof OpenWorkingDirectoryAction) {
            if (evt.getPropertyName().equals(AbstractWorkingDirectoryProperties.PROPERTY_NAME_WORKING_DIRECTORY)) {
                setDialogObject(evt.getNewValue().toString());
            } else if (evt.getPropertyName().equals(AbstractWorkingDirectoryAction.PROPERTY_NAME_SUCCESS)) {
                dispose();
            }
        }
    }

    @Override
    public void exceptionOccurred(Object sender, Exception e){
        ExceptionDialog.showException(AbstractWorkingDirectoryDialog.this, "Exception", e, true, true);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy