Package es.emergya.ui.gis.popups

Source Code of es.emergya.ui.gis.popups.GPSDialog$SolicitudGPSActionListener

/*
* Copyright (C) 2010, Emergya (http://www.emergya.es)
*
* @author <a href="mailto:jlrodriguez@emergya.es">Juan Luís Rodríguez</a>
* @author <a href="mailto:marias@emergya.es">María 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.gis.popups;

//~--- non-JDK imports --------------------------------------------------------

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingWorker;
import javax.swing.Timer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.gofleet.context.GoClassLoader;
import org.gofleet.context.GoWired;
import org.gofleet.internacionalization.I18n;

import es.emergya.bbdd.bean.Outbox;
import es.emergya.bbdd.bean.Recurso;
import es.emergya.bbdd.bean.TipoMensaje;
import es.emergya.cliente.constants.LogicConstants;
import es.emergya.comunications.MessageGenerator;
import es.emergya.comunications.exceptions.MessageGeneratingException;
import es.emergya.consultas.TipoMensajeConsultas;
import es.emergya.ui.base.BasicWindow;

public class GPSDialog extends JFrame implements ActionListener {
  private static final long serialVersionUID = -3236008715561683102L;
  private static final org.apache.commons.logging.Log log = LogFactory
      .getLog(GPSDialog.class);
  private Outbox last_bandejaSalida = null;
  JButton actualizar;
  Icon iconEnviando;
  Icon iconTransparente;
  JLabel notification;
  JLabel progressIcon;
  Recurso target;
  private static final Log LOG = LogFactory.getLog(GPSDialog.class);

  @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 GPSDialog(Recurso r) {
    super();
    setAlwaysOnTop(true);
    setResizable(false);
    iconTransparente = LogicConstants.getIcon("48x48_transparente");
    iconEnviando = LogicConstants.getIcon("anim_actualizando");
    target = r;
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    setPreferredSize(new Dimension(400, 150));
    setTitle(i18n.getString("window.gps.titleBar") + " "
        + target.getIdentificador());
    try {
      setIconImage(((BasicWindow) GoClassLoader.getGoClassLoader().load(
          BasicWindow.class)).getFrame().getIconImage());
    } catch (Throwable e) {
      LOG.error("There is no icon image", e);
    }

    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));
    final JLabel titleLabel = new JLabel(i18n.getString("window.gps.title"),
        LogicConstants.getIcon("tittleventana_icon_actualizargps"),
        JLabel.LEFT);

    titleLabel.setFont(LogicConstants.deriveBoldFont(12f));
    title.add(titleLabel);
    title.setOpaque(false);
    base.add(title);

    // Area para mensajes
    JPanel notificationArea = new JPanel();

    notificationArea.setOpaque(false);
    notification = new JLabel("PLACEHOLDER");
    notification.setForeground(Color.WHITE);
    notificationArea.add(notification);
    base.add(notificationArea);

    JPanel buttons = new JPanel();

    buttons.setOpaque(false);
    buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));
    actualizar = new JButton(i18n.getString("window.gps.button.actualizar"),
        LogicConstants.getIcon("ventanacontextual_button_solicitargps"));
    actualizar.addActionListener(this);
    buttons.add(actualizar);
    buttons.add(Box.createHorizontalGlue());
    progressIcon = new JLabel(iconTransparente);
    buttons.add(progressIcon);
    buttons.add(Box.createHorizontalGlue());

    JButton cancel = new JButton(i18n.getString("Buttons.cancel"),
        LogicConstants.getIcon("button_cancel"));

    cancel.addActionListener(this);
    buttons.add(cancel);
    base.add(buttons);
    getContentPane().add(base);
    pack();

    int x;
    int y;
    Container myParent;
    try {
      myParent = ((BasicWindow) GoClassLoader.getGoClassLoader().load(
          BasicWindow.class)).getFrame().getContentPane();
      java.awt.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);
    } catch (Throwable e1) {
      LOG.error("There is no basic window!", e1);
    }
    this.addWindowListener(new WindowAdapter() {
      @Override
      public void windowOpened(WindowEvent arg0) {
        deleteErrorMessage();
      }

      @Override
      public void windowClosed(WindowEvent arg0) {
        deleteErrorMessage();
      }

      @Override
      public void windowClosing(WindowEvent arg0) {
        deleteErrorMessage();
      }

      private void deleteErrorMessage() {
        SwingWorker<Object, Object> sw = new SwingWorker<Object, Object>() {
          @Override
          protected Object doInBackground() throws Exception {
            if (last_bandejaSalida != null) {
              MessageGenerator.remove(last_bandejaSalida.getId());
            }

            return null;
          }

          @Override
          protected void done() {
            super.done();
            GPSDialog.this.progressIcon.setIcon(iconTransparente);
            GPSDialog.this.progressIcon.repaint();
            last_bandejaSalida = null;
            GPSDialog.this.notification.setText("");
            GPSDialog.this.notification.repaint();
          }
        };

        sw.execute();
      }
    });
  }

  public Recurso getRecurso() {
    return target;
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals(
        i18n.getString("window.gps.button.actualizar"))) {
      last_bandejaSalida = send();
      log.info("bandeja de salida: " + last_bandejaSalida);

      if (last_bandejaSalida == null) {
        return;
      }

      final JButton request = ((JButton) e.getSource());

      request.setEnabled(false);
      progressIcon.setIcon(iconEnviando);
      notification.setForeground(Color.WHITE);

      SolicitudGPSActionListener listener = new SolicitudGPSActionListener(
          last_bandejaSalida);
      Timer t = new Timer(1000, listener);

      listener.setTimer(t);
      t.start();
    }

    if (e.getActionCommand().equals(i18n.getString("Buttons.cancel"))) {
      if (last_bandejaSalida != null) {
        MessageGenerator.remove(last_bandejaSalida.getId());
      }

      last_bandejaSalida = null;
      dispose();
    }
  }

  private Outbox send() {
    TipoMensaje tmensaje = TipoMensajeConsultas
        .getTipoByCode(es.emergya.utils.LogicConstants
            .getInt("GPS", 32));

    if (target.getDispositivo() == null) {
      notification.setText(i18n.getString("progress.message.nodevice"));
      notification.setForeground(Color.RED);

      return null;
    }

    try {
      return MessageGenerator.sendMessage(tmensaje.getCodigo(), tmensaje
          .getTipoTetra(), tmensaje.getPrioridad(), LogicConstants
          .get("DATAGRAMA_SOLICITUD_GPS"), target.getDispositivo()
          .toString());
    } catch (MessageGeneratingException e) {
      notification.setText(i18n.getString("progress.message.fail"));
      notification.setForeground(Color.RED);

      return null;
    }
  }

  class SolicitudGPSActionListener implements ActionListener {
    private Outbox b;
    private Timer t;

    public SolicitudGPSActionListener(Outbox b) {
      this.b = b;
    }

    public void setTimer(Timer t) {
      this.t = t;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      if (last_bandejaSalida == null) {
        actualizar.setEnabled(true);
        progressIcon.setIcon(iconTransparente);
        t.stop();
      } else if (!MessageGenerator.messageExists(b.getId())) {
        progressIcon.setIcon(iconTransparente);
        notification.setText(i18n.getString("progress.updating"));
        notification.setForeground(Color.RED);
        actualizar.setEnabled(true);
        last_bandejaSalida = null;

        if (t != null) {
          t.stop();
        }
      }
    }
  }
}
TOP

Related Classes of es.emergya.ui.gis.popups.GPSDialog$SolicitudGPSActionListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.