Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swing/DlgSequenceDetails.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swing/DlgSequenceDetails.java	(revision 173)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/swing/DlgSequenceDetails.java	(revision 174)
@@ -28,4 +28,14 @@
 import javax.swing.border.EtchedBorder;
 
+/**
+ * <p>
+ * This class provides a dialog to have a look on the events of the sequence,
+ * that was selected in {@link DlgSequences}. Furthermore, assertions can be
+ * added.
+ * </p>
+ * 
+ * @author Jeffrey Hall
+ * @version 1.0
+ */
 public class DlgSequenceDetails {
 
@@ -34,6 +44,27 @@
 
 	/**
-	 * Launch the application, the index of the sequence to work on is stored in
-	 * sequenceIndex
+	 * <p>
+	 * Create the dialog.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            the parent window of type {@link DlgSequences}.
+	 * @param events
+	 *            list of events that is to be displayed.
+	 */
+	public DlgSequenceDetails(JFrame parent, final List<Event<?>> events) {
+		frmParent = parent;
+		initialize(events);
+	}
+
+	/**
+	 * <p>
+	 * Launch the dialog.
+	 * </p>
+	 * 
+	 * @param parent
+	 *            the parent window of type {@link DlgSequences}.
+	 * @param events
+	 *            list of events that is to be displayed.
 	 */
 	public void showDialog(JFrame parent, final List<Event<?>> events) {
@@ -54,13 +85,10 @@
 
 	/**
-	 * Create the application.
-	 */
-	public DlgSequenceDetails(JFrame parent, final List<Event<?>> events) {
-		frmParent = parent;
-		initialize(events);
-	}
-
-	/**
+	 * <p>
 	 * Initialize the contents of the frame.
+	 * </p>
+	 * 
+	 * @param events
+	 *            list of events that is to be displayed.
 	 */
 	private void initialize(final List<Event<?>> events) {
@@ -70,9 +98,6 @@
 		final JList listEvents = new JList(modelListEvents);
 		final JList listTargets = new JList(modelListTargets);
-		// ***
-
-		// JFrame: frmEvents
+
 		frmEvents = new JFrame();
-		frmEvents.setResizable(false);
 		frmEvents.setTitle("Sequence details");
 		frmEvents.setBounds(100, 100, 731, 589);
@@ -80,4 +105,5 @@
 		frmEvents.getContentPane().setLayout(null);
 
+		// before closing the window, set parent to visible
 		frmEvents.addWindowListener(new WindowAdapter() {
 			public void windowClosing(WindowEvent arg0) {
@@ -86,6 +112,4 @@
 			}
 		});
-
-		updateLists(events, modelListEvents, modelListTargets);
 
 		JPanel panel = new JPanel();
@@ -94,10 +118,19 @@
 		frmEvents.getContentPane().add(panel);
 		panel.setLayout(null);
+
 		final JButton btnInsertBefore = new JButton("Insert before");
+		btnInsertBefore.setEnabled(false);
 		btnInsertBefore.setBounds(10, 11, 135, 31);
 		panel.add(btnInsertBefore);
-		// ***
-
-		// JButton: btnInsertBefore ***
+
+		final JButton btnInsertAfter = new JButton("Insert after");
+		btnInsertAfter.setEnabled(false);
+		btnInsertAfter.setBounds(155, 11, 135, 31);
+		panel.add(btnInsertAfter);
+
+		updateLists(events, modelListEvents, modelListTargets, listEvents,
+				listTargets);
+
+		// listener for clicking the "Insert before" button
 		btnInsertBefore.addMouseListener(new MouseAdapter() {
 			public void mouseClicked(MouseEvent arg0) {
@@ -105,19 +138,10 @@
 					return;
 
-				int selectedIndex = listEvents.getSelectedIndex();
-				DlgInsert.showDialog(events, selectedIndex, true);
-
-				updateLists(events, modelListEvents, modelListTargets);
-				listEvents.setSelectedIndex(selectedIndex);
-			}
-		});
-
-		btnInsertBefore.setEnabled(false);
-		final JButton btnInsertAfter = new JButton("Insert after");
-		btnInsertAfter.setBounds(155, 11, 135, 31);
-		panel.add(btnInsertAfter);
-		// ***
-
-		// JButton: btnInsertAfter
+				addAssertion(events, modelListEvents, modelListTargets,
+						listEvents, listTargets, true);
+			}
+		});
+
+		// listener for clicking the "Insert after" button
 		btnInsertAfter.addMouseListener(new MouseAdapter() {
 			public void mouseClicked(MouseEvent arg0) {
@@ -125,13 +149,8 @@
 					return;
 
-				int selectedIndex = listEvents.getSelectedIndex();
-				DlgInsert.showDialog(events, selectedIndex, false);
-
-				updateLists(events, modelListEvents, modelListTargets);
-				listEvents.setSelectedIndex(selectedIndex + 1);
-			}
-		});
-
-		btnInsertAfter.setEnabled(false);
+				addAssertion(events, modelListEvents, modelListTargets,
+						listEvents, listTargets, false);
+			}
+		});
 
 		final JButton btnClose = new JButton("Back to sequences");
