/** * Copyright 2011 Intuit Inc. All Rights Reserved */ package com.intuit.tank.proxy.table; /* * #%L * proxy-extension * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.net.InetAddress; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import com.intuit.tank.conversation.Transaction; import com.intuit.tank.proxy.ProxyApp; import com.intuit.tank.proxy.WindowUtil; import com.intuit.tank.proxy.settings.ui.IncludeType; import com.intuit.tank.proxy.settings.ui.ProxyConfigDialog; /** * ShowHostsDialog * * @author dangleton * */ public class ShowHostsDialog extends JDialog { private DefaultListModel model; private ProxyConfigDialog configDialog; /** * @param arg0 */ public ShowHostsDialog(Frame arg0, ProxyConfigDialog configDialog) { super(arg0, true); this.configDialog = configDialog; setSize(new Dimension(300, 400)); setBounds(new Rectangle(getSize())); setPreferredSize(getSize()); setDefaultCloseOperation(HIDE_ON_CLOSE); setLayout(new BorderLayout()); model = new DefaultListModel(); JList hostList = new JList(model); JScrollPane spane = new JScrollPane(hostList, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); hostList.getInsets().set(5, 5, 5, 5); JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING, 5, 5)); panel.add(new JLabel("Hosts")); add(panel, BorderLayout.NORTH); add(spane, BorderLayout.CENTER); WindowUtil.centerOnParent(this); getInsets().set(5, 5, 5, 5); createRightClickMenu(hostList); pack(); } public void createRightClickMenu(final JList table) { final JPopupMenu pm = new JPopupMenu(); for (final IncludeType type : IncludeType.values()) { JMenuItem item = new JMenuItem("Add Host to " + type.getDisplay()); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String value = (String) table.getSelectedValue(); if (value != null) { configDialog.addHostRule(value, type); } } }); pm.add(item); } pm.addSeparator(); for (final IncludeType type : IncludeType.values()) { JMenuItem item = new JMenuItem("Add Domain to " + type.getDisplay()); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String value = (String) table.getSelectedValue(); if (value != null) { configDialog.addHostRule(value, type); } } }); pm.add(item); } table.add(pm); table.addMouseListener(new MouseAdapter() { boolean pressed = false; /** * @{inheritDoc */ @Override public void mousePressed(MouseEvent e) { int index = table.locationToIndex(e.getPoint()); if (index != -1) { table.setSelectedIndex(index); } if (e.isPopupTrigger() && table.getSelectedIndex() != -1) { pressed = true; pm.show(e.getComponent(), e.getX(), e.getY()); } } /** * @{inheritDoc */ @Override public void mouseReleased(MouseEvent e) { if (!pressed && e.isPopupTrigger() && table.getSelectedIndex() != -1) { pm.show(e.getComponent(), e.getX(), e.getY()); } } }); } public void addHost(String host, IncludeType type) { configDialog.addHostRule(host, type); } public void setHosts(Collection<String> hosts) { model.clear(); List<String> list = new ArrayList<String>(hosts); Collections.sort(list); for (String s : list) { model.addElement(s); } } }