/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ro.nextreports.designer.server;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import ro.nextreports.designer.ui.BaseDialog;
import ro.nextreports.designer.util.I18NSupport;
import ro.nextreports.designer.util.ImageUtil;
import ro.nextreports.designer.util.Show;
public class ServerSelectionPanel extends JPanel {
private JDialog dialog;
private JDialog parent;
private JComboBox serverComboBox;
private JButton serverbuttonAdd;
private JButton serverbuttonEdit;
private JButton serverbuttonDelete;
private Dimension buttonDim = new Dimension(20, 20);
private List<Server> servers;
private ServerHandler serverHandler;
public ServerSelectionPanel() {
this(new ServerHandler());
}
public ServerSelectionPanel(ServerHandler serverHandler) {
this.serverHandler = serverHandler;
init();
}
public void setParent(JDialog parent) {
this.parent = parent;
}
public Server getServer() {
return (Server) serverComboBox.getSelectedItem();
}
public void setServer(String url) {
for (Server server : servers) {
if (server.getUrl().equals(url)) {
serverComboBox.setSelectedItem(server);
break;
}
}
}
// edit report from server
public void setServerRequest(String url) {
for (Server server : servers) {
if (server.getUrl().equals(url)) {
serverComboBox.setSelectedItem(server);
disablePanel();
return;
}
}
Server s = new Server("#NextServer#", url);
serverComboBox.addItem(s);
serverComboBox.setSelectedItem(s);
disablePanel();
}
private void disablePanel() {
serverComboBox.setEnabled(false);
serverbuttonAdd.setEnabled(false);
serverbuttonEdit.setEnabled(false);
serverbuttonDelete.setEnabled(false);
}
private void init() {
servers = serverHandler.getServers();
serverComboBox = new JComboBox(servers.toArray());
serverComboBox.setRenderer(new ServerRenderer());
serverComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
selection();
}
});
serverbuttonAdd = new JButton(ImageUtil.getImageIcon("server_add"));
serverbuttonAdd.setPreferredSize(buttonDim);
serverbuttonAdd.setMaximumSize(buttonDim);
serverbuttonAdd.setMinimumSize(buttonDim);
serverbuttonAdd.setToolTipText(I18NSupport.getString("wizard.publish.login.server.add"));
serverbuttonAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
createServerDialog(true);
}
});
serverbuttonEdit = new JButton(ImageUtil.getImageIcon("server_edit"));
serverbuttonEdit.setPreferredSize(buttonDim);
serverbuttonEdit.setMaximumSize(buttonDim);
serverbuttonEdit.setMinimumSize(buttonDim);
serverbuttonEdit.setToolTipText(I18NSupport.getString("wizard.publish.login.server.edit"));
serverbuttonEdit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
createServerDialog(false);
}
});
serverbuttonDelete = new JButton(ImageUtil.getImageIcon("server_delete"));
serverbuttonDelete.setPreferredSize(buttonDim);
serverbuttonDelete.setMaximumSize(buttonDim);
serverbuttonDelete.setMinimumSize(buttonDim);
serverbuttonDelete.setToolTipText(I18NSupport.getString("wizard.publish.login.server.delete"));
serverbuttonDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
deleteServer();
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
buttonPanel.add(serverbuttonAdd);
buttonPanel.add(Box.createRigidArea(new Dimension(5, 5)));
buttonPanel.add(serverbuttonEdit);
buttonPanel.add(Box.createRigidArea(new Dimension(5, 5)));
buttonPanel.add(serverbuttonDelete);
setLayout(new GridBagLayout());
add(serverComboBox, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
add(buttonPanel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 5, 0, 0), 0, 0));
}
private void createServerDialog(final boolean add) {
final JTextField nameTextField = new JTextField();
nameTextField.setColumns(20);
final JTextField urlTextField = new JTextField();
Server editServer = null;
if (!add) {
editServer = (Server) serverComboBox.getSelectedItem();
if (editServer != null) {
nameTextField.setText(editServer.getName());
urlTextField.setText(editServer.getUrl());
} else {
return;
}
} else {
urlTextField.setText("http://<server>:<port>/nextreports-server");
}
JPanel serverPanel = new JPanel();
serverPanel.setLayout(new GridBagLayout());
serverPanel.add(new JLabel(I18NSupport.getString("wizard.publish.login.server.name")), new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 5, 5, 0), 0, 0));
serverPanel.add(nameTextField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 5, 5), 0, 0));
serverPanel.add(new JLabel(I18NSupport.getString("wizard.publish.login.server.url")), new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(5, 5, 5, 0), 0, 0));
serverPanel.add(urlTextField, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(5, 5, 5, 5), 0, 0));
final Server fserver = editServer;
dialog = new BaseDialog(serverPanel, I18NSupport.getString("wizard.publish.login.server"), true) {
protected boolean ok() {
if (nameTextField.getText().trim().equals("")) {
Show.info(this, I18NSupport.getString("wizard.publish.login.server.name.error"));
return false;
}
String serverName = nameTextField.getText();
List<Server> servers = serverHandler.getServers();
if ((add && serverHandler.serverExists(serverName)) ||
(!add && !serverName.equals(fserver.getName()) && serverHandler.serverExists(serverName))) {
Show.info(this, I18NSupport.getString("wizard.publish.login.server.name.error.exists", serverName));
return false;
}
if (urlTextField.getText().trim().equals("")) {
Show.info(this, I18NSupport.getString("wizard.publish.login.server.url.error"));
return false;
}
Server server = new Server(serverName, urlTextField.getText());
if (add) {
servers.add(0, server);
} else {
servers.remove(fserver);
servers.add(0, server);
}
serverHandler.saveServers(servers);
serverComboBox.removeAllItems();
for (Server s : servers) {
serverComboBox.addItem(s);
}
return true;
}
};
dialog.pack();
Show.centrateComponent(parent, dialog);
dialog.setVisible(true);
}
public void deleteServer() {
Server server = (Server) serverComboBox.getSelectedItem();
if (server != null) {
int option = JOptionPane.showConfirmDialog(dialog,
I18NSupport.getString("wizard.publish.login.server.delete.confirm"), "",
JOptionPane.YES_NO_OPTION);
if (option != JOptionPane.YES_OPTION) {
return;
}
List<Server> servers = serverHandler.getServers();
servers.remove(server);
serverHandler.saveServers(servers);
serverComboBox.removeAllItems();
for (Server s : servers) {
serverComboBox.addItem(s);
}
}
}
public class ServerRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (value != null) {
Server server = (Server) value;
value = server.getFullName();
}
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
}
public void selection() {
}
}