@@ -149,44 +168,34 @@
 		panel_1.add(scrollPaneEvents);
 		scrollPaneEvents.setViewportView(listEvents);
-		// ***
-
-		// JList: listEvents ***
+
 		listEvents.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null,
 				null, null, null));
 		listEvents.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
-		// JScrollPane: scrollPane
 		final JScrollPane scrollPaneTargets = new JScrollPane();
 		scrollPaneTargets.setBounds(229, 29, 466, 436);
 		panel_1.add(scrollPaneTargets);
-		
+
+		// if there are more events than the list is able to display without
+		// vertical scrollbar, the event list has to be resized to fit to the
+		// target list
 		Rectangle r = scrollPaneEvents.getBounds();
 		r.height -= 18;
-		if(scrollPaneEvents.getVerticalScrollBar().isVisible()) scrollPaneEvents.setBounds(r);
-
+		if (scrollPaneEvents.getVerticalScrollBar().isVisible()) {
+			scrollPaneEvents.setBounds(r);
+		}
+
+		// listener for selecting a target: select the fitting event
 		listTargets.addListSelectionListener(new ListSelectionListener() {
 			public void valueChanged(ListSelectionEvent arg0) {
 				if (listTargets.getSelectedIndex() > -1) {
-					
-					JScrollBar bar1 = scrollPaneEvents.getVerticalScrollBar();
-					JScrollBar bar2 = scrollPaneTargets.getVerticalScrollBar();
-					bar1.setValue(bar2.getValue());
-
-					listEvents.setSelectedIndex(listTargets
-							.getSelectedIndex());
-					btnInsertAfter.setEnabled(true);
-
-					if (listTargets.getSelectedIndex() == 0) {
-						btnInsertBefore.setEnabled(false);
-					} else {
-						btnInsertBefore.setEnabled(true);
-					}
+
+					changeSelection(listEvents, listTargets, btnInsertBefore,
+							btnInsertAfter, scrollPaneEvents, scrollPaneTargets);
 				}
 			}
 		});
 		scrollPaneTargets.setViewportView(listTargets);
-		// ***
-
-		// JList for targets ***
+
 		listTargets.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null,
 				null, null, null));
@@ -201,28 +210,16 @@
 		panel_1.add(lblTargets);
 
+		// listener for selecting an event: select the fitting target
 		listEvents.addListSelectionListener(new ListSelectionListener() {
 			public void valueChanged(ListSelectionEvent arg0) {
 				if (listEvents.getSelectedIndex() > -1) {
-					
-					JScrollBar bar1 = scrollPaneEvents.getVerticalScrollBar();
-					JScrollBar bar2 = scrollPaneTargets.getVerticalScrollBar();
-					bar2.setValue(bar1.getValue());
-					
-					listTargets.setSelectedIndex(listEvents
-							.getSelectedIndex());				
-
-					if (listEvents.getSelectedIndex() == 0) {
-						btnInsertBefore.setEnabled(false);
-						btnInsertAfter.setEnabled(true);
-					} else {
-						btnInsertBefore.setEnabled(true);
-						btnInsertAfter.setEnabled(true);
-					}
+
+					changeSelection(listTargets, listEvents, btnInsertBefore,
+							btnInsertAfter, scrollPaneTargets, scrollPaneEvents);
 				}
 			}
 		});
