+\r
+ viewport.addPropertyChangeListener(new PropertyChangeListener()\r
+ {\r
+ public void propertyChange(PropertyChangeEvent evt)\r
+ {\r
+ if (evt.getPropertyName().equals("alignment"))\r
+ {\r
+ alignmentChanged();\r
+ }\r
+ }\r
+ });\r
+\r
+\r
+ addServiceListeners();\r
+ }\r
+\r
+ /* Set up intrinsic listeners for dynamically generated GUI bits. */\r
+ private void addServiceListeners()\r
+ {\r
+ final java.beans.PropertyChangeListener thisListener;\r
+ // Do this once to get current state\r
+ BuildWebServiceMenu();\r
+ Desktop.discoverer.addPropertyChangeListener(\r
+ thisListener = new java.beans.PropertyChangeListener()\r
+ {\r
+ public void propertyChange(PropertyChangeEvent evt)\r
+ {\r
+ // System.out.println("Discoverer property change.");\r
+ if (evt.getPropertyName().equals("services"))\r
+ {\r
+ // System.out.println("Rebuilding web service menu");\r
+ BuildWebServiceMenu();\r
+ }\r
+ }\r
+ });\r
+ addInternalFrameListener(new javax.swing.event.\r
+ InternalFrameAdapter()\r
+ {\r
+ public void internalFrameClosed(\r
+ javax.swing.event.InternalFrameEvent evt)\r
+ {\r
+ // System.out.println("deregistering discoverer listener");\r
+ Desktop.discoverer.removePropertyChangeListener(thisListener);\r
+ closeMenuItem_actionPerformed(null);\r
+ }\r
+ ;\r
+ });\r
+\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param String DOCUMENT ME!\r
+ */\r
+\r
+ public void parseGroupsFile(String file)\r
+ {\r
+ try\r
+ {\r
+ BufferedReader in = new BufferedReader(new FileReader(file));\r
+ SequenceI seq = null;\r
+ String line, text, token;\r
+ UserColourScheme ucs;\r
+ int index, start, end;\r
+ StringTokenizer st;\r
+ SequenceGroup sg;\r
+ while ( (line = in.readLine()) != null)\r
+ {\r
+ st = new StringTokenizer(line, "\t");\r
+ if (st.countTokens() != 6)\r
+ {\r
+ System.out.println("Groups file " + file +\r
+ " is invalid. Read help file.");\r
+ System.exit(1);\r
+ }\r
+\r
+ while (st.hasMoreElements())\r
+ {\r
+ text = st.nextToken();\r
+ token = st.nextToken();\r
+ if (!token.equals("ID_NOT_SPECIFIED"))\r
+ {\r
+ index = viewport.alignment.findIndex(viewport.alignment.findName(\r
+ token));\r
+ st.nextToken();\r
+ }\r
+ else\r
+ {\r
+ index = Integer.parseInt(st.nextToken());\r
+ }\r
+\r
+ start = Integer.parseInt(st.nextToken());\r
+ end = Integer.parseInt(st.nextToken());\r
+ ucs = new UserColourScheme(st.nextToken());\r
+\r
+ seq = viewport.alignment.getSequenceAt(index);\r
+ start = seq.findIndex(start) - 1;\r
+ end = seq.findIndex(end) - 1;\r
+\r
+ sg = new SequenceGroup(text, ucs, true, true, false, start, end);\r
+ sg.addSequence(seq, true);\r
+\r
+ viewport.alignment.addGroup(sg);\r
+ }\r
+ }\r
+\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ System.out.println("Error parsing groups file: " + ex);\r
+ }\r