es.emergya.ui.plugins.admin.aux1.RecursoDialog.java Source code

Java tutorial

Introduction

Here is the source code for es.emergya.ui.plugins.admin.aux1.RecursoDialog.java

Source

/*
 * Copyright (C) 2010, Emergya (http://www.emergya.es)
 *
 * @author <a href="mailto:jlrodriguez@emergya.es">Juan Lus Rodrguez</a>
 * @author <a href="mailto:marias@emergya.es">Mara Arias</a>
 *
 * This file is part of GoFleet
 *
 * This software is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This software 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * As a special exception, if you link this library with other files to
 * produce an executable, this library does not by itself cause the
 * resulting executable to be covered by the GNU General Public License.
 * This exception does not however invalidate any other reasons why the
 * executable file might be covered by the GNU General Public License.
 */
package es.emergya.ui.plugins.admin.aux1;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.LogFactory;
import org.gofleet.context.GoWired;
import org.gofleet.internacionalization.I18n;

import es.emergya.actions.RecursoAdmin;
import es.emergya.bbdd.bean.Patrulla;
import es.emergya.bbdd.bean.Recurso;
import es.emergya.cliente.constants.LogicConstants;
import es.emergya.consultas.FlotaConsultas;
import es.emergya.consultas.HistoricoGPSConsultas;
import es.emergya.consultas.PatrullaConsultas;
import es.emergya.consultas.RecursoConsultas;
import es.emergya.ui.SpringUtilities;
import es.emergya.ui.base.BasicWindow;
import es.emergya.ui.base.plugins.PluginEventHandler;
import es.emergya.ui.plugins.admin.AdminResources;

public class RecursoDialog extends JFrame {

    private static final long serialVersionUID = -3952140587477087365L;
    private static final org.apache.commons.logging.Log log = LogFactory.getLog(RecursoDialog.class);
    private Boolean cambios = false;
    @GoWired
    private BasicWindow basicWindow;

    /**
     * @return the basicWindow
     */
    public BasicWindow getBasicWindow() {
        return basicWindow;
    }

    /**
     * @param basicWindow
     *            the basicWindow to set
     */
    public void setBasicWindow(BasicWindow basicWindow) {
        this.basicWindow = basicWindow;
    }

    private DocumentListener changeListener = new DocumentListener() {

        @Override
        public void changedUpdate(DocumentEvent arg0) {
        }

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            cambios = true;
        }