-		// ***
-
-		// JButton: btnClose ***
+
+		// before closing the window, set parent to visible
 		btnClose.addMouseListener(new MouseAdapter() {
 			public void mouseClicked(MouseEvent arg0) {
@@ -231,10 +228,67 @@
 			}
 		});
-		// ***
-	}
-
+	}
+
+	/**
+	 * <p>
+	 * the value of one of the lists changed so the other has to be set to the
+	 * fitting selection.
+	 * </p>
+	 * 
+	 * @param listValueHasToBeChanged
+	 *            the selection of this list has to be corrected.
+	 * @param listValueHasBeenChanged
+	 *            the selection of this list is already correct.
+	 * @param btnInsertBefore
+	 *            to enable the "Insert before" button.
+	 * @param btnInsertAfter
+	 *            to enable the "Insert after" button.
+	 * @param scrollPaneValueHasToBeChanged
+	 *            the position of the scrollBar of this scrollPane has to be
+	 *            corrected.
+	 * @param scrollPaneValueHasBeenChanged
+	 *            the position of the scrollBar of this scrollPane is already
+	 *            correct.
+	 */
+	private void changeSelection(final JList listValueHasToBeChanged,
+			final JList listValueHasBeenChanged, final JButton btnInsertBefore,
+			final JButton btnInsertAfter,
+			final JScrollPane scrollPaneValueHasToBeChanged,
+			final JScrollPane scrollPaneValueHasBeenChanged) {
+
+		JScrollBar bar1 = scrollPaneValueHasBeenChanged.getVerticalScrollBar();
+		JScrollBar bar2 = scrollPaneValueHasToBeChanged.getVerticalScrollBar();
+		bar2.setValue(bar1.getValue());
+
+		listValueHasToBeChanged.setSelectedIndex(listValueHasBeenChanged
+				.getSelectedIndex());
+
+		btnInsertBefore.setEnabled(true);
+		btnInsertAfter.setEnabled(true);
+	}
+
+	/**
+	 * <p>
+	 * updates both lists, eventList and targetList to display the current
+	 * status.
+	 * </p>
+	 * 
+	 * @param events
+	 *            list of the current events that has to be displayed.
+	 * @param modelListEvents
+	 *            DefaultListModel to display the events.
+	 * @param modelListTargets
+	 *            DefaultListModel to display the targets.
+	 * @param listEvents
+	 *            the listEvents to store and reset the selection.
+	 * @param listTargets
+	 *            the listTargets to reset the selection after updating.
+	 */
 	private void updateLists(final List<Event<?>> events,
 			final javax.swing.DefaultListModel modelListEvents,
-			final javax.swing.DefaultListModel modelListTargets) {
+			final javax.swing.DefaultListModel modelListTargets,
+			JList listEvents, JList listTargets) {
+
+		int selectedIndex = listEvents.getSelectedIndex();
 
 		modelListEvents.clear();
@@ -244,4 +298,41 @@
 			modelListTargets.addElement(events.get(i).getTarget());
 		}
+
+		if (selectedIndex > -1) {
+			listEvents.setSelectedIndex(selectedIndex);
+			listTargets.setSelectedIndex(selectedIndex);
+		}
+	}
+
+	/**
+	 * <p>
+	 * opens {@link DlgInsert} dialog to insert an assertion and updates the
+	 * lists.
+	 * </p>
+	 * 
+	 * @param events
+	 *            list of the current events.
+	 * @param modelListEvents
+	 *            needed to call updateList.
+	 * @param modelListTargets
+	 *            needed to call updateList.
+	 * @param listEvents
+	 *            needed to get the currently selected index and to update the
+	 *            lists.
+	 * @param listTargets
+	 *            needed to update the lists.
+	 * @param insertBefore
+	 *            to decide if the assertions has to be inserted before or after
+	 *            the current selection.
+	 */
+	private void addAssertion(final List<Event<?>> events,
+			final DefaultListModel modelListEvents,
+			final DefaultListModel modelListTargets, final JList listEvents,
+			final JList listTargets, boolean insertBefore) {
+
+		int selectedIndex = listEvents.getSelectedIndex();
+		DlgInsert.showDialog(events, selectedIndex, insertBefore);
+		updateLists(events, modelListEvents, modelListTargets, listEvents,
+				listTargets);
 	}
 }
