import java.io.*;\r
import jalview.datamodel.*;\r
import java.util.*;\r
-import jalview.schemes.UserColourScheme;\r
import java.net.URL;\r
+import jalview.schemes.*;\r
\r
\r
public class AnnotationFile\r
for(int i=0; i<annotations.length; i++)\r
{\r
row = annotations[i];\r
+\r
+ if(!row.visible)\r
+ continue;\r
+\r
color = null;\r
\r
if( row.sequenceRef == null)\r
}\r
\r
text.append(row.label+"\t");\r
+ if(row.description!=null)\r
+ text.append(row.description+"\t");\r
\r
for(int j=0; j<row.annotations.length; j++)\r
{\r
return text.toString();\r
}\r
\r
- public boolean readAnnotationFile(AlignmentI al, String file)\r
+\r
+ SequenceI refSeq = null;\r
+ Hashtable annotationsHash = new Hashtable();\r
+ public boolean readAnnotationFile(AlignmentI al,\r
+ String file,\r
+ String protocol)\r
{\r
try\r
{\r
BufferedReader in = null;\r
- java.io.InputStream is = getClass().getResourceAsStream("/" + file);\r
- if (is != null)\r
+ if (protocol.equals(AppletFormatAdapter.FILE))\r
{\r
- in = new BufferedReader(new java.io.InputStreamReader(is));\r
+ in = new BufferedReader(new FileReader(file));\r
}\r
- else\r
+ else if (protocol.equals(AppletFormatAdapter.URL))\r
{\r
- try\r
- {\r
- URL url = new URL(file);\r
- in = new BufferedReader(new InputStreamReader(url.openStream()));\r
- }\r
- catch (java.net.MalformedURLException ex)\r
+ URL url = new URL(file);\r
+ in = new BufferedReader(new InputStreamReader(url.openStream()));\r
+ }\r
+ else if (protocol.equals(AppletFormatAdapter.PASTE))\r
+ {\r
+ in = new BufferedReader(new StringReader(file));\r
+ }\r
+ else if (protocol.equals(AppletFormatAdapter.CLASSLOADER))\r
+ {\r
+ java.io.InputStream is = getClass().getResourceAsStream("/" + file);\r
+ if (is != null)\r
{\r
- in = new BufferedReader(new FileReader(file));\r
+ in = new BufferedReader(new java.io.InputStreamReader(is));\r
}\r
- }\r
+ }\r
\r
String line, label, description, token;\r
int graphStyle, index;\r
- SequenceI refSeq = null;\r
int refSeqIndex = 1;\r
int existingAnnotations = 0;\r
if(al.getAlignmentAnnotation()!=null)\r
continue;\r
}\r
\r
- if(token.equalsIgnoreCase("COMBINE") )\r
+ else if(token.equalsIgnoreCase("COMBINE") )\r
{\r
combineAnnotations(al, st);\r
continue;\r
}\r
\r
- if (token.equalsIgnoreCase("GRAPHLINE"))\r
+ else if (token.equalsIgnoreCase("GRAPHLINE"))\r
{\r
addLine(al, st);\r
continue;\r
}\r
\r
\r
- if(token.equalsIgnoreCase("SEQUENCE_REF") )\r
+ else if(token.equalsIgnoreCase("SEQUENCE_REF") )\r
{\r
refSeq = al.findName(st.nextToken());\r
try{\r
continue;\r
}\r
\r
+ else if(token.equalsIgnoreCase("SEQUENCE_GROUP"))\r
+ {\r
+ addGroup(al, st);\r
+ continue;\r
+ }\r
+\r
+ else if(token.equalsIgnoreCase("PROPERTIES"))\r
+ {\r
+ addProperties(al, st);\r
+ continue;\r
+ }\r
+\r
\r
graphStyle = AlignmentAnnotation.getGraphValueFromString(token);\r
- label = description = st.nextToken();\r
+ label = st.nextToken();\r
+\r
+ if(st.countTokens()>1)\r
+ description = st.nextToken();\r
+ else\r
+ description = null;\r
\r
line = st.nextToken();\r
\r
}\r
\r
annotation.setThreshold(new GraphLine(value, label, colour));\r
+ }\r
+\r
+ void addGroup(AlignmentI al, StringTokenizer st)\r
+ {\r
+ SequenceGroup sg = new SequenceGroup();\r
+ sg.setName(st.nextToken());\r
+ sg.setStartRes(Integer.parseInt(st.nextToken())-1);\r
+ sg.setEndRes(Integer.parseInt(st.nextToken())-1);\r
+\r
+ String index = st.nextToken();\r
+ if(index.equals("-1"))\r
+ {\r
+ while (st.hasMoreElements())\r
+ {\r
+ sg.addSequence(al.findName(st.nextToken()), false);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ StringTokenizer st2 = new StringTokenizer(index, ",");\r
\r
+ while (st2.hasMoreTokens())\r
+ {\r
+ String tmp = st2.nextToken();\r
+ if (tmp.equals("*"))\r
+ {\r
+ for (int i = 0; i < al.getHeight(); i++)\r
+ {\r
+ sg.addSequence(al.getSequenceAt(i), false);\r
+ }\r
+ }\r
+ else if (tmp.indexOf("-") >= 0)\r
+ {\r
+ StringTokenizer st3 = new StringTokenizer(tmp, "-");\r
+\r
+ int start = (Integer.parseInt(st3.nextToken()));\r
+ int end = (Integer.parseInt(st3.nextToken()));\r
+\r
+ if (end > start)\r
+ for (int i = start; i <= end; i++)\r
+ sg.addSequence(al.getSequenceAt(i-1), false);\r
+ }\r
+ else\r
+ {\r
+ sg.addSequence(al.getSequenceAt(Integer.parseInt(tmp)-1 ), false);\r
+ }\r
+ }\r
+ }\r
+\r
+ if(refSeq!=null)\r
+ {\r
+ sg.setStartRes( refSeq.findIndex( sg.getStartRes()+1 )-1 );\r
+ sg.setEndRes( refSeq.findIndex( sg.getEndRes() +1) -1 );\r
+ }\r
+\r
+\r
+ al.addGroup(sg);\r
+ annotationsHash.put(sg.getName(), sg);\r
+ }\r
+\r
+ void addProperties(AlignmentI al, StringTokenizer st)\r
+ {\r
+\r
+ //So far we have only added groups to the annotationHash,\r
+ //the idea is in the future properties can be added to\r
+ //alignments, other annotations etc\r
+ SequenceGroup sg = (SequenceGroup)annotationsHash.get(st.nextToken());\r
+\r
+ if(sg!=null)\r
+ {\r
+ String keyValue, key, value;\r
+ while(st.hasMoreTokens())\r
+ {\r
+ keyValue = st.nextToken();\r
+ key = keyValue.substring(0,keyValue.indexOf("="));\r
+ value=keyValue.substring(keyValue.indexOf("=")+1);\r
+\r
+ if(key.equalsIgnoreCase("description"))\r
+ sg.setDescription(value);\r
+ else if(key.equalsIgnoreCase("colour"))\r
+ sg.cs = ColourSchemeProperty.getColour(al, value);\r
+ else if (key.equalsIgnoreCase("pidThreshold"))\r
+ sg.cs.setThreshold(Integer.parseInt(value), false);//\r
+ else if (key.equalsIgnoreCase("outlineColour"))\r
+ {\r
+ sg.setOutlineColour(new UserColourScheme(value).findColour('A'));\r
+ }\r
+\r
+ //Boolean.valueOf(string).booleanValue();\r
+ else if (key.equalsIgnoreCase("displayBoxes"))\r
+ sg.setDisplayBoxes( Boolean.valueOf(value).booleanValue() );\r
+ else if (key.equalsIgnoreCase("displayText"))\r
+ sg.setDisplayText( Boolean.valueOf(value).booleanValue() );\r
+ else if (key.equalsIgnoreCase("colourText"))\r
+ sg.setColourText( Boolean.valueOf(value).booleanValue() );\r
+ else if (key.equalsIgnoreCase("textCol1"))\r
+ {\r
+ sg.textColour = new UserColourScheme(value).findColour('A');\r
+ }\r
+ else if (key.equalsIgnoreCase("textCol2"))\r
+ {\r
+ sg.textColour2 = new UserColourScheme(value).findColour('A');\r
+ }\r
+ else if (key.equalsIgnoreCase("textColThreshold"))\r
+ sg.thresholdTextColour = Integer.parseInt(value);\r
+\r
+ }\r
+ }\r
}\r
}\r