        @Override
        public void removeUpdate(DocumentEvent arg0) {
            cambios = true;
        }
    };
    final ActionListener changeSelectionListener = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            cambios = true;
        }
    };

    @GoWired
    public I18n i18n;

    /**
     * @return the i18n
     */
    public I18n getI18n() {
        return i18n;
    }

    /**
     * @param i18n
     *            the i18n to set
     */
    public void setI18n(I18n i18n) {
        this.i18n = i18n;
    }

    public RecursoDialog(final Recurso rec, final AdminResources adminResources) {
        super();
        setAlwaysOnTop(true);
        setSize(600, 400);

        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
                if (cambios) {
                    int res = JOptionPane.showConfirmDialog(RecursoDialog.this,
                            "Existen cambios sin guardar. Seguro que desea cerrar la ventana?",
                            "Cambios sin guardar", JOptionPane.OK_CANCEL_OPTION);
                    if (res != JOptionPane.CANCEL_OPTION) {
                        e.getWindow().dispose();
                    }
                } else {
                    e.getWindow().dispose();
                }
            }
        });
        final Recurso r = (rec == null) ? null : RecursoConsultas.get(rec.getId());
        if (r != null) {
            setTitle(i18n.getString("Resources.summary.titleWindow") + " " + r.getIdentificador());
        } else {
            setTitle(i18n.getString("Resources.summary.titleWindow.new"));
        }
        setIconImage(getBasicWindow().getFrame().getIconImage());
        JPanel base = new JPanel();
        base.setBackground(Color.WHITE);
        base.setLayout(new BoxLayout(base, BoxLayout.Y_AXIS));

        // Icono del titulo
        JPanel title = new JPanel(new FlowLayout(FlowLayout.LEADING));
        title.setOpaque(false);
        JLabel labelTitulo = null;
        if (r != null) {
            labelTitulo = new JLabel(i18n.getString("Resources.summary"),
                    LogicConstants.getIcon("tittleficha_icon_recurso"), JLabel.LEFT);

        } else {
            labelTitulo = new JLabel(i18n.getString("Resources.cabecera.nuevo"),
                    LogicConstants.getIcon("tittleficha_icon_recurso"), JLabel.LEFT);

        }
        labelTitulo.setFont(LogicConstants.deriveBoldFont(12f));
        title.add(labelTitulo);
        base.add(title);

        // Nombre
        JPanel mid = new JPanel(new SpringLayout());
        mid.setOpaque(false);
        mid.add(new JLabel(i18n.getString("Resources.name"), JLabel.RIGHT));
        final JTextField name = new JTextField(25);
        if (r != null) {
            name.setText(r.getNombre());
        }

        name.getDocument().addDocumentListener(changeListener);
        name.setEditable(r == null);
        mid.add(name);

        // patrullas
        final JLabel labelSquads = new JLabel(i18n.getString("Resources.squad"), JLabel.RIGHT);
        mid.add(labelSquads);
        List<Patrulla> pl = PatrullaConsultas.getAll();
        pl.add(0, null);
        final JComboBox squads = new JComboBox(pl.toArray());
        squads.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXX");
        squads.addActionListener(changeSelectionListener);
        squads.setOpaque(false);
        labelSquads.setLabelFor(squads);
        if (r != null) {
            squads.setSelectedItem(r.getPatrullas());
        } else {
            squads.setSelectedItem(null);
        }
        squads.setEnabled((r != null && r.getHabilitado() != null) ? r.getHabilitado() : true);
        mid.add(squads);

        // // Identificador
        // mid.setOpaque(false);
        // mid.add(new JLabel(i18n.getString("Resources.identificador"),
        // JLabel.RIGHT));
        // final JTextField identificador = new JTextField("");
        // if (r != null) {
        // identificador.setText(r.getIdentificador());
        // }
        // identificador.getDocument().addDocumentListener(changeListener);
        // identificador.setEditable(r == null);
        // mid.add(identificador);
        // Espacio en blanco
        // mid.add(Box.createHorizontalGlue());
        // mid.add(Box.createHorizontalGlue());

        // Tipo
        final JLabel labelTipoRecursos = new JLabel(i18n.getString("Resources.type"), JLabel.RIGHT);
        mid.add(labelTipoRecursos);
        final JComboBox types = new JComboBox(RecursoConsultas.getTipos());
        labelTipoRecursos.setLabelFor(types);
        types.addActionListener(changeSelectionListener);
        if (r != null) {
            types.setSelectedItem(r.getTipo());
        } else {
            types.setSelectedItem(0);
        }
        // types.setEditable(true);
        types.setEnabled(true);
        mid.add(types);

        // Estado Eurocop
        mid.add(new JLabel(i18n.getString("Resources.status"), JLabel.RIGHT));
        final JTextField status = new JTextField();
        if (r != null && r.getEstadoEurocop() != null) {
            status.setText(r.getEstadoEurocop().getIdentificador());
        }
        status.setEditable(false);
        mid.add(status);

        // Subflota y patrulla
        mid.add(new JLabel(i18n.getString("Resources.subfleet"), JLabel.RIGHT));
        final JComboBox subfleets = new JComboBox(FlotaConsultas.getAllHabilitadas());
        subfleets.addActionListener(changeSelectionListener);
        if (r != null) {
            subfleets.setSelectedItem(r.getFlotas());
        } else {
            subfleets.setSelectedIndex(0);
        }
        subfleets.setEnabled(true);
        subfleets.setOpaque(false);
        mid.add(subfleets);

        // Referencia humana
        mid.add(new JLabel(i18n.getString("Resources.incidences"), JLabel.RIGHT));
        final JTextField rhumana = new JTextField();
        // if (r != null && r.getIncidencias() != null) {
        // rhumana.setText(r.getIncidencias().getReferenciaHumana());
        // }
        rhumana.setEditable(false);
        mid.add(rhumana);

        // dispositivo
        mid.add(new JLabel(i18n.getString("Resources.device"), JLabel.RIGHT));
        final PlainDocument plainDocument = new PlainDocument() {

            private static final long serialVersionUID = 4929271093724956016L;

            @Override
            public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
                if (this.getLength() + str.length() <= LogicConstants.LONGITUD_ISSI) {
                    super.insertString(offs, str, a);
                }
            }
        };
        final JTextField issi = new JTextField(plainDocument, "", LogicConstants.LONGITUD_ISSI);
        plainDocument.addDocumentListener(changeListener);
        issi.setEditable(true);
        mid.add(issi);
        mid.add(new JLabel(i18n.getString("Resources.enabled"), JLabel.RIGHT));
        final JCheckBox enabled = new JCheckBox("", true);
        enabled.addActionListener(changeSelectionListener);
        enabled.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (enabled.isSelected()) {
                    squads.setSelectedIndex(0);
                }
                squads.setEnabled(enabled.isSelected());
            }
        });
        enabled.setEnabled(true);
        enabled.setOpaque(false);
        if (r != null) {
            enabled.setSelected(r.getHabilitado());
        } else {
            enabled.setSelected(true);
        }
        if (r != null && r.getDispositivo() != null) {
            issi.setText(
                    StringUtils.leftPad(String.valueOf(r.getDispositivo()), LogicConstants.LONGITUD_ISSI, '0'));
        }

        mid.add(enabled);

        // Fecha ultimo gps
        mid.add(new JLabel(i18n.getString("Resources.lastPosition"), JLabel.RIGHT));
        JTextField lastGPS = new JTextField();
        final Date lastGPSDateForRecurso = HistoricoGPSConsultas.lastGPSDateForRecurso(r);
        if (lastGPSDateForRecurso != null) {
            lastGPS.setText(SimpleDateFormat.getDateTimeInstance().format(lastGPSDateForRecurso));
        }
        lastGPS.setEditable(false);
        mid.add(lastGPS);

        // Espacio en blanco
        mid.add(Box.createHorizontalGlue());
        mid.add(Box.createHorizontalGlue());

        // informacion adicional
        JPanel infoPanel = new JPanel(new SpringLayout());
        final JTextField info = new JTextField(25);
        info.getDocument().addDocumentListener(changeListener);
        infoPanel.add(new JLabel(i18n.getString("Resources.info")));
        infoPanel.add(info);
        infoPanel.setOpaque(false);
        info.setOpaque(false);
        SpringUtilities.makeCompactGrid(infoPanel, 1, 2, 6, 6, 6, 18);

        if (r != null) {
            info.setText(r.getInfoAdicional());
        } else {
            info.setText("");
        }
        info.setEditable(true);

        // Espacio en blanco
        mid.add(Box.createHorizontalGlue());
        mid.add(Box.createHorizontalGlue());

        SpringUtilities.makeCompactGrid(mid, 5, 4, 6, 6, 6, 18);
        base.add(mid);
        base.add(infoPanel);

        JPanel buttons = new JPanel();
        buttons.setOpaque(false);
        JButton accept = null;
        if (r == null) {
            accept = new JButton("Crear", LogicConstants.getIcon("button_crear"));
        } else {
            accept = new JButton("Guardar", LogicConstants.getIcon("button_save"));
        }
        accept.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    if (cambios || r == null || r.getId() == null) {
                        boolean shithappens = true;
                        if ((r == null || r.getId() == null)) { // Estamos
                            // creando
                            // uno nuevo
                            if (RecursoConsultas.alreadyExists(name.getText())) {
                                shithappens = false;
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.nombreUnico"));
                            } else if (issi.getText() != null && issi.getText().length() > 0 && StringUtils
                                    .trimToEmpty(issi.getText()).length() != LogicConstants.LONGITUD_ISSI) {
                                JOptionPane.showMessageDialog(RecursoDialog.this, i18n.getString(Locale.ROOT,
                                        "admin.recursos.popup.error.faltanCifras", LogicConstants.LONGITUD_ISSI));
                                shithappens = false;
                            } else if (issi.getText() != null && issi.getText().length() > 0
                                    && LogicConstants.isNumeric(issi.getText())
                                    && RecursoConsultas.alreadyExists(new Integer(issi.getText()))) {
                                shithappens = false;
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.dispositivoUnico"));
                            }
                        }
                        if (shithappens) {
                            if (name.getText().isEmpty()) {
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.nombreNulo"));
                            } else if (issi.getText() != null && issi.getText().length() > 0 && StringUtils
                                    .trimToEmpty(issi.getText()).length() != LogicConstants.LONGITUD_ISSI) {
                                JOptionPane.showMessageDialog(RecursoDialog.this, i18n.getString(Locale.ROOT,
                                        "admin.recursos.popup.error.faltanCifras", LogicConstants.LONGITUD_ISSI));
                            } else if (issi.getText() != null && issi.getText().length() > 0
                                    && LogicConstants.isNumeric(issi.getText()) && r != null && r.getId() != null
                                    && RecursoConsultas.alreadyExists(new Integer(issi.getText()), r.getId())) {
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.issiUnico"));
                            } else if (issi.getText() != null && issi.getText().length() > 0
                                    && !LogicConstants.isNumeric(issi.getText())) {
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.noNumerico"));
                                // } else if (identificador.getText().isEmpty())
                                // {
                                // JOptionPane
                                // .showMessageDialog(
                                // RecursoDialog.this,
                                // i18n.getString("admin.recursos.popup.error.identificadorNulo"));
                            } else if (subfleets.getSelectedIndex() == -1) {
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.noSubflota"));
                            } else if (types.getSelectedItem() == null
                                    || types.getSelectedItem().toString().trim().isEmpty()) {
                                JOptionPane.showMessageDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.error.noTipo"));
                            } else {
                                int i = JOptionPane.showConfirmDialog(RecursoDialog.this,
                                        i18n.getString("admin.recursos.popup.dialogo.guardar.titulo"),
                                        i18n.getString("admin.recursos.popup.dialogo.guardar.guardar"),
                                        JOptionPane.YES_NO_CANCEL_OPTION);

                                if (i == JOptionPane.YES_OPTION) {

                                    Recurso recurso = r;

                                    if (r == null) {
                                        recurso = new Recurso();
                                    }

                                    recurso.setInfoAdicional(info.getText());
                                    if (issi.getText() != null && issi.getText().length() > 0) {
                                        recurso.setDispositivo(new Integer(issi.getText()));
                                    } else {
                                        recurso.setDispositivo(null);
                                    }
                                    recurso.setFlotas(FlotaConsultas.find(subfleets.getSelectedItem().toString()));
                                    if (squads.getSelectedItem() != null && enabled.isSelected()) {
                                        recurso.setPatrullas(
                                                PatrullaConsultas.find(squads.getSelectedItem().toString()));
                                    } else {
                                        recurso.setPatrullas(null);
                                    }
                                    recurso.setNombre(name.getText());
                                    recurso.setHabilitado(enabled.isSelected());
                                    // recurso.setIdentificador(identificador
                                    // .getText());
                                    recurso.setTipo(types.getSelectedItem().toString());
                                    dispose();

                                    RecursoAdmin.saveOrUpdate(recurso);
                                    adminResources.refresh(null);

                                    PluginEventHandler.fireChange(adminResources);
                                } else if (i == JOptionPane.NO_OPTION) {
                                    dispose();
                                }
                            }
                        }
                    } else {
                        log.debug("No hay cambios");
                        dispose();
                    }

                } catch (Throwable t) {
                    log.error("Error guardando un recurso", t);
                }
            }
        });
        buttons.add(accept);

        JButton cancelar = new JButton("Cancelar", LogicConstants.getIcon("button_cancel"));

        cancelar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (cambios) {
                    if (JOptionPane.showConfirmDialog(RecursoDialog.this,
                            "Existen cambios sin guardar. Seguro que desea cerrar la ventana?",
                            "Cambios sin guardar", JOptionPane.OK_CANCEL_OPTION) != JOptionPane.CANCEL_OPTION) {
                        dispose();
                    }
                } else {
                    dispose();
                }
            }
        });

        buttons.add(cancelar);

        base.add(buttons);

        getContentPane().add(base);
        setLocationRelativeTo(null);
        cambios = false;
        if (r == null) {
            cambios = true;
        }

        pack();

        int x;
        int y;

        Container myParent = getBasicWindow().getPluginContainer().getDetachedTab(0);
        Point topLeft = myParent.getLocationOnScreen();
        Dimension parentSize = myParent.getSize();

        Dimension mySize = getSize();

        if (parentSize.width > mySize.width) {
            x = ((parentSize.width - mySize.width) / 2) + topLeft.x;
        } else {
            x = topLeft.x;
        }

        if (parentSize.height > mySize.height) {
            y = ((parentSize.height - mySize.height) / 2) + topLeft.y;
        } else {
            y = topLeft.y;
        }

        setLocation(x, y);
        cambios = false;
    }
}