Java tutorial
/* * GNetWatch * Copyright 2006, 2007, 2008 Alexandre Fenyo * gnetwatch@fenyo.net * * This file is part of GNetWatch. * * GNetWatch is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * GNetWatch is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNetWatch; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // icones : // http://www.kde-look.org/content/show.php?content=8341 // http://www.oxygen-icons.org/?cat=3 // http://icon-king.com/?p=34 // http://www.kde-artists.org/ // http://www.kde-look.org/content/show.php?content=8341 package net.fenyo.gnetwatch.GUI; import java.io.*; import java.util.*; import java.net.*; import javax.swing.*; import net.fenyo.gnetwatch.*; import net.fenyo.gnetwatch.actions.*; import net.fenyo.gnetwatch.activities.*; import net.fenyo.gnetwatch.targets.*; import net.fenyo.gnetwatch.data.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.configuration.*; import org.apache.commons.configuration.tree.xpath.*; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.custom.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.browser.*; import org.hibernate.Session; import org.snmp4j.security.SecurityLevel; import org.snmp4j.util.TableEvent; /** * Manages the main GUI. * @author Alexandre Fenyo * @version $Id: GUI.java,v 1.139 2008/12/05 13:17:38 fenyo Exp $ */ public class GUI implements Runnable { private static Log log = LogFactory.getLog(GUI.class); private Config config; private Background background; private Main main; private SNMPManager snmp_manager; private Views views; private Synchro synchro; private AwtGUI awtGUI = null; // GUI/SWT/AWT objects private Display display = null; // main Shell private Shell shell = null; private GridLayout layout = null; // Menu private Menu menu_bar = null, menu_file = null; private MenuItem menu_item_file = null; private MenuItem menu_item_exit = null; private MenuItem menu_item_merge_now = null; private MenuItem menu_item_hide = null; private MenuItem menu_item_show = null; private MenuItem menu_item_clear = null; // Toolbar private ToolBar toolbar = null; private GridData toolbar_grid_data = null; // vertical Sash for horizontal Composite and text console private SashForm vertical_sash = null; private GridData vertical_sash_grid_data = null; // horizontal Composite private Composite horizontal_composite = null; private GridLayout horizontal_composite_layout = null; // text console private Browser text_console = null; private StringBuffer text_console_content = new StringBuffer(); // groups composite, groups and childs private Composite groups_composite = null; private RowLayout groups_composite_layout = null; private GridData groups_composite_grid_data = null; private Group group_target_subnet = null, group_target_range = null, group_target_host = null, group_target_group = null, group_target_host6 = null; // private Group group_data = null; private GridLayout group_target_subnet_layout = null, group_target_range_layout = null, group_target_host_layout = null, group_target_group_layout = null, group_target_host6_layout = null; // private GridLayout group_data_layout = null; private Text target_subnet_address = null, target_subnet_mask = null; private Text target_range_begin = null, target_range_end = null; private Button target_subnet_push = null, target_range_push = null; private Text target_host_value = null; private Text target_group_value = null; private Text target_host6_value = null; private Button target_host_push = null, target_group_push = null, target_host6_push = null; private TargetGroup user_defined = null; private final int bglevel = 100; // horizontal Sash for Tree and Label private SashForm horizontal_sash = null; private GridData horizontal_sash_grid_data = null; // Tree private Tree tree = null; private TreeColumn tree_column1 = null, tree_column2 = null, tree_column3 = null; // bottom status private StyledText status = null; private GridData status_grid_data = null; // progress bar private ProgressBar progress_bar = null; private GridData progress_bar_grid_data = null; private CTabFolder tab_folder = null; // General variables private Thread thread = null; private final boolean GUI_created[] = { false }; // images private Image image_folder = null, image_oscillo = null, image_exec = null, image_watch = null, image_host = null, image_host6 = null, image_host_snmp = null, image_host6_snmp = null, image_interface = null, image_queue = null, image_network = null, image_multirow = null; // visuals private VisualElement visual_root = null; private VisualElement visual_queues = null; private VisualElement visual_transient = null; private TargetGroup visual_thishost = null; // private VisualElement visual_persistent = null; private TargetGroup visual_transient_all = null; private TargetGroup visual_transient_networks = null; // private VisualElement visual_persistent_all = null; private Label label1 = null, label2 = null, label3 = null, label4 = null, label5 = null, label6 = null, label7 = null; private MenuItem menu_item_add_host = null, menu_item_add_host6 = null, menu_item_add_range = null, menu_item_add_network = null, menu_item_add_group = null, menu_item_remove_target = null; private ToolItem item_add_host = null, item_add_network = null, item_discover_start = null, item_discover_stop = null, item_remove_target = null, item_add_ping = null, item_remove_action = null; private MenuItem menu_item_credentials = null, menu_item_ip_options = null, menu_item_http_options = null, menu_item_generic_options = null; private MenuItem menu_item_add_ping = null, menu_item_add_process = null, menu_item_add_source = null, menu_item_add_flood = null, menu_item_add_http = null, menu_item_explore_snmp = null, menu_item_explore_nmap = null, menu_item_remove_action = null, menu_item_remove_action_ping = null, menu_item_remove_action_flood = null, menu_item_remove_action_explore = null, menu_item_remove_view = null, menu_item_remove_view_ping = null, menu_item_remove_view_flood = null, menu_item_remove_view_explore = null; VisualElement previous_selection = null; // synchronization object for access and modifications to the tree of visual elements public Object sync_tree = new Object(); private final Map<Target, Target> target_map = new HashMap<Target, Target>(); private CTabItem tab_item1, tab_item2; private int text_console_do_not_go_on_top = 0; /** * Return the configuration. * @param none. * @return Config configuration. */ public Config getConfig() { return config; } /** * Return the root shell. * @param none. * @return Shell shell. */ public Shell getShell() { return shell; } /** * Computes the desired background color. * @param none. * @return background color. */ public Color getBackgroundColor() { return new Color(display, (int) Math.min((int) shell.getBackground().getRed() * 1.05, 255), (int) Math.min((int) shell.getBackground().getGreen() * 1.05, 255), (int) Math.min((int) shell.getBackground().getBlue() * 1.05, 255)); } /** * Returns the SNMPManager instance. * @param none. * @return SNMPManager instance. */ public SNMPManager getSNMPManager() { return snmp_manager; } /** * Returns the Synchro instance. * @param none. * @return Synchro instance. */ public Synchro getSynchro() { return synchro; } /** * Returns the multithreaded synchronization lock for GUI creation. * @param none. * @return lock. */ public boolean[] getGUICreated() { return GUI_created; } /** * Gets the tree node acting as the visual transient root. * @param none. * @return VisualElement visual transient element. */ public VisualElement getVisualTransient() { return visual_transient; } /** * Gets the tree node acting as the "local host" root. * @param none. * @return TargetGroup visual transient node. */ public TargetGroup getVisualThisHost() { return visual_thishost; } /** * Gets the tree node acting as the "every host" root. * @param none. * @return TargetGroup "every host" node. */ public TargetGroup getVisualTransientAll() { return visual_transient_all; } /** * Gets the tree node acting as the "every network" root. * @param none. * @return TargetGroup "every network" node. */ public TargetGroup getVisualTransientNetworks() { return visual_transient_networks; } /** * Returns the AwtGUI instance used to build AWT frames that host Java2D-drawn components. * @param none. * @return AwtGUI AWT gui. */ // GUI thread public AwtGUI getAwtGUI() { return awtGUI; } /** * Removes a target. * @param target target to remove. * @return void. */ // GUI thread public void dropTargetInstance(final VisualElement target) { target_map.remove(target); } /** * Returns the canonical instance of a target and registers this target as the canonical one if needed. * The canonical instance is an instance that equals to this one * and that was the first created. * @param target instance. * @return Target canonical instance. */ // GUI thread // lock survey: sync_tree << synchro << HERE public Target getCanonicalInstance(final Target target) { final Target canonic_instance = target_map.get(target); if (canonic_instance == null) { target_map.put(target, target); return target; } else return canonic_instance; } /** * Checks that this instance has already been created. * @param target checks against this instance. * @return true if this instance has already been created. */ // Capture thread // lock survey : sync_tree << synchro << HERE // lock survey : sync_tree << HERE public boolean containsCanonicalInstance(final Target target) { return target_map.get(target) != null; } /** * Execute this operation in the future in the SWT thread. * @param r operation to execute. * @return void. */ // any thread public void asyncExecIfNeeded(final Runnable r) { try { // If thread is null, the thread GUI is not started. if (thread == null || Thread.currentThread().equals(thread)) r.run(); else if (config != null && config.isEnd() == false && display != null && !display.isDisposed()) display.asyncExec(r); } catch (final Exception ex) { if (log != null && ex != null) log.error(ex); } } public void asyncExec(final Runnable r) { try { if (config != null && config.isEnd() == false && display != null && !display.isDisposed()) display.asyncExec(r); } catch (final Exception ex) { log.error(ex); } } /** * Returns the tab folder. * @param none. * @return CTabFolder tab folder. */ // GUI thread public CTabFolder getTabFolder() { return tab_folder; } /** * Returns the picture "image folder". * @param none. * @return Image picture. */ // GUI thread public Image getImageFolder() { return image_folder; } /** * Returns the picture "exec". * @param none. * @return Image picture. */ // GUI thread public Image getImageExec() { return image_exec; } /** * Returns the picture "oscilloscope". * @param none. * @return Image picture. */ // GUI thread public Image getImageOscillo() { return image_oscillo; } /** * Returns the picture "multirow". * @param none. * @return Image picture. */ // GUI thread public Image getImageMultiRow() { return image_multirow; } /** * Returns the picture "watch". * @param none. * @return Image picture. */ // GUI thread public Image getImageWatch() { return image_watch; } /** * Returns the picture "IPv4 host". * @param none. * @return Image picture. */ // GUI thread public Image getImageHost() { return image_host; } /** * Returns the picture "IPv6 host". * @param none. * @return Image picture. */ // GUI thread public Image getImageHost6() { return image_host6; } /** * Returns the picture "interface". * @param none. * @return Image picture. */ // GUI thread public Image getImageInterface() { return image_interface; } /** * Returns the picture "queue". * @param none. * @return Image picture. */ // GUI thread public Image getImageQueue() { return image_queue; } /** * Returns the picture "network". * @param none. * @return Image picture. */ // GUI thread public Image getImageNetwork() { return image_network; } /** * Returns the picture "IPv4 SNMP host". * @param none. * @return Image picture. */ // GUI thread // lock survey : sync_tree << synchro << HERE public Image getImageHostSNMP() { return image_host_snmp; } /** * Returns the picture "IPv6 SNMP host". * @param none. * @return Image picture. */ // GUI thread public Image getImageHost6SNMP() { return image_host6_snmp; } /** * Resets the status string. * May be called from any thread. * @param none. * @return void. */ public void setStatus(final String str) { asyncExecIfNeeded(new Runnable() { public void run() { if (status.isDisposed() == false) status.setText(" " + str); } }); } /** * Sets the progress bar position. * @param position position. * @return void. */ public void setProgress(final int position) { asyncExecIfNeeded(new Runnable() { public void run() { progress_bar.setSelection(position); } }); } /** * Encapsulates an html part into a face definition. * @param html html source part. * @return embeded html part. */ public String htmlFace(final String html) { return "<FONT FACE='Verdana' size='-2'>" + html + "</FONT>"; } /** * Adds a string to the console. * May be called from any thread. * @param none. * @return void. */ public void appendConsole(final String str) { asyncExecIfNeeded(new Runnable() { public void run() { text_console_content.append(str); text_console.setText("<html><body bgcolor='#" + String.format("%2x%2x%2x", getBackgroundColor().getRed(), getBackgroundColor().getGreen(), getBackgroundColor().getBlue()) + "'>" + htmlFace(text_console_content.toString()) + "</body></html>"); } }); } /** * Clear console content. * May be called from any thread. * @param none. * @return void. */ public void clearConsole() { asyncExecIfNeeded(new Runnable() { public void run() { text_console_content.setLength(0); text_console.setText("<html><body bgcolor='#" + String.format("%2x%2x%2x", getBackgroundColor().getRed(), getBackgroundColor().getGreen(), getBackgroundColor().getBlue()) + "'>" + htmlFace(text_console_content.toString()) + "</body></html>"); } }); } /** * Check that the selection is under the transient node. * @param none. * @return true if the selection is under the transient node. */ // GUI thread private boolean isSelectionTransient() { if (tree.getSelectionCount() == 1) { TreeItem current_item = tree.getSelection()[0]; while (current_item != null && visual_transient.isThisOurTreeItem( current_item) == false /* && visual_persistent.isThisOurTreeItem(current_item) == false */) current_item = current_item.getParentItem(); if (visual_transient.isThisOurTreeItem(current_item)) return true; } return false; } // GUI thread /* private boolean isSelectionPersistent() { if (tree.getSelectionCount() == 1) { TreeItem current_item = tree.getSelection()[0]; while (current_item != null && visual_transient.isThisOurTreeItem(current_item) == false && visual_persistent.isThisOurTreeItem(current_item) == false) current_item = current_item.getParentItem(); if (visual_persistent.isThisOurTreeItem(current_item)) return true; } return false; } */ /** * Expands every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void expandAll(final TreeItem item) { synchronized (sync_tree) { item.setExpanded(true); for (final TreeItem it : item.getItems()) expandAll(it); } } /** * Merges every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void mergeAll(final TreeItem item) { synchronized (sync_tree) { item.setExpanded(false); for (final TreeItem it : item.getItems()) mergeAll(it); } } /** * Adds an action on every node under a specified root node. * @param item root node. * @param clazz action class. * @return void. */ // GUI thread private void addActionAll(final TreeItem item, Class clazz) { synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { for (final VisualElement elt : VisualElement.getSubElements(item, Target.class)) { final Target target = (Target) elt; boolean already_has_action = false; for (final VisualElement child : target.getChildren()) if (clazz.isInstance(child)) { already_has_action = true; break; } if (already_has_action == false) { net.fenyo.gnetwatch.actions.Action action; try { action = (net.fenyo.gnetwatch.actions.Action) clazz.newInstance(); } catch (final IllegalAccessException ex) { log.error("Exception", ex); return; } catch (final InstantiationException ex) { log.error("Exception", ex); return; } action.setTarget(target); action.setBackground(background); if (target.canManageThisChild(action)) try { background.addActionQueue(action); action.setParent(this, target); session.save(action); } catch (final GeneralException ex) { log.error("Exception", ex); } } } session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } /** * Adds a ping action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void addPingAll(final TreeItem item) { addActionAll(item, ActionPing.class); } /** * Adds a process action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void addProcessAll(final TreeItem item) { addActionAll(item, ActionGenericProcess.class); } /** * Adds a source action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void addSourceAll(final TreeItem item) { addActionAll(item, ActionGenericSrc.class); } /** * Adds a flood action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void addFloodAll(final TreeItem item) { addActionAll(item, ActionFlood.class); } /** * Adds a flood action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void addHTTPAll(final TreeItem item) { addActionAll(item, ActionHTTP.class); } /** * Adds an "SNMP explore" action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void exploreSNMP(final TreeItem item) { addActionAll(item, ActionSNMP.class); } /** * Adds an "nmap explore" action on every nodes under a specified root node. * @param item root node. * @return void. */ // GUI thread private void exploreNmap(final TreeItem item) { addActionAll(item, ActionNmap.class); } /** * Synchronously get system descriptions via SNMP on every nodes under a specified root node. * @param item item root node. * @return void. */ // GUI thread private void getSysdescr(final TreeItem item) { final TransientGUI tg = new TransientGUI(); tg.begin(); // ne pas faire ce synchronized (sync_tree) car trop long donc bug apparent si on dplace une fenetre de graphe par ex // XXX ICI BLOCAGE QD FENETRE DEFILEMENT ET POPUP LONGUE ATTENTE synchronized (sync_tree) { tg.setSize(VisualElement.getSubElements(item, TargetIPv4.class).size() + VisualElement.getSubElements(item, TargetIPv6.class).size()); for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv4.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv4 target = (TargetIPv4) elt; appendConsole("description[" + target.getAddress() + "]=\"" + target.getSNMPQuerier().getSysDescr() + "\"<BR/>"); if (target.getSNMPQuerier().isSNMPCapable()) target.setImageHostSNMP(); if (target.getSNMPQuerier().getLastSysdescr() != null) target.setType(target.getSNMPQuerier().getLastSysdescr()); } } for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv6.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv6 target = (TargetIPv6) elt; appendConsole("description[" + target.getAddress() + "]=\"" + target.getSNMPQuerier().getSysDescr() + "\"<BR/>"); if (target.getSNMPQuerier().isSNMPCapable()) target.setImageHost6SNMP(); if (target.getSNMPQuerier().getLastSysdescr() != null) target.setType(target.getSNMPQuerier().getLastSysdescr()); } } } tg.end(); } // GUI thread private void getGeneralInformation(final TreeItem item) { final TransientGUI tg = new TransientGUI(); tg.begin(); synchronized (sync_tree) { tg.setSize(VisualElement.getSubElements(item, TargetIPv4.class).size() + VisualElement.getSubElements(item, TargetIPv6.class).size()); for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv4.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv4 target = (TargetIPv4) elt; appendConsole(target.getSNMPQuerier().getGeneralInformation()); } } for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv6.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv6 target = (TargetIPv6) elt; appendConsole(target.getSNMPQuerier().getGeneralInformation()); } } } tg.end(); } // GUI thread private void getRoutingTable(final TreeItem item) { final TransientGUI tg = new TransientGUI(); tg.begin(); synchronized (sync_tree) { tg.setSize(VisualElement.getSubElements(item, TargetIPv4.class).size() + VisualElement.getSubElements(item, TargetIPv6.class).size()); for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv4.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv4 target = (TargetIPv4) elt; appendConsole(target.getSNMPQuerier().getRoutingTable(tg)); } } for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv6.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv6 target = (TargetIPv6) elt; appendConsole(target.getSNMPQuerier().getRoutingTable(tg)); } } } tg.end(); } // GUI thread private void getArpTable(final TreeItem item) { final TransientGUI tg = new TransientGUI(); tg.begin(); synchronized (sync_tree) { tg.setSize(VisualElement.getSubElements(item, TargetIPv4.class).size() + VisualElement.getSubElements(item, TargetIPv6.class).size()); for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv4.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv4 target = (TargetIPv4) elt; appendConsole(target.getSNMPQuerier().getArpTable(tg)); } } for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv6.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv6 target = (TargetIPv6) elt; appendConsole(target.getSNMPQuerier().getArpTable(tg)); } } } tg.end(); } // GUI thread private void getGenericTable(final TreeItem item, final String tablename, final String oid, final int oids[], final String names[], Object fields[][]) { final TransientGUI tg = new TransientGUI(); tg.begin(); synchronized (sync_tree) { tg.setSize(VisualElement.getSubElements(item, TargetIPv4.class).size() + VisualElement.getSubElements(item, TargetIPv6.class).size()); for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv4.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv4 target = (TargetIPv4) elt; appendConsole(target.getSNMPQuerier().getGenericTable(tg, tablename, oid, oids, names, fields)); } } for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv6.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv6 target = (TargetIPv6) elt; appendConsole(target.getSNMPQuerier().getGenericTable(tg, tablename, oid, oids, names, fields)); } } } tg.end(); } // GUI thread private void getMACTable(final TreeItem item) { final TransientGUI tg = new TransientGUI(); tg.begin(); synchronized (sync_tree) { tg.setSize(VisualElement.getSubElements(item, TargetIPv4.class).size() + VisualElement.getSubElements(item, TargetIPv6.class).size()); for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv4.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv4 target = (TargetIPv4) elt; appendConsole(target.getSNMPQuerier().getMACTable(tg)); } } for (final VisualElement elt : VisualElement.getSubElements(item, TargetIPv6.class)) { if (tg.isFinished() == false) { tg.inc(); final TargetIPv6 target = (TargetIPv6) elt; appendConsole(target.getSNMPQuerier().getMACTable(tg)); } } } tg.end(); } /** * Detaches every nodes under a specified root node. * @param item item root node. * @return void. */ private void removeVisualElements(final TreeItem item) { synchronized (synchro) { synchronized (sync_tree) { final VisualElement visual_element = (VisualElement) item.getData(VisualElement.class.toString()); if (item.getParentItem() == null) return; final VisualElement visual_parent = (VisualElement) item.getParentItem() .getData(VisualElement.class.toString()); final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { visual_element.removeVisualElements(visual_parent); session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } /** * Detaches action or view nodes under a specified root node. * @param item item root node. * @return void. */ private void removeActionOrView(final TreeItem item, final Class clazz) { synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { for (final VisualElement action : VisualElement.getSubElements(item, clazz)) if (action.getParents().size() == 1) action.removeVisualElements(action.getParents().get(0)); session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } /** * Detaches action nodes under a specified root node. * @param item item root node. * @return void. */ private void removeActions(final TreeItem item) { removeActionOrView(item, net.fenyo.gnetwatch.actions.Action.class); } /** * Detaches ping actions under a specified root node. * @param item item root node. * @return void. */ private void removeActionsPing(final TreeItem item) { removeActionOrView(item, ActionPing.class); } /** * Detaches flood actions under a specified root node. * @param item item root node. * @return void. */ private void removeActionsFlood(final TreeItem item) { removeActionOrView(item, ActionFlood.class); } /** * Detaches "SNMP explore" actions under a specified root node. * @param item item root node. * @return void. */ private void removeActionsExplore(final TreeItem item) { removeActionOrView(item, ActionSNMP.class); } /** * Detaches every views under a specified root node. * @param item item root node. * @return void. */ private void removeViews(final TreeItem item) { removeActionOrView(item, DataView.class); } /** * Detaches ping views under a specified root node. * @param item item root node. * @return void. */ private void removeViewsPing(final TreeItem item) { removeActionOrView(item, ReachableView.class); } /** * Detaches flood views under a specified root node. * @param item item root node. * @return void. */ private void removeViewsFlood(final TreeItem item) { removeActionOrView(item, FloodView.class); } /** * Detaches "SNMP explore" views under a specified root node. * @param item item root node. * @return void. */ private void removeViewsExplore(final TreeItem item) { removeActionOrView(item, BytesReceivedView.class); removeActionOrView(item, BytesSentView.class); } /** * Creates a new target or attaches an existing one to the current position. * @param target target. * @return boolean true if the target has been created or attached. */ // GUI thread // appel par boutons sur la gauche pour ts types de targets // utilise la selection courante // lock survey : sync_tree << synchro << HERE private boolean addTargetAtCurrentPosition(final Target target) { if (tree.getSelectionCount() == 1 && (/* isSelectionPersistent() || */ isSelectionTransient())) { final VisualElement parent = (VisualElement) tree.getSelection()[0] .getData(VisualElement.class.toString()); if (parent != null && Target.class.isInstance(parent)) return target.addTarget(this, (Target) parent); else log.error("can not add a target under a null or non target parent: " + parent); } return false; } /** * Terminates the application. * @param none. * @return void. */ // only called in the SWT thread private void exitApplication() { shell.close(); } private void appendNetworkInterfaces() { try { // should be localized String str = "<HR/><B>Local network interfaces</B>"; str += "<TABLE BORDER='0' BGCOLOR='black' cellspacing='1' cellpadding='1'>"; for (final Enumeration nifs = NetworkInterface.getNetworkInterfaces(); nifs.hasMoreElements();) { final NetworkInterface nif = (NetworkInterface) nifs.nextElement(); str += "<TR><TD bgcolor='lightyellow' align='right'><B>" + htmlFace("interface name") + "</B></TD><TD bgcolor='lightyellow'><B>" + htmlFace(nif.getName()) + "</B></TD></TR>"; str += "<TR><TD bgcolor='lightyellow' align='right'>" + htmlFace("display name") + "</TD><TD bgcolor='lightyellow'>" + htmlFace(nif.getDisplayName()) + "</TD></TR>"; for (final Enumeration addrs = nif.getInetAddresses(); addrs.hasMoreElements();) { final InetAddress addr = (InetAddress) addrs.nextElement(); if (Inet4Address.class.isInstance(addr)) str += "<TR><TD bgcolor='lightyellow' align='right'>" + htmlFace("IPv4 address") + "</TD><TD bgcolor='lightyellow'>" + htmlFace(addr.getHostAddress()) + "</TD></TR>"; if (Inet6Address.class.isInstance(addr)) str += "<TR><TD bgcolor='lightyellow' align='right'>" + htmlFace("IPv6 address") + "</TD><TD bgcolor='lightyellow'>" + htmlFace(addr.getHostAddress()) + "</TD></TR>"; } } str += "</TABLE>"; appendConsole(str); } catch (final SocketException ex) { log.error("Exception", ex); } } private void appendDatabaseStatistics() { synchronized (synchro) { // should be localized String str = "<HR/><B>Database statistics</B><BR/>"; Session session = getSynchro().getSessionFactory().getCurrentSession(); session.beginTransaction(); try { Integer count = (Integer) session.createQuery("select count(*) from EventGeneric").uniqueResult(); str += "total number of events: " + count + "<BR/>"; count = (Integer) session.createQuery("select count(*) from Target").uniqueResult(); str += "total number of targets: " + count + "<BR/>"; session.getTransaction().commit(); appendConsole(str); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { // should be localized String str = "<TABLE BORDER='0' BGCOLOR='black' cellspacing='1' cellpadding='1'>" + "<TR><TD bgcolor='lightyellow' align='left'><B>" + htmlFace("target") + "</B></TD>" + "<TD bgcolor='lightyellow' align='left'><B>" + htmlFace("class") + "</B></TD>" + "<TD bgcolor='lightyellow' align='right'><B>" + htmlFace("events") + "</B></TD></TR>"; for (final VisualElement elt : visual_transient.getSubElements(Target.class)) { final Target target = (Target) elt; session.update(target); for (final String event_type : target.getEventLists().keySet()) { final Integer count = (Integer) session .createQuery("select count(*) from EventGeneric ev " + "where ev.eventList = :event_list") .setString("event_list", target.getEventLists().get(event_type).getId().toString()) .uniqueResult(); str += "<TR><TD bgcolor='lightyellow' align='left'>" + htmlFace((TargetInterface.class.isInstance(target) ? target.getParents().get(0).getItem() + ": " : "") + target.getItem()) + "</TD><TD bgcolor='lightyellow' align='left'>" + htmlFace(event_type.replaceAll(".*\\.", "")) + "</TD>" + "<TD bgcolor='lightyellow' align='right'>" + htmlFace("" + count) + "</TD></TR>"; } } session.getTransaction().commit(); str += "</TABLE>"; appendConsole(str); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } /** * Instanciates the GUI objects. * GUI thread. * @param none. * @return void. */ private void createGUI() throws UnknownHostException, SocketException, AlgorithmException { final GUI gui = this; synchronized (sync_tree) { display = new Display(); shell = new Shell(display); shell.setText(getConfig().getString("version")); // Shell Layout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight = 2; layout.marginWidth = 2; layout.verticalSpacing = 1; shell.setLayout(layout); // shell.setBackground(display.getSystemColor(SWT.COLOR_BLUE)); // Menu menu_bar = new Menu(shell, SWT.BAR); shell.setMenuBar(menu_bar); // Menu "File" menu_file = new Menu(shell, SWT.DROP_DOWN); menu_item_file = new MenuItem(menu_bar, SWT.CASCADE); menu_item_file.setText(getConfig().getString("menu_file")); menu_item_file.setMenu(menu_file); // Menu "file": MenuItem "Merge events now" menu_item_merge_now = new MenuItem(menu_file, SWT.PUSH); menu_item_merge_now.setText(getConfig().getString("menu_merge_events_now")); menu_item_merge_now.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { background.getMergeQueue().informCycle(); } }); new MenuItem(menu_file, SWT.SEPARATOR); // Menu "file": MenuItem "Exit" menu_item_exit = new MenuItem(menu_file, SWT.PUSH); menu_item_exit.setText(getConfig().getString("menu_exit")); menu_item_exit.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { gui.exitApplication(); } }); menu_item_exit.setImage(new Image(display, "pictures/exit.png")); // Menu "Discover" final Menu menu_discover = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_discover = new MenuItem(menu_bar, SWT.CASCADE); menu_item_discover.setText(getConfig().getString("menu_discover")); menu_item_discover.setMenu(menu_discover); // Menu "Discover": MenuItem "Start" and "Stop" final MenuItem menu_item_discover_start = new MenuItem(menu_discover, SWT.PUSH); final MenuItem menu_item_discover_stop = new MenuItem(menu_discover, SWT.PUSH); menu_item_discover_start.setText(getConfig().getString("menu_start")); menu_item_discover_start.setImage(new Image(display, "pictures/exec.png")); menu_item_discover_stop.setText(getConfig().getString("menu_stop")); menu_item_discover_stop.setImage(new Image(display, "pictures/fileclose.png")); menu_item_discover_stop.setEnabled(false); menu_item_discover_start.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_discover_start.setEnabled(false); item_discover_start.setEnabled(false); main.startDiscover(); menu_item_discover_stop.setEnabled(true); item_discover_stop.setEnabled(true); } }); menu_item_discover_stop.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_discover_start.setEnabled(true); item_discover_start.setEnabled(true); main.stopDiscover(); menu_item_discover_stop.setEnabled(false); item_discover_stop.setEnabled(false); } }); // Menu "Tree" final Menu menu_tree = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_tree = new MenuItem(menu_bar, SWT.CASCADE); menu_item_tree.setText(getConfig().getString("menu_tree")); menu_item_tree.setMenu(menu_tree); // Menu "Tree": MenuItem "Expand" final MenuItem menu_item_expand = new MenuItem(menu_tree, SWT.PUSH); menu_item_expand.setText(getConfig().getString("expand")); menu_item_expand.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) tree.getSelection()[0].setExpanded(true); } }); // Menu "Tree": MenuItem "Merge" final MenuItem menu_item_merge = new MenuItem(menu_tree, SWT.PUSH); menu_item_merge.setText(getConfig().getString("collapse")); menu_item_merge.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) tree.getSelection()[0].setExpanded(false); } }); new MenuItem(menu_tree, SWT.SEPARATOR); // Menu "Tree": MenuItem "Expand All" final MenuItem menu_item_expand_all = new MenuItem(menu_tree, SWT.PUSH); menu_item_expand_all.setText(getConfig().getString("menu_expand_all")); menu_item_expand_all.setImage(new Image(display, "pictures/show_table_column.png")); menu_item_expand_all.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) expandAll(tree.getSelection()[0]); } }); // Menu "Tree": MenuItem "Merge All" final MenuItem menu_item_merge_all = new MenuItem(menu_tree, SWT.PUSH); menu_item_merge_all.setText(getConfig().getString("menu_collapse_all")); menu_item_merge_all.setImage(new Image(display, "pictures/hide_table_column.png")); menu_item_merge_all.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) mergeAll(tree.getSelection()[0]); } }); // Menu "Target" final Menu menu_target = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_target = new MenuItem(menu_bar, SWT.CASCADE); menu_item_target.setText(getConfig().getString("menu_target")); menu_item_target.setMenu(menu_target); // Menu "Target": MenuItem "Set Credentials" menu_item_credentials = new MenuItem(menu_target, SWT.PUSH); menu_item_credentials.setText(getConfig().getString("menu_set_credentials")); menu_item_credentials.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { final SNMPQuerier querier; synchronized (sync_tree) { if (tree.getSelectionCount() == 1 && (/* isSelectionPersistent() || */ isSelectionTransient())) { final VisualElement target = (VisualElement) tree.getSelection()[0] .getData(VisualElement.class.toString()); if (target != null && (TargetIPv4.class.isInstance(target) || TargetIPv6.class.isInstance(target))) { if (TargetIPv4.class.isInstance(target)) querier = ((TargetIPv4) target).getSNMPQuerier(); else querier = ((TargetIPv6) target).getSNMPQuerier(); } else return; } else return; } final int version = querier.getVersion(); final int sec = querier.getSec(); final int port_src = querier.getRetries(); final int timeout = querier.getTimeout(); final int port = querier.getPort(); final String community = querier.getCommunity(); final String username = querier.getUsername(); final String password_auth = querier.getPasswordAuth(); final String password_priv = querier.getPasswordPriv(); final int pdu_max_size = querier.getPDUMaxSize(); final DialogCredentials dialog = new DialogCredentials(gui, shell); dialog.setVersion(version); dialog.setSec(sec); dialog.setRetries(port_src); dialog.setTimeout(timeout); dialog.setPort(port); dialog.setCommunity(community); dialog.setUsername(username); dialog.setPasswordAuth(password_auth); dialog.setPasswordPriv(password_priv); dialog.setPDUMaxSize(pdu_max_size); dialog.open(); synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { session.update(querier); if (dialog.getVersion() != version) querier.setVersion(dialog.getVersion()); if (dialog.getSec() != sec) querier.setSec(dialog.getSec()); if (dialog.getRetries() != port_src) querier.setRetries(dialog.getRetries()); if (dialog.getTimeout() != timeout) querier.setTimeout(dialog.getTimeout()); if (dialog.getPort() != port) querier.setPort(dialog.getPort()); if (dialog.getCommunity() != community) querier.setCommunity(dialog.getCommunity()); if (dialog.getUsername() != username) querier.setUsername(dialog.getUsername()); if (dialog.getPasswordAuth() != password_auth) querier.setPasswordAuth(dialog.getPasswordAuth()); if (dialog.getPasswordPriv() != password_priv) querier.setPasswordPriv(dialog.getPasswordPriv()); if (dialog.getPDUMaxSize() != pdu_max_size) querier.setPDUMaxSize(dialog.getPDUMaxSize()); querier.update(); session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } }); // Menu "Target": MenuItem "Set IP options" menu_item_ip_options = new MenuItem(menu_target, SWT.PUSH); menu_item_ip_options.setText(getConfig().getString("menu_set_ip_options")); menu_item_ip_options.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { final IPQuerier querier; synchronized (sync_tree) { if (tree.getSelectionCount() == 1 && (/* isSelectionPersistent() || */ isSelectionTransient())) { final VisualElement target = (VisualElement) tree.getSelection()[0] .getData(VisualElement.class.toString()); if (target != null && (TargetIPv4.class.isInstance(target) || TargetIPv6.class.isInstance(target))) { if (TargetIPv4.class.isInstance(target)) querier = ((TargetIPv4) target).getIPQuerier(); else querier = ((TargetIPv6) target).getIPQuerier(); } else return; } else return; } final int tos = querier.getTos(); final int port_src = querier.getPortSrc(); final int port_dst = querier.getPortDst(); final int pdu_max_size = querier.getPDUMaxSize(); final DialogIPOptions dialog = new DialogIPOptions(gui, shell); dialog.setTOS(tos); dialog.setPortSrc(port_src); dialog.setPortDst(port_dst); dialog.setPDUMaxSize(pdu_max_size); dialog.open(); synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { session.update(querier); if (dialog.getTOS() != tos) querier.setTos(dialog.getTOS()); if (dialog.getPortSrc() != port_src) querier.setPortSrc(dialog.getPortSrc()); if (dialog.getPortDst() != port_dst) querier.setPortDst(dialog.getPortDst()); if (dialog.getPDUMaxSize() != pdu_max_size) querier.setPDUMaxSize(dialog.getPDUMaxSize()); querier.update(); session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } }); // Menu "Target": MenuItem "Set HTTP/FTP options" menu_item_http_options = new MenuItem(menu_target, SWT.PUSH); menu_item_http_options.setText(getConfig().getString("menu_set_http_options")); menu_item_http_options.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { final IPQuerier querier; synchronized (sync_tree) { if (tree.getSelectionCount() == 1 && (/* isSelectionPersistent() || */ isSelectionTransient())) { final VisualElement target = (VisualElement) tree.getSelection()[0] .getData(VisualElement.class.toString()); if (target != null && (TargetIPv4.class.isInstance(target) || TargetIPv6.class.isInstance(target))) { if (TargetIPv4.class.isInstance(target)) querier = ((TargetIPv4) target).getIPQuerier(); else querier = ((TargetIPv6) target).getIPQuerier(); } else return; } else return; } final int nparallel = querier.getNParallel(); final String proxy_host = querier.getProxyHost(); final int proxy_port = querier.getProxyPort(); final String URL = querier.getURL(); // final boolean reconnect = querier.getReconnect(); final boolean use_proxy = querier.getUseProxy(); final DialogHTTPOptions dialog = new DialogHTTPOptions(gui, shell); dialog.setNParallel(nparallel); dialog.setProxyHost(proxy_host); dialog.setProxyPort(proxy_port); dialog.setURL(URL); // dialog.setReconnect(reconnect); dialog.setUseProxy(use_proxy); dialog.open(); synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { session.update(querier); if (dialog.getNParallel() != nparallel) querier.setNParallel(dialog.getNParallel()); if (dialog.getProxyHost() != proxy_host) querier.setProxyHost(dialog.getProxyHost()); if (dialog.getProxyPort() != proxy_port) querier.setProxyPort(dialog.getProxyPort()); if (dialog.getURL() != URL) querier.setURL(dialog.getURL()); // if (dialog.getReconnect() != reconnect) querier.setReconnect(dialog.getReconnect()); if (dialog.getUseProxy() != use_proxy) querier.setUseProxy(dialog.getUseProxy()); querier.update(); session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } }); // Menu "Target": MenuItem "Set generic options" menu_item_generic_options = new MenuItem(menu_target, SWT.PUSH); menu_item_generic_options.setText(getConfig().getString("menu_set_generic_options")); menu_item_generic_options.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { final GenericQuerier querier; synchronized (sync_tree) { if (tree.getSelectionCount() == 1 && (/* isSelectionPersistent() || */ isSelectionTransient())) { final VisualElement target = (VisualElement) tree.getSelection()[0] .getData(VisualElement.class.toString()); if (target != null && TargetGroup.class.isInstance(target)) { querier = ((TargetGroup) target).getGenericQuerier(); } else return; } else return; } final String title = querier.getTitle(); final String cmdline = querier.getCommandLine(); final String workdir = querier.getWorkingDirectory(); final String filename = querier.getFileName(); final String unit = querier.getUnit(); final DialogGeneric dialog = new DialogGeneric(gui, shell); dialog.setTitle(title); dialog.setCommandLine(cmdline); dialog.setWorkdir(workdir); dialog.setFilename(filename); dialog.setUnit(unit); dialog.open(); if (dialog.isOK()) synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { session.update(querier); if (dialog.getTitle() != title) querier.setTitle(dialog.getTitle()); if (dialog.getCommandLine() != cmdline) querier.setCommandLine(dialog.getCommandLine()); if (dialog.getWorkdir() != workdir) querier.setWorkingDirectory(dialog.getWorkdir()); if (dialog.getFilename() != filename) querier.setFileName(dialog.getFilename()); if (dialog.getUnit() != unit) querier.setUnit(dialog.getUnit()); session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } } }); new MenuItem(menu_target, SWT.SEPARATOR); // Menu "Target": MenuItem "Add IPv4 Host" menu_item_add_host = new MenuItem(menu_target, SWT.PUSH); menu_item_add_host.setText(getConfig().getString("menu_add_ipv4")); menu_item_add_host.setImage(new Image(display, "pictures/network_local.png")); menu_item_add_host.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { target_host_push.notifyListeners(SWT.Selection, e); } }); // Menu "Target": MenuItem "Add IPv6 Host" menu_item_add_host6 = new MenuItem(menu_target, SWT.PUSH); menu_item_add_host6.setText(getConfig().getString("menu_add_ipv6")); menu_item_add_host6.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { target_host6_push.notifyListeners(SWT.Selection, e); } }); // Menu "Target": MenuItem "Add Range" menu_item_add_range = new MenuItem(menu_target, SWT.PUSH); menu_item_add_range.setText(getConfig().getString("menu_add_range")); menu_item_add_range.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { target_range_push.notifyListeners(SWT.Selection, e); } }); // Menu "Target": MenuItem "Add Network" menu_item_add_network = new MenuItem(menu_target, SWT.PUSH); menu_item_add_network.setText(getConfig().getString("menu_add_network")); menu_item_add_network.setImage(new Image(display, "pictures/network.png")); menu_item_add_network.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { target_subnet_push.notifyListeners(SWT.Selection, e); } }); // Menu "Target": MenuItem "Add Group" menu_item_add_group = new MenuItem(menu_target, SWT.PUSH); menu_item_add_group.setText(getConfig().getString("menu_add_group")); menu_item_add_group.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { target_group_push.notifyListeners(SWT.Selection, e); } }); new MenuItem(menu_target, SWT.SEPARATOR); // Menu "Target": MenuItem "Remove Element" menu_item_remove_target = new MenuItem(menu_target, SWT.PUSH); menu_item_remove_target.setText(getConfig().getString("menu_remove_element")); menu_item_remove_target.setImage(new Image(display, "pictures/nomailappt.png")); menu_item_remove_target.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeVisualElements(tree.getSelection()[0]); } }); // Menu "Action" final Menu menu_action = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_action = new MenuItem(menu_bar, SWT.CASCADE); menu_item_action.setText(getConfig().getString("menu_action")); menu_item_action.setMenu(menu_action); /* // Menu "Action": MenuItem "Sysdescr" final MenuItem menu_item_sysdescr = new MenuItem(menu_action, SWT.PUSH); menu_item_sysdescr.setText(getConfig().getString("menu_get_system_description")); menu_item_sysdescr.setImage(new Image(display, "pictures/yahoo_idle-af.png")); menu_item_sysdescr.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getSysdescr(tree.getSelection()[0]); } }); */ // Menu "Action": MenuItem "Add Ping" menu_item_add_ping = new MenuItem(menu_action, SWT.PUSH); menu_item_add_ping.setText(getConfig().getString("menu_ping_target")); menu_item_add_ping.setImage(new Image(display, "pictures/yahoo_idle-af.png")); menu_item_add_ping.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) addPingAll(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Add Generic Process" menu_item_add_process = new MenuItem(menu_action, SWT.PUSH); menu_item_add_process.setText(getConfig().getString("menu_generic_process")); menu_item_add_process.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) addProcessAll(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Add Generic Source" menu_item_add_source = new MenuItem(menu_action, SWT.PUSH); menu_item_add_source.setText(getConfig().getString("menu_generic_source")); menu_item_add_source.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) addSourceAll(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Add Flood" menu_item_add_flood = new MenuItem(menu_action, SWT.PUSH); menu_item_add_flood.setText(getConfig().getString("menu_flood_target")); menu_item_add_flood.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) addFloodAll(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Add Flood" menu_item_add_http = new MenuItem(menu_action, SWT.PUSH); menu_item_add_http.setText(getConfig().getString("menu_http_target")); menu_item_add_http.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) addHTTPAll(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Explore via SNMP" menu_item_explore_snmp = new MenuItem(menu_action, SWT.PUSH); menu_item_explore_snmp.setText(getConfig().getString("menu_explore_via_snmp")); menu_item_explore_snmp.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) exploreSNMP(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Explore via Nmap" menu_item_explore_nmap = new MenuItem(menu_action, SWT.PUSH); menu_item_explore_nmap.setText(getConfig().getString("menu_explore_via_nmap")); menu_item_explore_nmap.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) exploreNmap(tree.getSelection()[0]); } }); new MenuItem(menu_action, SWT.SEPARATOR); // Menu "Action": MenuItem "Drop Action" menu_item_remove_action = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_action.setText(getConfig().getString("menu_drop_action")); menu_item_remove_action.setImage(new Image(display, "pictures/button_cancel-af.png")); menu_item_remove_action.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeActions(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Drop Action Ping" menu_item_remove_action_ping = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_action_ping.setText(getConfig().getString("menu_drop_action_ping")); menu_item_remove_action_ping.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeActionsPing(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Drop Action Flood" menu_item_remove_action_flood = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_action_flood.setText(getConfig().getString("menu_drop_action_flood")); menu_item_remove_action_flood.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeActionsFlood(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Drop Action Explore" menu_item_remove_action_explore = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_action_explore.setText(getConfig().getString("menu_drop_action_explore")); menu_item_remove_action_explore.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeActionsExplore(tree.getSelection()[0]); } }); new MenuItem(menu_action, SWT.SEPARATOR); // Menu "Action": MenuItem "Drop View" menu_item_remove_view = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_view.setText(getConfig().getString("menu_drop_view")); menu_item_remove_view.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeViews(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Drop View Ping" menu_item_remove_view_ping = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_view_ping.setText(getConfig().getString("menu_drop_view_ping")); menu_item_remove_view_ping.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeViewsPing(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Drop View Flood" menu_item_remove_view_flood = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_view_flood.setText(getConfig().getString("menu_drop_view_flood")); menu_item_remove_view_flood.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeViewsFlood(tree.getSelection()[0]); } }); // Menu "Action": MenuItem "Drop View Explore" menu_item_remove_view_explore = new MenuItem(menu_action, SWT.PUSH); menu_item_remove_view_explore.setText(getConfig().getString("menu_drop_view_explore")); menu_item_remove_view_explore.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { if (tree.getSelectionCount() == 1) removeViewsExplore(tree.getSelection()[0]); } }); // Menu "View" final Menu menu_view = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_view = new MenuItem(menu_bar, SWT.CASCADE); menu_item_view.setText(getConfig().getString("menu_snmp_info")); menu_item_view.setMenu(menu_view); // Menu "View": MenuItem "Get SysDescr" final MenuItem menu_item_open_view = new MenuItem(menu_view, SWT.PUSH); menu_item_open_view.setText(getConfig().getString("menu_get_system_description")); menu_item_open_view.setImage(new Image(display, "pictures/multirow.png")); menu_item_open_view.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getSysdescr(tree.getSelection()[0]); } }); // Menu "View": MenuItem "Get General Information" final MenuItem menu_item_get_general_information = new MenuItem(menu_view, SWT.PUSH); menu_item_get_general_information.setText(getConfig().getString("menu_get_general_information")); menu_item_get_general_information.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getGeneralInformation(tree.getSelection()[0]); } }); // Menu "View": MenuItem "Get Routing Table" final MenuItem menu_item_get_routing_table = new MenuItem(menu_view, SWT.PUSH); menu_item_get_routing_table.setText(getConfig().getString("menu_get_routing_table")); menu_item_get_routing_table.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { // if (tree.getSelectionCount() == 1) getRoutingTable(tree.getSelection()[0]); if (tree.getSelectionCount() == 1) getGenericTable(tree.getSelection()[0], "route", "1.3.6.1.2.1.4.21.1", new int[] { 9, 1, 11, 2, 7, 8, 10, 3, 4, 5, 6, 12, 13 }, new String[] { "proto", "destination", "netmask", "interface", "next hop", "type", "age", "metric1", "metric2", "metric3", "metric4", "metric5", "info" }, new Object[][] { { 0, "gnetwatch error", "other", "local", "netmgmt", "icmp", "egp", "ggp", "hello", "rip", "is-is", "es-is", "ciscoIgrp", "bbnSpfIgp", "ospf", "bgp" }, { 5, "gnetwatch error", "other", "invalid", "direct", "indirect" }, { 3 } }); } }); // Menu "View": MenuItem "Get Arp Table" final MenuItem menu_item_get_arp_table = new MenuItem(menu_view, SWT.PUSH); menu_item_get_arp_table.setText(getConfig().getString("menu_get_arp_table")); menu_item_get_arp_table.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getArpTable(tree.getSelection()[0]); } }); // Menu "View": MenuItem "Get Interfaces Table" final MenuItem menu_item_get_ifs_table = new MenuItem(menu_view, SWT.PUSH); menu_item_get_ifs_table.setText(getConfig().getString("menu_get_ifs_table")); menu_item_get_ifs_table.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } // snmptranslate -Td IF-MIB::ifMtu // ::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) interfaces(2) ifTable(2) ifEntry(1) 4 } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getGenericTable(tree.getSelection()[0], "interface", "1.3.6.1.2.1.2.2.1", // echo {1..22} | sed 's/ /, /g' new int[] { 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }, // res.txt : dfinition de ifEntry // echo `cat res.txt | grep -v ',' | grep if | sed 's/ */"/' | sed 's/$/"/'` | sed 's/ /, /g' new String[] { "ifIndex", "ifDescr", "ifType", "ifMtu", "ifSpeed", "ifPhysAddress", "ifAdminStatus", "ifOperStatus", "ifLastChange", "ifInOctets", "ifInUcastPkts", "ifInNUcastPkts", "ifInDiscards", "ifInErrors", "ifInUnknownProtos", "ifOutOctets", "ifOutUcastPkts", "ifOutNUcastPkts", "ifOutDiscards", "ifOutErrors", "ifOutQLen", "ifSpecific" }, new Object[][] { { 1 }, // type.txt : dfinition de ifType // echo `cat type.txt | fgrep '(' | sed 's/ *//' | sed 's/(.*/"/' | sed 's/^/"/'` | sed 's/ /, /g' // et rajouter "gnetwatch error" au dbut // if Type ::= { ifEntry 3 } { 2, "gnetwatch error", "other", "regular1822", "hdh1822", "ddn-x25", "rfc877-x25", "ethernet-csmacd", "iso88023-csmacd", "iso88024-tokenBus", "iso88025-tokenRing", "iso88026-man", "starLan", "proteon-10Mbit", "proteon-80Mbit", "hyperchannel", "fddi", "lapb", "sdlc", "ds1", "e1", "basicISDN", "primaryISDN", "propPointToPointSerial", "ppp", "softwareLoopback", "eon", "ethernet-3Mbit", "nsip", "slip", "ultra", "ds3", "sip", "frame-relay" }, { 6, "gnetwatch error", "up", "down", "testing" }, { 7, "gnetwatch error", "up", "down", "testing" } }); } }); // Menu "View": MenuItem "Get .3 Stats Table" final MenuItem menu_item_get_dot3stats_table = new MenuItem(menu_view, SWT.PUSH); menu_item_get_dot3stats_table.setText(getConfig().getString("menu_get_dot3stats_table")); menu_item_get_dot3stats_table.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } // snmptranslate -m ALL -M"/usr/share/snmp/mibs:$HOME/MIBs/Cisco:$HOME/MIBS/3Com" -Td ETHERLIKE-MIB::dot3StatsDuplexStatus 2> /dev/null public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getGenericTable(tree.getSelection()[0], "Ethernet", "1.3.6.1.2.1.10.7.2.1", new int[] { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 16, 18, 19, 20, 21 }, // res.txt : dfinition de ifEntry // echo `egrep '^ ' res.txt | grep ',' | sed 's/ */"/' | sed 's/ .*/"/' ` | sed 's/ /, /g' new String[] { "dot3StatsIndex", "ifName", "dot3StatsAlignmentErrors", "dot3StatsFCSErrors", "dot3StatsSingleCollisionFrames", "dot3StatsMultipleCollisionFrames", "dot3StatsSQETestErrors", "dot3StatsDeferredTransmissions", "dot3StatsLateCollisions", "dot3StatsExcessiveCollisions", "dot3StatsInternalMacTransmitErrors", "dot3StatsCarrierSenseErrors", "dot3StatsFrameTooLongs", "dot3StatsInternalMacReceiveErrors", "dot3StatsSymbolErrors", "dot3StatsDuplexStatus", "dot3StatsRateControlAbility", "dot3StatsRateControlStatus" }, new Object[][] { { 1 }, { 15, "gnetwatch error", "duplex mode unknown", "half-duplex", "full-duplex" }, { 16, "false", "true" }, { 17, "gnetwatch error", "control off", "control on", "unknown control mode" }, }); } }); new MenuItem(menu_view, SWT.SEPARATOR); // Menu "View": MenuItem "Get VLAN Table" final MenuItem menu_item_get_vlan_table = new MenuItem(menu_view, SWT.PUSH); menu_item_get_vlan_table.setText(getConfig().getString("menu_get_vlan_table")); menu_item_get_vlan_table.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getGenericTable(tree.getSelection()[0], "VLANs", "1.3.6.1.4.1.9.9.46.1.3.1.1", new int[] { 18, 4, 2 }, new String[] { "vlan ID", "vlan name", "vlan state" }, new Object[][] { { 0, "#idx" }, { 2, "gnetwatch error", "operational", "suspended", "mtuTooBigForDevice", "mtuTooBigForTrunk" } }); } }); // Menu "View": MenuItem "Mac2If" final MenuItem menu_item_get_mac2if_table = new MenuItem(menu_view, SWT.PUSH); menu_item_get_mac2if_table.setText(getConfig().getString("menu_mac2if_table")); menu_item_get_mac2if_table.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) getMACTable(tree.getSelection()[0]); } }); /* // Menu "View": MenuItem getConfig().getString("menu_open_graph") final MenuItem menu_item_open_graph = new MenuItem(menu_view, SWT.PUSH); menu_item_open_graph.setText(getConfig().getString("menu_open_graph")); menu_item_open_graph.setImage(new Image(display, "pictures/oscilloscope-af.png")); menu_item_open_graph.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { log.debug("open graph"); } }); // Menu "View": MenuItem getConfig().getString("menu_close_view") final MenuItem menu_item_close_view = new MenuItem(menu_view, SWT.PUSH); menu_item_close_view.setText(getConfig().getString("menu_close_view")); menu_item_close_view.setImage(new Image(display, "pictures/multirow-af-cross.png")); menu_item_close_view.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { log.debug("close view"); } }); */ // Menu "Status" final Menu menu_status = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_status = new MenuItem(menu_bar, SWT.CASCADE); menu_item_status.setText(getConfig().getString("menu_status")); menu_item_status.setMenu(menu_status); // Menu "Status": MenuItem "Local interfaces" final MenuItem menu_item_local_interfaces = new MenuItem(menu_status, SWT.PUSH); menu_item_local_interfaces.setText(getConfig().getString("menu_local_interfaces")); menu_item_local_interfaces.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { appendNetworkInterfaces(); } }); // Menu "Status": MenuItem "Database statistics" final MenuItem menu_item_database_statistics = new MenuItem(menu_status, SWT.PUSH); menu_item_database_statistics.setText(getConfig().getString("menu_database_statistics")); menu_item_database_statistics.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { appendDatabaseStatistics(); } }); // Menu "Window" final Menu menu_window = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_window = new MenuItem(menu_bar, SWT.CASCADE); menu_item_window.setText(getConfig().getString("menu_window")); menu_item_window.setMenu(menu_window); // Menu "Window": MenuItem "Hide left panel" menu_item_hide = new MenuItem(menu_window, SWT.PUSH); menu_item_hide.setText(getConfig().getString("menu_hide")); menu_item_hide.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_hide.setEnabled(false); menu_item_show.setEnabled(true); groups_composite_grid_data.exclude = true; groups_composite.setVisible(false); horizontal_composite.layout(); } }); // Menu "Window": MenuItem "Show left panel" menu_item_show = new MenuItem(menu_window, SWT.PUSH); menu_item_show.setText(getConfig().getString("menu_show")); menu_item_show.setEnabled(false); menu_item_show.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_hide.setEnabled(true); menu_item_show.setEnabled(false); groups_composite_grid_data.exclude = false; groups_composite.setVisible(true); horizontal_composite.layout(); } }); new MenuItem(menu_window, SWT.SEPARATOR); // Menu "Window": MenuItem "Clear information panel" menu_item_clear = new MenuItem(menu_window, SWT.PUSH); menu_item_clear.setText(getConfig().getString("menu_clear")); menu_item_clear.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { clearConsole(); } }); // Menu "Help" final Menu menu_help = new Menu(shell, SWT.DROP_DOWN); final MenuItem menu_item_help = new MenuItem(menu_bar, SWT.CASCADE); menu_item_help.setText(getConfig().getString("menu_help")); menu_item_help.setMenu(menu_help); // Menu "Help": MenuItem "Welcome" final MenuItem menu_item_welcome = new MenuItem(menu_help, SWT.PUSH); menu_item_welcome.setText(getConfig().getString("menu_welcome")); menu_item_welcome.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { tab_folder.setSelection(tab_item1); } }); // Menu "Help": MenuItem "Help Contents" final MenuItem menu_item_help_contents = new MenuItem(menu_help, SWT.PUSH); menu_item_help_contents.setText(getConfig().getString("menu_help_contents")); menu_item_help_contents.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { tab_folder.setSelection(tab_item2); } }); new MenuItem(menu_help, SWT.SEPARATOR); // Menu "Help": MenuItem "About" final MenuItem menu_item_about = new MenuItem(menu_help, SWT.PUSH); menu_item_about.setText(getConfig().getString("menu_about")); menu_item_about.setImage(new Image(display, "pictures/info.png")); menu_item_about.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { final DialogAbout dialog = new DialogAbout(gui, shell); dialog.open(); } }); /* new MenuItem(menu_help, SWT.SEPARATOR); // Menu "Help": MenuItem "Software Update" final MenuItem menu_item_new_version = new MenuItem(menu_help, SWT.PUSH); menu_item_new_version.setText(getConfig().getString("menu_software_update")); menu_item_new_version.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { log.debug("new version"); } }); */ /* * ToolBar */ toolbar = new ToolBar(shell, SWT.FLAT); final ToolItem item_exit = new ToolItem(toolbar, SWT.PUSH); item_exit.setImage(new Image(display, "pictures/exit.png")); item_exit.setToolTipText(getConfig().getString("exit")); item_exit.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_exit.notifyListeners(SWT.Selection, e); } }); new ToolItem(toolbar, SWT.SEPARATOR); item_discover_start = new ToolItem(toolbar, SWT.PUSH); item_discover_start.setImage(new Image(display, "pictures/exec.png")); item_discover_start.setToolTipText(getConfig().getString("start_sniffer")); item_discover_start.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_discover_start.notifyListeners(SWT.Selection, e); } }); item_discover_stop = new ToolItem(toolbar, SWT.PUSH); item_discover_stop.setImage(new Image(display, "pictures/fileclose.png")); item_discover_stop.setToolTipText(getConfig().getString("stop_sniffer")); item_discover_stop.setEnabled(false); item_discover_stop.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_discover_stop.notifyListeners(SWT.Selection, e); } }); new ToolItem(toolbar, SWT.SEPARATOR); final ToolItem item_expand_all = new ToolItem(toolbar, SWT.PUSH); item_expand_all.setImage(new Image(display, "pictures/show_table_column.png")); item_expand_all.setToolTipText(getConfig().getString("expand_all")); item_expand_all.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_expand_all.notifyListeners(SWT.Selection, e); } }); final ToolItem item_merge_all = new ToolItem(toolbar, SWT.PUSH); item_merge_all.setImage(new Image(display, "pictures/hide_table_column.png")); item_merge_all.setToolTipText(getConfig().getString("collapse_all")); item_merge_all.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_merge_all.notifyListeners(SWT.Selection, e); } }); new ToolItem(toolbar, SWT.SEPARATOR); item_add_host = new ToolItem(toolbar, SWT.PUSH); item_add_host.setImage(new Image(display, "pictures/network_local.png")); item_add_host.setToolTipText(getConfig().getString("add_ipv4_host")); item_add_host.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_add_host.notifyListeners(SWT.Selection, e); } }); item_add_network = new ToolItem(toolbar, SWT.PUSH); item_add_network.setImage(new Image(display, "pictures/network.png")); item_add_network.setToolTipText(getConfig().getString("add_network")); item_add_network.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_add_network.notifyListeners(SWT.Selection, e); } }); item_remove_target = new ToolItem(toolbar, SWT.PUSH); item_remove_target.setImage(new Image(display, "pictures/nomailappt.png")); item_remove_target.setToolTipText(getConfig().getString("remove_element")); item_remove_target.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_remove_target.notifyListeners(SWT.Selection, e); } }); new ToolItem(toolbar, SWT.SEPARATOR); item_add_ping = new ToolItem(toolbar, SWT.PUSH); item_add_ping.setImage(new Image(display, "pictures/yahoo_idle-af.png")); item_add_ping.setToolTipText("ping"); item_add_ping.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_add_ping.notifyListeners(SWT.Selection, e); } }); item_remove_action = new ToolItem(toolbar, SWT.PUSH); item_remove_action.setImage(new Image(display, "pictures/button_cancel-af.png")); item_remove_action.setToolTipText(getConfig().getString("drop_action")); item_remove_action.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_remove_action.notifyListeners(SWT.Selection, e); } }); /* new ToolItem(toolbar, SWT.SEPARATOR); final ToolItem item_open_view = new ToolItem(toolbar, SWT.PUSH); item_open_view.setImage(new Image(display, "pictures/multirow.png")); item_open_view.setToolTipText("open view"); item_open_view.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_open_view.notifyListeners(SWT.Selection, e); } }); */ /* final ToolItem item_open_graph = new ToolItem(toolbar, SWT.PUSH); item_open_graph.setImage(new Image(display, "pictures/oscilloscope-af.png")); item_open_graph.setToolTipText("open graph"); item_open_graph.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_open_graph.notifyListeners(SWT.Selection, e); } }); final ToolItem item_close_view = new ToolItem(toolbar, SWT.PUSH); item_close_view.setImage(new Image(display, "pictures/multirow-af-cross.png")); item_close_view.setToolTipText("close view"); item_close_view.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_close_view.notifyListeners(SWT.Selection, e); } }); */ new ToolItem(toolbar, SWT.SEPARATOR); ToolItem item_about = new ToolItem(toolbar, SWT.PUSH); item_about.setImage(new Image(display, "pictures/info.png")); item_about.setToolTipText(getConfig().getString("help")); item_about.addListener(SWT.Selection, new Listener() { public void handleEvent(final Event e) { menu_item_about.notifyListeners(SWT.Selection, e); } }); // GridData toolbar_grid_data = new GridData(GridData.FILL_HORIZONTAL); toolbar.setLayoutData(toolbar_grid_data); // vertical Sash for Composite and text console vertical_sash = new SashForm(shell, SWT.VERTICAL); vertical_sash_grid_data = new GridData(GridData.FILL_BOTH); vertical_sash.setLayoutData(vertical_sash_grid_data); // vertical_sash.setBackground(display.getSystemColor(SWT.COLOR_RED)); // horizontal Composite horizontal_composite = new Composite(vertical_sash, SWT.FLAT); // composite.setBackground(display.getSystemColor(SWT.COLOR_RED)); horizontal_composite_layout = new GridLayout(); horizontal_composite_layout.numColumns = 2; horizontal_composite_layout.marginHeight = 0; horizontal_composite_layout.marginWidth = 0; horizontal_composite.setLayout(horizontal_composite_layout); // text console text_console = new Browser(vertical_sash, SWT.BORDER | SWT.FILL); appendConsole(htmlFace("GNetWatch - © 2006, 2007, 2008<BR/>")); text_console.addProgressListener(new ProgressListener() { public void changed(ProgressEvent e) { } public void completed(ProgressEvent e) { // il faudrait mettre une valeur max plutt que a... if (text_console_do_not_go_on_top > 0) text_console_do_not_go_on_top--; else text_console.execute("window.scroll(0,1000000);"); } }); // set vertical_sash relative weights vertical_sash.setWeights(new int[] { 4, 1 }); // Composite for groups at left groups_composite = new Composite(horizontal_composite, SWT.FLAT); groups_composite_layout = new RowLayout(SWT.VERTICAL); groups_composite_layout.fill = true; groups_composite_layout.marginTop = 0; groups_composite_layout.marginBottom = 0; groups_composite.setLayout(groups_composite_layout); groups_composite_grid_data = new GridData(GridData.FILL_VERTICAL); groups_composite.setLayoutData(groups_composite_grid_data); // Group for subnet targets group_target_subnet = new Group(groups_composite, SWT.SHADOW_ETCHED_IN); group_target_subnet_layout = new GridLayout(); group_target_subnet_layout.numColumns = 2; group_target_subnet.setLayout(group_target_subnet_layout); group_target_subnet.setText(getConfig().getString("create_network_target")); label1 = new Label(group_target_subnet, SWT.SHADOW_IN); label1.setText(getConfig().getString("address")); label1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_subnet_address = new Text(group_target_subnet, SWT.READ_ONLY | SWT.SINGLE); target_subnet_address.setLayoutData(new GridData( GridData.HORIZONTAL_ALIGN_END /*| GridData.GRAB_HORIZONTAL*/ | GridData.FILL_VERTICAL)); target_subnet_address.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_subnet_address.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new IpAddressEditor(getConfig(), target_subnet_address); label2 = new Label(group_target_subnet, SWT.SHADOW_IN); label2.setText(getConfig().getString("netmask")); label2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_subnet_mask = new Text(group_target_subnet, SWT.READ_ONLY | SWT.SINGLE); target_subnet_mask.setLayoutData(new GridData( GridData.HORIZONTAL_ALIGN_END /*| GridData.GRAB_HORIZONTAL*/ | GridData.FILL_VERTICAL)); target_subnet_mask.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_subnet_mask.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_subnet_mask.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new IpAddressEditor(getConfig(), target_subnet_mask); new Label(group_target_subnet, SWT.SHADOW_NONE); target_subnet_push = new Button(group_target_subnet, SWT.PUSH); target_subnet_push.setText(getConfig().getString("add_subnet")); target_subnet_push.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); target_subnet_push.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { addTargetAtCurrentPosition(new TargetIPv4Subnet("added by GUI", GenericTools.stringToInet4Address(target_subnet_address.getText()), GenericTools.stringToInet4Address(target_subnet_mask.getText()))); target_subnet_address.setText("000.000.000.000"); target_subnet_mask.setText("000.000.000.000"); session.getTransaction().commit(); } catch (final UnknownHostException ex) { log.error("Exception", ex); session.getTransaction().rollback(); } catch (final AlgorithmException ex) { log.error("Exception", ex); session.getTransaction().rollback(); System.exit(1); } } } } public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } }); // Group for range targets group_target_range = new Group(groups_composite, SWT.SHADOW_ETCHED_IN); group_target_range_layout = new GridLayout(); group_target_range_layout.numColumns = 2; group_target_range.setLayout(group_target_range_layout); group_target_range.setText(getConfig().getString("create_range_target")); label3 = new Label(group_target_range, SWT.SHADOW_IN); label3.setText(getConfig().getString("first_address")); label3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_range_begin = new Text(group_target_range, SWT.READ_ONLY | SWT.SINGLE); target_range_begin.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL)); target_range_begin.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_range_begin.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new IpAddressEditor(getConfig(), target_range_begin); label4 = new Label(group_target_range, SWT.SHADOW_IN); label4.setText(getConfig().getString("last_address")); label4.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_range_end = new Text(group_target_range, SWT.READ_ONLY | SWT.SINGLE); target_range_end.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL)); target_range_end.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_range_end.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new IpAddressEditor(getConfig(), target_range_end); new Label(group_target_range, SWT.SHADOW_NONE); target_range_push = new Button(group_target_range, SWT.PUSH); target_range_push.setText(getConfig().getString("add_range")); target_range_push.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); target_range_push.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { addTargetAtCurrentPosition(new TargetIPv4Range("added by GUI", GenericTools.stringToInet4Address(target_range_begin.getText()), GenericTools.stringToInet4Address(target_range_end.getText()))); target_range_begin.setText("000.000.000.000"); target_range_end.setText("000.000.000.000"); session.getTransaction().commit(); } catch (final UnknownHostException ex) { log.error("Exception", ex); session.getTransaction().rollback(); } catch (final AlgorithmException ex) { log.error("Exception", ex); session.getTransaction().rollback(); System.exit(1); } } } } public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } }); // Group for host targets group_target_host = new Group(groups_composite, SWT.SHADOW_ETCHED_IN); group_target_host_layout = new GridLayout(); group_target_host_layout.numColumns = 2; group_target_host.setLayout(group_target_host_layout); group_target_host.setText(getConfig().getString("create_ipv4_target")); label5 = new Label(group_target_host, SWT.SHADOW_IN); label5.setText(getConfig().getString("host_address")); label5.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_host_value = new Text(group_target_host, SWT.READ_ONLY | SWT.SINGLE); target_host_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL)); target_host_value.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_host_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new IpAddressEditor(getConfig(), target_host_value); new Label(group_target_host, SWT.SHADOW_NONE); target_host_push = new Button(group_target_host, SWT.PUSH); target_host_push.setText(getConfig().getString("add_ipv4_host")); target_host_push.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); target_host_push.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { final TargetIPv4 foo = new TargetIPv4("added by GUI", GenericTools.stringToInet4Address(target_host_value.getText()), snmp_manager); if (addTargetAtCurrentPosition(foo) == true) foo.checkSNMPAwareness(); target_host_value.setText("000.000.000.000"); session.getTransaction().commit(); } catch (final UnknownHostException ex) { log.error("Exception", ex); session.getTransaction().rollback(); } catch (final AlgorithmException ex) { log.error("Exception", ex); session.getTransaction().rollback(); System.exit(1); } } } } public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } }); target_host_push.addControlListener(new ControlListener() { public void controlMoved(final ControlEvent e) { } public void controlResized(final ControlEvent e) { final GC gc = new GC(target_host_value); gc.setFont(target_host_value.getFont()); ((GridData) (target_group_value.getLayoutData())).widthHint = gc .stringExtent(target_host_value.getText()).x; ((GridData) (target_host6_value.getLayoutData())).widthHint = gc .stringExtent(target_host_value.getText()).x; shell.changed(new Control[] { target_group_value, target_host6_value }); } }); // Group for IPv6 targets group_target_host6 = new Group(groups_composite, SWT.SHADOW_ETCHED_IN); group_target_host6_layout = new GridLayout(); group_target_host6_layout.numColumns = 2; group_target_host6.setLayout(group_target_host6_layout); group_target_host6.setText(getConfig().getString("create_ipv6_target")); label7 = new Label(group_target_host6, SWT.SHADOW_IN); label7.setText(getConfig().getString("ipv6_address")); label7.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_host6_value = new Text(group_target_host6, SWT.SINGLE); target_host6_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL)); target_host6_value.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_host6_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new Label(group_target_host6, SWT.SHADOW_NONE); target_host6_push = new Button(group_target_host6, SWT.PUSH); target_host6_push.setText(getConfig().getString("add_ipv6_host")); target_host6_push.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); target_host6_push.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { try { final Inet6Address address = GenericTools .stringToInet6Address(target_host6_value.getText()); if (address == null) { final MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); dialog.setText(getConfig().getString("gnetwatch_error")); dialog.setMessage(getConfig().getString("cannot_parse_ipv6")); dialog.open(); return; } synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { final TargetIPv6 foo = new TargetIPv6("added by GUI", address, snmp_manager); if (addTargetAtCurrentPosition(foo) == true) foo.checkSNMPAwareness(); target_host6_value.setText(""); session.getTransaction().commit(); } catch (Exception ex) { session.getTransaction().rollback(); throw ex; } } } } catch (final UnknownHostException ex) { log.error("Exception", ex); final MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); dialog.setText("GNetWatch - Error"); dialog.setMessage(getConfig().getString("cannot_parse_ipv6")); dialog.open(); } catch (final AlgorithmException ex) { log.error("Exception", ex); System.exit(1); } catch (final Exception ex) { log.error("Exception", ex); } } public void widgetSelected(final SelectionEvent e) { widgetDefaultSelected(e); } }); // Group for group targets group_target_group = new Group(groups_composite, SWT.SHADOW_ETCHED_IN); group_target_group_layout = new GridLayout(); group_target_group_layout.numColumns = 2; group_target_group.setLayout(group_target_group_layout); group_target_group.setText(getConfig().getString("create_group_target")); label6 = new Label(group_target_group, SWT.SHADOW_IN); label6.setText(getConfig().getString("group_name")); label6.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); target_group_value = new Text(group_target_group, SWT.SINGLE); target_group_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL)); target_group_value.setBackground(new Color(display, bglevel, bglevel, bglevel)); target_group_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); new Label(group_target_group, SWT.SHADOW_NONE); target_group_push = new Button(group_target_group, SWT.PUSH); target_group_push.setText(getConfig().getString("add_group")); target_group_push.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); target_group_push.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { try { if (target_group_value.getText() != "") synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { addTargetAtCurrentPosition( new TargetGroup("added by GUI", target_group_value.getText())); session.getTransaction().commit(); } catch (Exception ex) { session.getTransaction().rollback(); throw ex; } } } else { final MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); dialog.setText(getConfig().getString("gnetwatch_error")); dialog.setMessage(getConfig().getString("cannot_add_group")); dialog.open(); } target_group_value.setText(""); } catch (final AlgorithmException ex) { log.error("Exception", ex); System.exit(1); } catch (final Exception ex) { log.error("Exception", ex); } } public void widgetSelected(final SelectionEvent e) { widgetDefaultSelected(e); } }); // vertical space (hint to be sure left groups are visible at launch time) new Label(groups_composite, SWT.SHADOW_ETCHED_IN); // group container for data /* group_data = new Group(groups_composite, SWT.SHADOW_ETCHED_IN); group_data.setText("Data"); group_data_layout = new GridLayout(); group_data_layout.numColumns = 2; group_data.setLayout(group_target_subnet_layout); */ // Sash for Tree and Label horizontal_sash = new SashForm(horizontal_composite, SWT.HORIZONTAL); horizontal_sash_grid_data = new GridData(GridData.FILL_BOTH); horizontal_sash.setLayoutData(horizontal_sash_grid_data); // Tree tree = new Tree(horizontal_sash, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); tree.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { if (tree.getSelectionCount() == 1) { TreeItem current_item = tree.getSelection()[0]; if (current_item != null) { synchronized (synchro) { synchronized (sync_tree) { final VisualElement visual_element = (VisualElement) current_item .getData(VisualElement.class.toString()); if (visual_element != null) visual_element.informSelected(); } } widgetSelected(e); } } } public void widgetSelected(SelectionEvent e) { gui.updateEnableState(); if (tree.getSelectionCount() == 1) { TreeItem current_item = tree.getSelection()[0]; if (current_item != null) { synchronized (sync_tree) { final VisualElement visual_element = (VisualElement) current_item .getData(VisualElement.class.toString()); if (visual_element.getProgress() != -1) setProgress(visual_element.getProgress()); if (previous_selection != null) previous_selection.unselected(); visual_element.selected(); previous_selection = visual_element; setEnableMenuItemOptions(TargetIPv4.class.isInstance(visual_element) || TargetIPv6.class.isInstance(visual_element)); if (ActionFlood.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); menu_item_remove_action_flood.setEnabled(true); } else if (ActionPing.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); menu_item_remove_action_ping.setEnabled(true); } else if (ActionSNMP.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); menu_item_remove_action_explore.setEnabled(true); } else if (ActionHTTP.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); } else if (ActionNmap.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); } else if (ReachableView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); menu_item_remove_view_ping.setEnabled(true); } else if (FloodView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); menu_item_remove_view_flood.setEnabled(true); } else if (HTTPView.class.isInstance(visual_element) || HTTPPagesView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); } else if (BytesReceivedView.class.isInstance(visual_element) || BytesSentView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); menu_item_remove_view_explore.setEnabled(true); } else { // visual_element is neither a view nor an action setEnableMenuAndTool(true); if (visual_element.getChildren().size() == 0) { // no children menu_item_remove_action.setEnabled(false); item_remove_action.setEnabled(false); menu_item_remove_action_ping.setEnabled(false); menu_item_remove_action_flood.setEnabled(false); menu_item_remove_action_explore.setEnabled(false); menu_item_remove_view.setEnabled(false); menu_item_remove_view_ping.setEnabled(false); menu_item_remove_view_flood.setEnabled(false); menu_item_remove_view_explore.setEnabled(false); } } if (net.fenyo.gnetwatch.actions.Action.class.isInstance(visual_element)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else if (Target.class.isInstance(visual_element)) { try { boolean foo; final TargetGroup target_group = new TargetGroup("", ""); target_group.initialize(gui); foo = target_group.canAddTarget(visual_element) && visual_element.canManageThisChild(target_group); setEnableGroupTargetGroup(foo); // No name service is checked for the validity of the address. final Inet4Address bar = (Inet4Address) Inet4Address.getByAddress("bar", new byte[] { 0, 0, 0, 0 }); final TargetIPv4 target_ipv4 = new TargetIPv4("", bar, null); target_ipv4.initialize(gui); foo = target_ipv4.canAddTarget(visual_element) && visual_element.canManageThisChild(target_ipv4); setEnableGroupTargetHost(foo); final TargetIPv4Range target_ipv4_range = new TargetIPv4Range("", bar, bar); target_ipv4_range.initialize(gui); foo = target_ipv4_range.canAddTarget(visual_element) && visual_element.canManageThisChild(target_ipv4_range); setEnableGroupTargetRange(foo); final TargetIPv4Subnet target_ipv4_subnet = new TargetIPv4Subnet("", bar, bar); target_ipv4_subnet.initialize(gui); foo = target_ipv4_subnet.canAddTarget(visual_element) && visual_element.canManageThisChild(target_ipv4_subnet); setEnableGroupTargetSubnet(foo); } catch (final AlgorithmException ex) { log.error("Exception", ex); } catch (final UnknownHostException ex) { log.error("Exception", ex); } } else if (net.fenyo.gnetwatch.activities.Queue.class.isInstance(visual_element)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else if (DataView.class.isInstance(visual_element)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else if (visual_element.equals(visual_transient)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } } } } } }); tree.setHeaderVisible(true); tree_column1 = new TreeColumn(tree, SWT.LEFT); tree_column1.setText(getConfig().getString("items")); tree_column1.setWidth(150); tree_column2 = new TreeColumn(tree, SWT.LEFT); tree_column2.setText("Type"); tree_column2.setWidth(80); tree_column3 = new TreeColumn(tree, SWT.RIGHT); tree_column3.setText("Description"); tree_column3.setWidth(100); // Tree images image_folder = new Image(display, "pictures/folder_violet.png"); image_oscillo = new Image(display, "pictures/oscilloscope-af.png"); image_multirow = new Image(display, "pictures/multirow.png"); image_exec = new Image(display, "pictures/exec.png"); image_watch = new Image(display, "pictures/yahoo_idle-af.png"); image_host = new Image(display, "pictures/network_local.png"); image_host6 = new Image(display, "pictures/network_local-6-af.png"); image_interface = new Image(display, "pictures/memory.png"); image_queue = new Image(display, "pictures/jabber_group.png"); image_network = new Image(display, "pictures/network.png"); image_host_snmp = new Image(display, "pictures/network_local_snmp.png"); image_host6_snmp = new Image(display, "pictures/network_local-6-af-snmp.png"); visual_root = new VisualElement(); visual_root.setParent(this, tree); visual_root.setItem(config.getString("collected_data")); visual_queues = new VisualElement(); visual_queues.setParent(this, tree); visual_queues.setItem(config.getString("queues")); } // release sync_tree // create initial objects only if they do not exist in the database synchronized (synchro) { synchronized (sync_tree) { final Session session = synchro.getSessionFactory().getCurrentSession(); try { session.beginTransaction(); } catch (final org.hibernate.exception.JDBCConnectionException ex) { // c'est ici que a se termine quand on ouvre deux fois sur la mme database maintenue par un fichier par HSQLDB final MessageBox dialog = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); // traduire dialog.setText("GNetWatch Fatal Error"); dialog.setMessage(ex.toString() + " - caused by: " + ex.getCause().toString()); dialog.open(); session.getTransaction().rollback(); System.exit(0); } try { final java.util.List results = session.createQuery("from VisualElement as el where el.item = ?") .setString(0, config.getString("targets")).list(); if (results.size() > 1) log.error("database contains multiple root targets"); if (results.size() > 0) { visual_transient = (VisualElement) results.get(0); visual_transient.initialize(this); visual_transient.duplicateTreeItemOnce(visual_root.getTreeItems()); visual_transient.addParent(visual_root); // recursive initialization of every visual element stored in the database initFromSynchro(visual_transient); } else { visual_transient = new VisualElement(); visual_transient.setParent(this, visual_root); visual_transient.setItem(config.getString("targets")); session.save(visual_transient); } for (final VisualElement foo : visual_transient.getChildren()) { if (foo.getItem().equals(config.getString("local_host"))) visual_thishost = (TargetGroup) foo; if (foo.getItem().equals(config.getString("every_host"))) visual_transient_all = (TargetGroup) foo; if (foo.getItem().equals(config.getString("every_network"))) visual_transient_networks = (TargetGroup) foo; if (foo.getItem().equals(config.getString("user_defined"))) user_defined = (TargetGroup) foo; } if (visual_thishost == null) { visual_thishost = new TargetGroup("added by GUI", config.getString("local_host")); visual_thishost.setParent(this, visual_transient); session.save(visual_thishost); } if (visual_transient_all == null) { visual_transient_all = new TargetGroup("added by GUI", config.getString("every_host")); visual_transient_all.setParent(this, visual_transient); session.save(visual_transient_all); } if (getConfig().getProperty("enableeverynetworks") != null && getConfig().getProperty("enableeverynetworks").equals("true")) { if (visual_transient_networks == null) { visual_transient_networks = new TargetGroup("added by GUI", config.getString("every_network")); visual_transient_networks.setParent(this, visual_transient); session.save(visual_transient_networks); } } if (user_defined == null) { user_defined = new TargetGroup("added by GUI", config.getString("user_defined")); user_defined.setParent(this, visual_transient); session.save(user_defined); } // create localhost for (final Enumeration nifs = NetworkInterface.getNetworkInterfaces(); nifs .hasMoreElements();) { final NetworkInterface nif = (NetworkInterface) nifs.nextElement(); for (final Enumeration addrs = nif.getInetAddresses(); addrs.hasMoreElements();) { final InetAddress addr = (InetAddress) addrs.nextElement(); // localhost has IPv4 addresses if (Inet4Address.class.isInstance(addr)) { final TargetIPv4 foo = new TargetIPv4("transient localhost", (Inet4Address) addr, snmp_manager); if (foo == getCanonicalInstance(foo)) { session.save(foo); if (foo.addTarget(this, visual_thishost) == true) foo.checkSNMPAwareness(); } } // localhost has IPv6 addresses if (Inet6Address.class.isInstance(addr)) { final TargetIPv6 foo = new TargetIPv6("transient localhost", (Inet6Address) addr, snmp_manager); if (foo == getCanonicalInstance(foo)) { session.save(foo); if (foo.addTarget(this, visual_thishost) == true) foo.checkSNMPAwareness(); } } } // recursively initialize SNMPQuerier instances initSNMPQueriers(visual_transient); // recursively wakeup actions wakeupActions(visual_transient); } session.getTransaction().commit(); } catch (final Exception ex) { log.error("Exception", ex); } } } synchronized (sync_tree) { // CTabFolder tab_folder = new CTabFolder(horizontal_sash, SWT.BORDER); tab_folder.setSimple(false); tab_item1 = new CTabItem(tab_folder, SWT.None); tab_item1.setText(getConfig().getString("about_the_author")); final Browser browser = new Browser(tab_folder, SWT.BORDER | SWT.MULTI); browser.setUrl("http://www.fenyo.net"); // browser.setText("<HTML><BODY BGCOLOR='red'><H1>Data</H1>target: <B>127.0.0.1</B></BODY></HTML>"); tab_item1.setControl(browser); tab_item2 = new CTabItem(tab_folder, SWT.None); tab_item2.setText("Documentation"); final Browser browser2 = new Browser(tab_folder, SWT.BORDER | SWT.MULTI); browser2.setUrl("http://gnetwatch.sourceforge.net/docs"); tab_item2.setControl(browser2); // StyledText status = new StyledText(shell, SWT.BORDER); status_grid_data = new GridData(GridData.FILL_HORIZONTAL); status.setLayoutData(status_grid_data); status.setEditable(false); status.setEnabled(false); status.setText("Loading..."); status.setBackground(shell.getBackground()); // ProgressBar progress_bar = new ProgressBar(shell, SWT.SMOOTH); progress_bar.setBounds(10, 10, 200, 32); progress_bar.setSelection(0); progress_bar_grid_data = new GridData(GridData.FILL_HORIZONTAL); progress_bar.setLayoutData(progress_bar_grid_data); // instanciate queues final String[] queue_names = background.getQueues().keySet().toArray(new String[] {}); Arrays.sort(queue_names); for (final String queue_name : queue_names) background.getQueues().get(queue_name).setParent(this, visual_queues); // set initial selections menu_item_credentials.setEnabled(false); menu_item_ip_options.setEnabled(false); menu_item_http_options.setEnabled(false); setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } // release sync_tree tree.setBackground(getBackgroundColor()); // display documentation at startup tab_folder.setSelection(tab_item2); // final operations shell.pack(); shell.open(); visual_root.expandTreeItems(true); visual_queues.expandTreeItems(true); visual_transient.expandTreeItems(true); tree.setSelection(visual_root.getTreeItems().get(0)); tree.setFocus(); synchronized (GUI_created) { GUI_created[0] = true; GUI_created.notifyAll(); } // list network interfaces at startup text_console_do_not_go_on_top = 1; appendNetworkInterfaces(); awtGUI = new AwtGUI(config); awtGUI.createAwtGUI(); } // Queue thread public void informTargetHasNewEventClass(final Target target, final Class clazz) { asyncExec(new Runnable() { public void run() { try { views.refreshDataViews(target, clazz); } catch (final Exception ex) { log.error("Exception", ex); } } }); } /** * Wait for the creation of the GUI objects. * Can be called from any thread. * main thread. * @param none. * @return void. */ public void waitForCreation() { synchronized (GUI_created) { while (GUI_created[0] == false) { try { GUI_created.wait(); } catch (final InterruptedException e) { log.debug("waitForCreation(): " + e); } } } } /** * GUI thread. * @param none. * @return void. */ public void run() { try { createGUI(); } catch (final Exception ex) { log.error("Exception", ex); } while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } try { display.dispose(); } catch (final SWTException ex) { log.warn("Exception", ex); } } /** * Constructor. * main thread. * Builds a user interface. * main thread. * @param none. */ public GUI(final Config config, final Background background, final Main main, final SNMPManager snmp_manager, final Synchro synchro) { this.config = config; this.synchro = synchro; this.background = background; this.main = main; this.snmp_manager = snmp_manager; this.views = new Views(this); thread = new Thread(this, "GUI"); // ((DebugQueue) background.getQueues().get("debug")).setGUI(this); thread.start(); } // main thread public void end() throws InterruptedException { awtGUI.end(); } /** * Waits for the main thread to terminate. * main thread. * @param none. * @return void. */ public void join() { try { thread.join(); } catch (final InterruptedException e) { log.debug("GUI thread already terminated."); } } // lock survey : sync_tree << synchro << HERE public void updateEnableState() { final GUI gui = this; asyncExec(new Runnable() { public void run() { if (tree.getSelectionCount() == 1) { TreeItem current_item = tree.getSelection()[0]; if (current_item != null) { synchronized (sync_tree) { final VisualElement visual_element = (VisualElement) current_item .getData(VisualElement.class.toString()); if (visual_element.getProgress() != -1) setProgress(visual_element.getProgress()); if (previous_selection != null) previous_selection.unselected(); visual_element.selected(); previous_selection = visual_element; setEnableMenuItemOptions(TargetIPv4.class.isInstance(visual_element) || TargetIPv6.class.isInstance(visual_element)); menu_item_add_process.setEnabled( visual_element.equals(visual_root) || visual_element.equals(visual_transient)); menu_item_add_source.setEnabled( visual_element.equals(visual_root) || visual_element.equals(visual_transient)); if (ActionFlood.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); menu_item_remove_action_flood.setEnabled(true); } else if (ActionPing.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); menu_item_remove_action_ping.setEnabled(true); } else if (ActionGenericProcess.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); } else if (ActionGenericSrc.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); } else if (ActionSNMP.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); menu_item_remove_action_explore.setEnabled(true); } else if (ActionHTTP.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); } else if (ActionNmap.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_action.setEnabled(true); item_remove_action.setEnabled(true); } else if (ReachableView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); menu_item_remove_view_ping.setEnabled(true); } else if (GenericProcessView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); } else if (GenericSrcView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); } else if (FloodView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); menu_item_remove_view_flood.setEnabled(true); } else if (HTTPView.class.isInstance(visual_element) || HTTPPagesView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); } else if (BytesReceivedView.class.isInstance(visual_element) || BytesSentView.class.isInstance(visual_element)) { setEnableMenuAndTool(false); menu_item_remove_target.setEnabled(true); item_remove_target.setEnabled(true); menu_item_remove_view.setEnabled(true); menu_item_remove_view_explore.setEnabled(true); } else { // visual_element is neither a view nor an action setEnableMenuAndTool(true); menu_item_generic_options.setEnabled(!(visual_element.equals(visual_root) || visual_element.equals(visual_transient))); if (visual_element.getParents().contains(visual_transient)) menu_item_generic_options.setEnabled(false); if (!visual_element.equals(visual_root) && !visual_element.equals(visual_transient)) { menu_item_add_process.setEnabled(TargetGroup.class.isInstance(visual_element)); menu_item_add_source.setEnabled(TargetGroup.class.isInstance(visual_element)); } if (visual_element.getChildren().size() == 0) { // no children menu_item_remove_action.setEnabled(false); item_remove_action.setEnabled(false); menu_item_remove_action_ping.setEnabled(false); menu_item_remove_action_flood.setEnabled(false); menu_item_remove_action_explore.setEnabled(false); menu_item_remove_view.setEnabled(false); menu_item_remove_view_ping.setEnabled(false); menu_item_remove_view_flood.setEnabled(false); menu_item_remove_view_explore.setEnabled(false); } } if (net.fenyo.gnetwatch.actions.Action.class.isInstance(visual_element)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else if (Target.class.isInstance(visual_element)) { try { boolean foo; final TargetGroup target_group = new TargetGroup("", ""); target_group.initialize(gui); foo = target_group.canAddTarget(visual_element) && visual_element.canManageThisChild(target_group); setEnableGroupTargetGroup(foo); // No name service is checked for the validity of the address. final Inet4Address bar = (Inet4Address) Inet4Address.getByAddress("bar", new byte[] { 0, 0, 0, 0 }); final TargetIPv4 target_ipv4 = new TargetIPv4("", bar, null); target_ipv4.initialize(gui); foo = target_ipv4.canAddTarget(visual_element) && visual_element.canManageThisChild(target_ipv4); setEnableGroupTargetHost(foo); final TargetIPv4Range target_ipv4_range = new TargetIPv4Range("", bar, bar); target_ipv4_range.initialize(gui); foo = target_ipv4_range.canAddTarget(visual_element) && visual_element.canManageThisChild(target_ipv4_range); setEnableGroupTargetRange(foo); final TargetIPv4Subnet target_ipv4_subnet = new TargetIPv4Subnet("", bar, bar); target_ipv4_subnet.initialize(gui); foo = target_ipv4_subnet.canAddTarget(visual_element) && visual_element.canManageThisChild(target_ipv4_subnet); setEnableGroupTargetSubnet(foo); } catch (final AlgorithmException ex) { log.error("Exception", ex); } catch (final UnknownHostException ex) { log.error("Exception", ex); } } else if (net.fenyo.gnetwatch.activities.Queue.class.isInstance(visual_element)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else if (DataView.class.isInstance(visual_element)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else if (visual_element.equals(visual_transient)) { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } else { setEnableGroupTargetSubnet(false); setEnableGroupTargetRange(false); setEnableGroupTargetHost(false); setEnableGroupTargetGroup(false); } } } } } }); } /** * Enable/disable "add subnet" in the GUI. * @param enable enable/disable switch. * @return void. */ private void setEnableGroupTargetSubnet(final boolean enable) { label1.setEnabled(enable); label2.setEnabled(enable); group_target_subnet.setEnabled(enable); target_subnet_address.setEnabled(enable); target_subnet_mask.setEnabled(enable); target_subnet_push.setEnabled(enable); menu_item_add_network.setEnabled(enable); item_add_network.setEnabled(enable); } /** * Enable/disable "add range" in the GUI. * @param enable enable/disable switch. * @return void. */ private void setEnableGroupTargetRange(final boolean enable) { label3.setEnabled(enable); label4.setEnabled(enable); group_target_range.setEnabled(enable); target_range_begin.setEnabled(enable); target_range_end.setEnabled(enable); target_range_push.setEnabled(enable); menu_item_add_range.setEnabled(enable); } /** * Enable/disable "add host" in the GUI. * @param enable enable/disable switch. * @return void. */ private void setEnableGroupTargetHost(final boolean enable) { label5.setEnabled(enable); label7.setEnabled(enable); group_target_host.setEnabled(enable); group_target_host6.setEnabled(enable); target_host_value.setEnabled(enable); target_host6_value.setEnabled(enable); target_host_push.setEnabled(enable); target_host6_push.setEnabled(enable); menu_item_add_host.setEnabled(enable); menu_item_add_host6.setEnabled(enable); item_add_host.setEnabled(enable); } private void setEnableMenuItemOptions(final boolean enable) { menu_item_credentials.setEnabled(enable); menu_item_ip_options.setEnabled(enable); menu_item_http_options.setEnabled(enable); } private void setEnableMenuAndTool(final boolean enable) { menu_item_generic_options.setEnabled(enable); menu_item_remove_target.setEnabled(enable); item_remove_target.setEnabled(enable); menu_item_add_ping.setEnabled(enable); menu_item_add_process.setEnabled(enable); menu_item_add_source.setEnabled(enable); item_add_ping.setEnabled(enable); menu_item_add_flood.setEnabled(enable); menu_item_explore_snmp.setEnabled(enable); menu_item_add_http.setEnabled(enable); menu_item_explore_nmap.setEnabled(enable); menu_item_remove_action.setEnabled(enable); item_remove_action.setEnabled(enable); menu_item_remove_action_ping.setEnabled(enable); menu_item_remove_action_flood.setEnabled(enable); menu_item_remove_action_explore.setEnabled(enable); menu_item_remove_view.setEnabled(enable); menu_item_remove_view_ping.setEnabled(enable); menu_item_remove_view_flood.setEnabled(enable); menu_item_remove_view_explore.setEnabled(enable); } /** * Enable/disable "add group" in the GUI. * @param enable enable/disable switch. * @return void. */ private void setEnableGroupTargetGroup(final boolean enable) { label6.setEnabled(enable); group_target_group.setEnabled(enable); target_group_value.setEnabled(enable); target_group_push.setEnabled(enable); menu_item_add_group.setEnabled(enable); } private void initFromSynchro(final VisualElement elt) { for (final VisualElement child : elt.getChildren()) { child.initialize(this); child.duplicateTreeItemOnce(elt.getTreeItems()); child.addParent(elt); if (Target.class.isInstance(child)) { // register child as a new canonical instance if (child != getCanonicalInstance((Target) child)) log.error("target already registered, database will not match in-memory objects"); } } for (final VisualElement child : elt.getChildren()) initFromSynchro(child); } private void wakeupActions(final VisualElement elt) { for (final VisualElement child : elt.getChildren()) wakeupActions(child); if (net.fenyo.gnetwatch.actions.Action.class.isInstance(elt)) { final net.fenyo.gnetwatch.actions.Action action = (net.fenyo.gnetwatch.actions.Action) elt; if (action.getBackground() == null) { action.setBackground(background); try { background.addActionQueue(action); } catch (GeneralException ex) { log.warn("can not restart action:" + action + " - target: " + action.getTarget()); } } } } private void initSNMPQueriers(final VisualElement elt) { for (final VisualElement child : elt.getChildren()) initSNMPQueriers(child); if (TargetIPv4.class.isInstance(elt)) { final TargetIPv4 target = (TargetIPv4) elt; target.getSNMPQuerier().setSNMPManager(snmp_manager); target.getSNMPQuerier().parametersHaveChanged(); } if (TargetIPv6.class.isInstance(elt)) { final TargetIPv6 target = (TargetIPv6) elt; target.getSNMPQuerier().setSNMPManager(snmp_manager); target.getSNMPQuerier().parametersHaveChanged(); } } /** * Parses a configuration file to create initial targets. * @param filename configuration file. * @return void. */ public void createFromXML(final String filename) { final GUI gui = this; asyncExec(new Runnable() { public void run() { synchronized (synchro) { final Session session = synchro.getSessionFactory().getCurrentSession(); session.beginTransaction(); try { final XMLConfiguration initial = new XMLConfiguration(filename); initial.setExpressionEngine(new XPathExpressionEngine()); // limitation de l'implmentation : on n'autorise que les parents de type groupe for (final HierarchicalConfiguration subconf : (java.util.List<HierarchicalConfiguration>) initial .configurationsAt("/objects/target")) { if (subconf.getProperty("@targetType").equals("group")) { final String name = subconf.getString("name"); final java.util.List<String> parents = (java.util.List<String>) subconf .getList("parent[@parentType='group']"); if (parents.size() == 0) { final TargetGroup target_group = new TargetGroup( "added by initial configuration", name); target_group.addTarget(gui, user_defined); } else for (final String parent : parents) { final TargetGroup foo = new TargetGroup("temporary", parent); final TargetGroup target_parent = (TargetGroup) getCanonicalInstance(foo); if (target_parent == foo) log.error("Initial configuration: parent does not exist"); else { final TargetGroup target_group = new TargetGroup( "added by initial configuration", name); target_group.addTarget(gui, target_parent); } } } if (subconf.getProperty("@targetType").equals("ipv4")) { final String address = subconf.getString("address"); java.util.List<String> parents = (java.util.List<String>) subconf .getList("parent[@parentType='group']"); if (parents.size() != 0) for (final String parent : parents) { final TargetGroup foo = new TargetGroup("temporary", parent); final TargetGroup target_parent = (TargetGroup) getCanonicalInstance(foo); if (target_parent == foo) log.error("Initial configuration: parent does not exist"); else { final TargetIPv4 target = new TargetIPv4( "added by initial configuration", GenericTools.stringToInet4Address(address), snmp_manager); target.addTarget(gui, target_parent); if (subconf.getString("snmp/version") != null) { if (subconf.getString("snmp/version").equals("v1")) target.getSNMPQuerier().setVersion(0); if (subconf.getString("snmp/version").equals("v2c")) target.getSNMPQuerier().setVersion(1); if (subconf.getString("snmp/version").equals("v3")) target.getSNMPQuerier().setVersion(2); } if (subconf.getString("snmp/community") != null) target.getSNMPQuerier() .setCommunity(subconf.getString("snmp/community")); // Setting the agent is not possible when creating a target through the GUI if (subconf.getString("snmp/agent") != null) target.getSNMPQuerier().setAddress(GenericTools .stringToInet4Address(subconf.getString("snmp/agent"))); if (subconf.getString("snmp/password-auth") != null) target.getSNMPQuerier() .setPasswordAuth(subconf.getString("snmp/password-auth")); if (subconf.getString("snmp/password-priv") != null) target.getSNMPQuerier() .setPasswordPriv(subconf.getString("snmp/password-priv")); if (subconf.getString("snmp/pdu-max-size") != null) target.getSNMPQuerier() .setPDUMaxSize(subconf.getInt("snmp/pdu-max-size")); if (subconf.getString("snmp/port") != null) target.getSNMPQuerier().setPort(subconf.getInt("snmp/port")); if (subconf.getString("snmp/retries") != null) target.getSNMPQuerier().setRetries(subconf.getInt("snmp/retries")); if (subconf.getString("snmp/security") != null && subconf.getString("snmp/security").equals("NOAUTH_NOPRIV")) target.getSNMPQuerier().setSec(SecurityLevel.NOAUTH_NOPRIV); if (subconf.getString("snmp/security") != null && subconf.getString("snmp/security").equals("AUTH_NOPRIV")) target.getSNMPQuerier().setSec(SecurityLevel.AUTH_NOPRIV); if (subconf.getString("snmp/security") != null && subconf.getString("snmp/security").equals("AUTH_PRIV")) target.getSNMPQuerier().setSec(SecurityLevel.AUTH_PRIV); if (subconf.getString("snmp/timeout") != null) target.getSNMPQuerier().setTimeout(subconf.getInt("snmp/timeout")); target.getSNMPQuerier().update(); } } } if (subconf.getProperty("@targetType").equals("ipv6")) { final String address = subconf.getString("address"); java.util.List<String> parents = (java.util.List<String>) subconf .getList("parent[@parentType='group']"); if (parents.size() != 0) for (final String parent : parents) { final TargetGroup foo = new TargetGroup("temporary", parent); final TargetGroup target_parent = (TargetGroup) getCanonicalInstance(foo); if (target_parent == foo) log.error("Initial configuration: parent does not exist"); else { final TargetIPv6 target = new TargetIPv6( "added by initial configuration", GenericTools.stringToInet6Address(address), snmp_manager); target.addTarget(gui, target_parent); } } } if (subconf.getProperty("@targetType").equals("ipv4range")) { final String begin = subconf.getString("begin"); final String end = subconf.getString("end"); java.util.List<String> parents = (java.util.List<String>) subconf .getList("parent[@parentType='group']"); if (parents.size() != 0) for (final String parent : parents) { final TargetGroup foo = new TargetGroup("temporary", parent); final TargetGroup target_parent = (TargetGroup) getCanonicalInstance(foo); if (target_parent == foo) log.error("Initial configuration: parent does not exist"); else { final TargetIPv4Range target = new TargetIPv4Range( "added by initial configuration", GenericTools.stringToInet4Address(begin), GenericTools.stringToInet4Address(end)); target.addTarget(gui, target_parent); } } } if (subconf.getProperty("@targetType").equals("ipv4subnet")) { final String network = subconf.getString("network"); final String netmask = subconf.getString("netmask"); java.util.List<String> parents = (java.util.List<String>) subconf .getList("parent[@parentType='group']"); if (parents.size() != 0) for (final String parent : parents) { final TargetGroup foo = new TargetGroup("temporary", parent); final TargetGroup target_parent = (TargetGroup) getCanonicalInstance(foo); if (target_parent == foo) log.error("Initial configuration: parent does not exist"); else { final TargetIPv4Subnet target = new TargetIPv4Subnet( "added by initial configuration", GenericTools.stringToInet4Address(network), GenericTools.stringToInet4Address(netmask)); target.addTarget(gui, target_parent); } } } } session.getTransaction().commit(); } catch (final ConfigurationException ex) { log.warn("Exception", ex); session.getTransaction().rollback(); } catch (final AlgorithmException ex) { log.error("Exception", ex); session.getTransaction().rollback(); } catch (final UnknownHostException ex) { log.error("Exception", ex); session.getTransaction().rollback(); } } } }); } /** * Moves the application to the top of the drawing order. * @param none. * @return void. */ public void showGUI() { asyncExecIfNeeded(new Runnable() { public void run() { shell.setActive(); } }); } }