Package es.emergya.ui.gis.popups

Source Code of es.emergya.ui.gis.popups.SaveGPXDialog

/*
* 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;

import java.awt.BorderLayout;
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 java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

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 org.openstreetmap.josm.gui.layer.GpxLayer;
import org.openstreetmap.josm.gui.layer.Layer;
import org.openstreetmap.josm.io.GpxWriter;

import es.emergya.cliente.constants.LogicConstants;
import es.emergya.ui.base.BasicWindow;

public class SaveGPXDialog extends JFrame {
  static final Log log = LogFactory.getLog(SaveGPXDialog.class);
  private static final long serialVersionUID = -6066807198392103411L;
  private static SaveGPXDialog self;
  private static final Log LOG = LogFactory.getLog(SaveGPXDialog.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 synchronized static void close() {
    if (self != null)
      self.dispose();
    self = null;
  }

  public synchronized static void showDialog(List<Layer> capas) {
    if (self == null)
      self = new SaveGPXDialog(capas);
    self.setVisible(true);
    self.setExtendedState(JFrame.NORMAL);
  }

  private SaveGPXDialog(final List<Layer> capas) {
    super("Consulta de Posiciones GPS");
    setResizable(false);
    setAlwaysOnTop(true);
    try {
      setIconImage(((BasicWindow) GoClassLoader.getGoClassLoader().load(
          BasicWindow.class)).getFrame().getIconImage());
    } catch (Throwable e) {
      LOG.error("There is no icon image", e);
    }

    this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    JPanel dialogo = new JPanel(new BorderLayout());
    dialogo.setBackground(Color.WHITE);
    dialogo.setBorder(new EmptyBorder(10, 10, 10, 10));

    JPanel central = new JPanel(new FlowLayout());
    central.setOpaque(false);
    final JTextField nombre = new JTextField(15);
    nombre.setEditable(false);
    central.add(nombre);
    final JButton button = new JButton("Examinar...",
        LogicConstants.getIcon("button_nuevo"));
    central.add(button);
    final JButton aceptar = new JButton("Guardar",
        LogicConstants.getIcon("button_save"));
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        JFileChooser fileChooser = new JFileChooser();
        if (fileChooser.showSaveDialog(SaveGPXDialog.this) == JFileChooser.APPROVE_OPTION) {
          nombre.setText(fileChooser.getSelectedFile()
              .getAbsolutePath());
          aceptar.setEnabled(true);
        }
      }
    });

    dialogo.add(central, BorderLayout.CENTER);

    JPanel botones = new JPanel(new FlowLayout());
    botones.setOpaque(false);

    aceptar.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        String base_url = nombre.getText() + "_";
        for (Layer layer : capas) {
          if (layer instanceof GpxLayer) {
            GpxLayer gpxLayer = (GpxLayer) layer;
            File f = new File(base_url + gpxLayer.name + ".gpx");

            boolean sobreescribir = !f.exists();

            try {
              while (!sobreescribir) {
                String original = f.getCanonicalPath();
                f = checkFileOverwritten(nombre, f);
                sobreescribir = !f.exists()
                    || original.equals(f.getCanonicalPath());
              }
            } catch (NullPointerException t) {
              log.debug("Cancelando creacion de fichero: " + t);
              sobreescribir = false;
            } catch (Throwable t) {
              log.error("Error comprobando la sobreescritura", t);
              sobreescribir = false;
            }

            if (sobreescribir) {
              try {
                f.createNewFile();
              } catch (IOException e1) {
                log.error(e1, e1);
              }
              if (!(f.isFile() && f.canWrite()))
                JOptionPane.showMessageDialog(
                    SaveGPXDialog.this,
                    "No tengo permiso para escribir en "
                        + f.getAbsolutePath());
              else {
                try {
                  OutputStream out = new FileOutputStream(f);
                  GpxWriter writer = new GpxWriter(out);
                  writer.write(gpxLayer.data);
                  out.close();
                } catch (Throwable t) {
                  log.error("Error al escribir el gpx", t);
                  JOptionPane.showMessageDialog(
                      SaveGPXDialog.this,
                      "Ocurrió un error al escribir en "
                          + f.getAbsolutePath());
                }
              }
            } else
              log.error("Por errores anteriores no se escribio el fichero");
          } else
            log.error("Una de las capas no era gpx: " + layer.name);
        }
        SaveGPXDialog.this.dispose();

      }

      private File checkFileOverwritten(final JTextField nombre, File f)
          throws Exception {
        String nueva = JOptionPane.showInputDialog(nombre,
            i18n.getString("savegpxdialog.overwrite"),
            "Sobreescribir archivo", JOptionPane.QUESTION_MESSAGE,
            null, null, f.getCanonicalPath()).toString();
        log.debug("Nueva ruta: " + nueva);
        return new File(nueva);
      }
    });

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

    cancelar.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        SaveGPXDialog.this.dispose();
      }
    });

    aceptar.setEnabled(false);
    botones.add(aceptar);
    botones.add(cancelar);
    dialogo.add(botones, BorderLayout.SOUTH);

    add(dialogo);
    setPreferredSize(new Dimension(300, 200));
    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 windowClosed(WindowEvent e) {
        nombre.setText("");
        nombre.repaint();
      }

      @Override
      public void windowClosing(WindowEvent e) {
        nombre.setText("");
        nombre.repaint();
      }
    });
  }
}
TOP

Related Classes of es.emergya.ui.gis.popups.SaveGPXDialog

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.