Package ch.rakudave.jnetmap.view.properties

Source Code of ch.rakudave.jnetmap.view.properties.ConnectionProperties

package ch.rakudave.jnetmap.view.properties;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import ch.rakudave.jnetmap.controller.Controller;
import ch.rakudave.jnetmap.controller.command.Command;
import ch.rakudave.jnetmap.model.Connection;
import ch.rakudave.jnetmap.model.IF.NetworkIF;
import ch.rakudave.jnetmap.model.device.Device;
import ch.rakudave.jnetmap.model.device.Device.Type;
import ch.rakudave.jnetmap.util.Icons;
import ch.rakudave.jnetmap.util.Lang;
import ch.rakudave.jnetmap.util.SwingHelper;
import ch.rakudave.jnetmap.util.logging.Logger;
import ch.rakudave.jnetmap.view.components.TabPanel;
import ch.rakudave.jnetmap.view.jung.EdgeTransformers;
import ch.rakudave.jnetmap.view.preferences.PreferencePanel;
import edu.uci.ics.jung.graph.util.Pair;

@SuppressWarnings("serial")
public class ConnectionProperties extends JDialog
  public ConnectionProperties(final Frame owner, final Connection c) {
    super(owner, Lang.getNoHTML("connection.properties"), ModalityType.DOCUMENT_MODAL);
    setLayout(new BorderLayout(5, 5));
    setPreferredSize(new Dimension(800,350));
    setMaximumSize(new Dimension(850,400));
    Pair<Device> pair = Controller.getCurrentMap().getEndpoints(c);
    NetworkIF nif1 = pair.getFirst().getInterfaceFor(c), nif2 = pair.getSecond().getInterfaceFor(c);
    JPanel deviceNames = new JPanel(new GridLayout(1,3));
      JLabel leftDevice = new JLabel(pair.getFirst().getName(), (Type.Other.equals(pair.getFirst().getType()))?
          Icons.fromBase64(pair.getFirst().getOtherID()):Icons.getCisco(pair.getFirst().getType().toString().toLowerCase()), JLabel.CENTER);
        leftDevice.setHorizontalTextPosition(JLabel.CENTER);
        leftDevice.setVerticalTextPosition(JLabel.BOTTOM);
      JPanel centerLine = new JPanel() {
        @Override
        public void paint(Graphics g) {
          super.paint(g);
          Graphics2D g2d = (Graphics2D) g;
          g2d.setStroke(EdgeTransformers.strokeTransformer().transform(c));
          g2d.setPaint(c.getStatus().getColor());
          g2d.draw(new Line2D.Double(new Point(0, 32), new Point(super.getWidth(), 32)));
        }
      };
      JLabel rightDevice = new JLabel(pair.getSecond().getName(), (Type.Other.equals(pair.getSecond().getType()))?
          Icons.fromBase64(pair.getSecond().getOtherID()):Icons.getCisco(pair.getSecond().getType().toString().toLowerCase()), JLabel.CENTER);
        rightDevice.setHorizontalTextPosition(JLabel.CENTER);
        rightDevice.setVerticalTextPosition(JLabel.BOTTOM);
      deviceNames.add(leftDevice);
      deviceNames.add(centerLine);
      deviceNames.add(rightDevice);
    JPanel centerWrapper = new JPanel(new GridLayout(1, 3));
      final PreferencePanel leftInterface = InterfaceProperties.getInnerPanel(owner, nif1);
      JPanel connectionPanel = new JPanel(new GridLayout(0, 1, 5, 5));
        connectionPanel.setBorder(BorderFactory.createEmptyBorder(0, 50, 0, 50));
        final JComboBox connectionType = new JComboBox(Connection.Type.values());
          connectionType.setSelectedItem(c.getType());
        final JTextField bandwidth = new JTextField(String.valueOf(c.getBandwidth()));
        connectionPanel.add(new JLabel(Lang.get("connection.type")));
        connectionPanel.add(connectionType);
        connectionPanel.add(new JLabel(Lang.get("connection.bandwidth")));
        connectionPanel.add(bandwidth);
        connectionPanel.add(new JLabel(""));
        connectionPanel.add(new JLabel(""));
        connectionPanel.add(new JLabel(""));
      final PreferencePanel rightInterface = InterfaceProperties.getInnerPanel(owner, nif2);
      centerWrapper.add(leftInterface);
      centerWrapper.add(connectionPanel);
      centerWrapper.add(rightInterface);
    JPanel bottomRow = new JPanel(new FlowLayout(FlowLayout.TRAILING, 5, 5));
      final JDialog _this = this;
      JButton cancel = new JButton(Lang.get("action.cancel"), Icons.get("cancel"));
        cancel.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            _this.dispose();
          }
        });
       
      JButton ok = new JButton(Lang.get("action.ok"), Icons.get("ok"));
        ok.setPreferredSize(cancel.getPreferredSize());
        ok.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            leftInterface.save();
            rightInterface.save();
            //TODO skip new command if nothing has changed
            Controller.getCurrentMap().getHistory().execute(new Command() {
              Connection.Type oltType = c.getType(), newType = (Connection.Type) connectionType.getSelectedItem();
              double oldBandwidth = c.getBandwidth(), newBandwidth;
              @Override
              public Object undo() {
                c.setType(oltType);
                c.setBandwidth(oldBandwidth);
                return null;
              }
             
              @Override
              public Object redo() {
                try {
                  newBandwidth = Double.valueOf(bandwidth.getText());
                } catch (NumberFormatException e) {
                  Logger.warn(bandwidth.getText() + " is not a number!", e);
                }
                c.setType(newType);
                c.setBandwidth(newBandwidth);
                return null;
              }
            });
            _this.dispose();
            if (TabPanel.getCurrentTab() != null) TabPanel.getCurrentTab().repaint();
          }
        });
      bottomRow.add(cancel);
      bottomRow.add(ok);
    add(deviceNames, BorderLayout.NORTH);
    add(centerWrapper, BorderLayout.CENTER);
    add(bottomRow, BorderLayout.SOUTH);
    pack();
    SwingHelper.centerTo(owner, this);
    bandwidth.requestFocus();
    setVisible(true);
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.view.properties.ConnectionProperties

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.