OsmAnd/DataExtractionOSM/src/net/osmand/swing/NewTileSourceDialog.java
Victor Shcherb e2ee14856b apply patch from issue 218
git-svn-id: https://osmand.googlecode.com/svn/trunk@719 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
2010-11-28 23:03:47 +00:00

213 lines
7 KiB
Java

package net.osmand.swing;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.osmand.Algoritms;
import net.osmand.LogUtil;
import org.apache.commons.logging.Log;
public class NewTileSourceDialog extends JDialog {
private static final long serialVersionUID = -4862884032977071296L;
private static final Log log = LogUtil.getLog(NewTileSourceDialog.class);
private JButton okButton;
private JButton cancelButton;
private JTextField templateName;
private JTextField templateUrl;
public NewTileSourceDialog(Component parent){
super(JOptionPane.getFrameForComponent(parent), true);
setTitle(Messages.getString("NewTileSourceDialog.CREATE.NEW.TILE")); //$NON-NLS-1$
initDialog();
}
public void showDialog(){
setSize(800, 200);
double x = getParent().getBounds().getCenterX();
double y = getParent().getBounds().getCenterY();
setLocation((int) x - getWidth() / 2, (int) y - getHeight() / 2);
setVisible(true);
}
private void initDialog() {
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 5, 10));
add(pane);
createInputSourceSection(pane);
pane.add(Box.createVerticalGlue());
FlowLayout l = new FlowLayout(FlowLayout.RIGHT);
JPanel buttonsPane = new JPanel(l);
okButton = new JButton("OK"); //$NON-NLS-1$
buttonsPane.add(okButton);
cancelButton = new JButton(Messages.getString("NewTileSourceDialog.CANCEL")); //$NON-NLS-1$
buttonsPane.add(cancelButton);
buttonsPane.setMaximumSize(new Dimension(Short.MAX_VALUE, (int) l.preferredLayoutSize(buttonsPane).getHeight()));
pane.add(buttonsPane);
addListeners();
}
private void createInputSourceSection(JPanel root) {
JPanel panel = new JPanel();
GridBagLayout l = new GridBagLayout();
panel.setLayout(l);
panel.setBorder(BorderFactory.createTitledBorder(Messages.getString("NewTileSourceDialog.INPUT.SOURCE"))); //$NON-NLS-1$
root.add(panel);
JLabel label = new JLabel(Messages.getString("NewTileSourceDialog.NAME")); //$NON-NLS-1$
panel.add(label);
GridBagConstraints constr = new GridBagConstraints();
constr.anchor = GridBagConstraints.WEST;
constr.ipadx = 5;
constr.gridx = 0;
constr.gridy = 0;
l.setConstraints(label, constr);
templateName = new JTextField();
templateName.setText(Messages.getString("NewTileSourceDialog.MAPNIK.EXAMPLE")); //$NON-NLS-1$
panel.add(templateName);
constr = new GridBagConstraints();
constr.fill = GridBagConstraints.HORIZONTAL;
constr.ipadx = 5;
constr.gridx = 1;
constr.gridy = 0;
l.setConstraints(templateName, constr);
label = new JLabel(Messages.getString("NewTileSourceDialog.URL.TEMPLATE")); //$NON-NLS-1$
panel.add(label);
constr = new GridBagConstraints();
constr.ipadx = 5;
constr.ipady = 10;
constr.gridx = 0;
constr.gridy = 1;
constr.anchor = GridBagConstraints.WEST;
l.setConstraints(label, constr);
templateUrl = new JTextField();
// Give hint about wms
templateUrl.setText("http://tile.openstreetmap.org/{$z}/{$x}/{$y}.png"); //$NON-NLS-1$
panel.add(templateUrl);
constr = new GridBagConstraints();
constr.weightx = 1;
constr.fill = GridBagConstraints.HORIZONTAL;
constr.ipadx = 5;
constr.gridx = 1;
constr.gridy = 1;
l.setConstraints(templateUrl, constr);
label = new JLabel(Messages.getString("NewTileSourceDialog.ADD.WMS.SERVICE")); //$NON-NLS-1$
panel.add(label);
constr = new GridBagConstraints();
constr.ipadx = 5;
constr.ipady = 10;
constr.gridx = 0;
constr.gridy = 2;
constr.anchor = GridBagConstraints.WEST;
l.setConstraints(label, constr);
label = new JLabel();
// Give hint about wms
label.setText("http://whoots.mapwarper.net/tms/{$z}/{$x}/{$y}/{layer}/http://path.to.wms.server"); //$NON-NLS-1$
panel.add(label);
constr = new GridBagConstraints();
constr.weightx = 1;
constr.fill = GridBagConstraints.HORIZONTAL;
constr.ipadx = 5;
constr.gridx = 1;
constr.gridy = 2;
l.setConstraints(label, constr);
panel.setMaximumSize(new Dimension(Short.MAX_VALUE, panel.getPreferredSize().height));
}
private void addListeners(){
okButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(okPressed()){
setVisible(false);
}
}
});
cancelButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
}
public boolean okPressed(){
if(Algoritms.isEmpty(templateName.getText())){
JOptionPane.showMessageDialog(this, Messages.getString("NewTileSourceDialog.SPECIFY.TEMPLATE.NAME") , Messages.getString("NewTileSourceDialog.ERROR.CREATING.NEW.TILE.SRC"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$
return false;
}
if(Algoritms.isEmpty(templateUrl.getText())){
JOptionPane.showMessageDialog(this, Messages.getString("NewTileSourceDialog.SPECIFY.TEMPLATE.URL") , Messages.getString("NewTileSourceDialog.ERROR.CREATING.NEW.TILE.SRC"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$
return false;
}
String url = templateUrl.getText();
if(url.indexOf("{$x}") == -1 || url.indexOf("{$y}") == -1 || url.indexOf("{$z}") == -1){ //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
JOptionPane.showMessageDialog(this, Messages.getString("NewTileSourceDialog.SPECIFY.ALL.PLACEHLDRS") , Messages.getString("NewTileSourceDialog.ERROR.CREATING.NEW.TILE.SRC"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$ //$NON-NLS-2$
return false;
}
File tilesDirectory = DataExtractionSettings.getSettings().getTilesDirectory();
if(tilesDirectory != null){
File dir = new File(tilesDirectory, templateName.getText());
if(dir.mkdirs()){
try {
FileOutputStream ous = new FileOutputStream(new File(dir, "url")); //$NON-NLS-1$
ous.write(url.getBytes("UTF-8")); //$NON-NLS-1$
ous.close();
} catch (UnsupportedEncodingException e) {
log.error(Messages.getString("NewTileSourceDialog.ERROR.CREATING.NEW.TILE.SRC") +" " + url, e); //$NON-NLS-1$
} catch (IOException e) {
log.error(Messages.getString("NewTileSourceDialog.ERROR.CREATING.NEW.TILE.SRC") +" " + url, e); //$NON-NLS-1$
}
}
}
return true;
}
}