Package ch.rakudave.jnetmap.view.properties

Source Code of ch.rakudave.jnetmap.view.properties.DeviceProperties$IFListRenderer

package ch.rakudave.jnetmap.view.properties;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.BorderFactory;
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.JScrollPane;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;

import ch.rakudave.jnetmap.controller.Controller;
import ch.rakudave.jnetmap.controller.command.Command;
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;

@SuppressWarnings("serial")
public class DeviceProperties extends JDialog {
  private Device d;
 
  public DeviceProperties(final Frame owner, Device device, final boolean isNew) {
    super(owner, Lang.getNoHTML("device.properties"), ModalityType.DOCUMENT_MODAL);
    d = device;
    setLayout(new BorderLayout(5, 5));
    setPreferredSize(new Dimension(350,500));
    final Type oldType = (d.getType() != null)?d.getType():Type.Workstation;
    JPanel iconPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
      final JLabel deviceIcon = new JLabel((Type.Other.equals(oldType))?Icons.fromBase64(d.getOtherID()):Icons.getCisco(oldType.toString().toLowerCase()));
      iconPanel.add(Box.createVerticalStrut(64));
      iconPanel.add(deviceIcon);
      iconPanel.add(Box.createVerticalStrut(64));
    JPanel centerWrapper = new JPanel(new BorderLayout());
      centerWrapper.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
      JPanel propPanel = new JPanel(new GridLayout(0, 2, 5, 5));
        final JTextField otherID = new JTextField(d.getOtherID());
        final JComboBox typeCombo = new JComboBox(Device.Type.values());
          typeCombo.setSelectedItem(oldType);
          typeCombo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              if ("other".equals(typeCombo.getSelectedItem().toString().toLowerCase())) {
                File f = SwingHelper.openDialog(owner, new FileNameExtensionFilter("PNG Image", "png"));
                if (f != null) {
                  String base64 = Icons.getBase64(f);
                  otherID.setText(base64);
                  deviceIcon.setIcon(Icons.fromBase64(base64));
                } else {
                  deviceIcon.setIcon(Icons.getCisco(oldType.toString().toLowerCase()));
                  typeCombo.setSelectedItem(oldType);
                }
              } else {
                deviceIcon.setIcon(Icons.getCisco(typeCombo.getSelectedItem().toString().toLowerCase()));
                otherID.setText("");
              }
            }
          });
        final JTextField deviceName = new JTextField(d.getName());
        final JTextField deviceDesc = new JTextField(d.getDesctription());
        final JTextField deviceLocation = new JTextField(d.getLocation());
        final JTextField deviceVendor = new JTextField(d.getVendor());
        final JTextField deviceModel = new JTextField(d.getModel());
        propPanel.add(new JLabel(Lang.get("device.type"))); propPanel.add(typeCombo);
        propPanel.add(new JLabel(Lang.get("device.name"))); propPanel.add(deviceName);
        propPanel.add(new JLabel(Lang.get("device.description"))); propPanel.add(deviceDesc);
        propPanel.add(new JLabel(Lang.get("device.location"))); propPanel.add(deviceLocation);
        propPanel.add(new JLabel(Lang.get("device.vendor"))); propPanel.add(deviceVendor);
        propPanel.add(new JLabel(Lang.get("device.model"))); propPanel.add(deviceModel);
        propPanel.add(new JLabel(Lang.get("device.interfaces"))); propPanel.add(new JLabel());
      final JList interfaceList = new JList(d.getInterfaces().toArray());
        interfaceList.setCellRenderer(new IFListRenderer());
      JPanel interfaceManipulators = new JPanel();
        interfaceManipulators.setLayout(new BoxLayout(interfaceManipulators, BoxLayout.PAGE_AXIS));
        JButton removeInterface = new JButton(Lang.get("action.remove"), Icons.get("remove"));
          removeInterface.setPreferredSize(new Dimension(100, 30));
          removeInterface.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              if (interfaceList.getSelectedValue() == null) return;
              if (JOptionPane.showConfirmDialog(owner, Lang.get("message.confirm.delete")
                  .replaceAll("%name%", ((NetworkIF) interfaceList.getSelectedValue()).getName()),
                  Lang.getNoHTML("action.delete"), JOptionPane.YES_NO_OPTION) == 1) return;
              Controller.getCurrentMap().removeEdge(((NetworkIF) interfaceList.getSelectedValue()).getConnection());
              interfaceList.setListData(d.getInterfaces().toArray());
            }
          });
        JButton editInterface = new JButton(Lang.get("action.edit"), Icons.get("edit"));
          editInterface.setPreferredSize(new Dimension(100, 30));
          editInterface.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              if (interfaceList.getSelectedValue() == null) return;
              new InterfaceProperties(owner, ((NetworkIF) interfaceList.getSelectedValue()));
              interfaceList.setListData(d.getInterfaces().toArray());
            }
          });
        interfaceManipulators.add(removeInterface);
        interfaceManipulators.add(editInterface);
        interfaceManipulators.add(Box.createVerticalGlue());
      centerWrapper.add(propPanel, BorderLayout.NORTH);
      centerWrapper.add(new JScrollPane(interfaceList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), BorderLayout.CENTER);
      centerWrapper.add(interfaceManipulators, BorderLayout.EAST);
    JPanel bottomRow = new JPanel(new FlowLayout(FlowLayout.RIGHT, 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) {
            final Type newType = (Type)typeCombo.getSelectedItem();
            final String oldName = d.getName(), newName = deviceName.getText(),
              oldID = d.getOtherID(), newID = otherID.getText(),
              oldDesc = d.getDesctription(), newDesc = deviceDesc.getText(),
              oldLocation = d.getLocation(), newLocation = deviceLocation.getText(),
              oldVendor = d.getVendor(), newVentor = deviceVendor.getText(),
              oldModel = d.getModel(), newModel = deviceModel.getText();
            //TODO skip new command if nothing has changed
            Controller.getCurrentMap().getHistory().execute(new Command() {
              @Override
              public Object undo() {
                d.setType(oldType);
                d.setOtherID(oldID);
                d.setName(oldName);
                d.setDescription(oldDesc);
                d.setLocation(oldLocation);
                d.setVendor(oldVendor);
                d.setModel(oldModel);
                return null;
              }
              @Override
              public Object redo() {
                d.setType(newType);
                d.setOtherID(newID);
                d.setName(newName);
                d.setDescription(newDesc);
                d.setLocation(newLocation);
                d.setVendor(newVentor);
                d.setModel(newModel);
                return null;
              }
            });
            _this.dispose();
            if (TabPanel.getCurrentTab() != null) TabPanel.getCurrentTab().repaint();
          }
        });
      if (!isNew) bottomRow.add(cancel);
      bottomRow.add(ok);
    add(iconPanel, BorderLayout.NORTH);
    add(centerWrapper, BorderLayout.CENTER);
    add(bottomRow, BorderLayout.SOUTH);
    pack();
    SwingHelper.centerTo(owner, this);
    deviceName.requestFocus();
    setVisible(true);
  }

  private class IFListRenderer extends DefaultListCellRenderer {
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      JLabel label = (JLabel) super.getListCellRendererComponent(list,
          value, index, isSelected, cellHasFocus);
      if (value == null) return label;
      NetworkIF nif = (NetworkIF) value;
      try {
        label.setText(nif.toString() + " -> " + Controller.getCurrentMap().getOpposite(d, nif.getConnection()));
      } catch (Exception e) {
        Logger.debug("Failed to get opposite of "+nif.toString(), e);
      }
      return label;
    }
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.view.properties.DeviceProperties$IFListRenderer

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.