getShortName
[jalview.git] / src / jalview / datamodel / Sequence.java
index c24dc02..a7fcb33 100755 (executable)
@@ -33,13 +33,13 @@ public class Sequence implements SequenceI
 {\r
     SequenceI datasetSequence;\r
     String name;\r
+    String shortName;\r
     String sequence;\r
     String description;\r
     int start;\r
     int end;\r
-    String displayId;\r
     Color color = Color.white;\r
-    String pdbId;\r
+    Vector pdbIds;\r
     String vamsasId;\r
     Vector dbrefs;\r
 \r
@@ -58,6 +58,8 @@ public class Sequence implements SequenceI
     public Sequence(String name, String sequence, int start, int end)\r
     {\r
       this.name = name;\r
+      parseId();\r
+\r
       this.sequence = sequence;\r
       this.start = start;\r
       this.end = end;\r
@@ -65,6 +67,63 @@ public class Sequence implements SequenceI
       checkValidRange();\r
     }\r
 \r
+    void parseId()\r
+    {\r
+        // Read in any DB refs first\r
+         StringTokenizer st = new StringTokenizer(name, "|");\r
+         if(st.countTokens()<1)\r
+         {\r
+           shortName = name;\r
+           return;\r
+         }\r
+\r
+         while (st.countTokens() > 1)\r
+         {\r
+           String a = st.nextToken();\r
+           String b = st.nextToken();\r
+           addDBRef(new DBRefEntry(a, "0", b));\r
+         }\r
+\r
+         if (st.hasMoreTokens())\r
+           shortName = st.nextToken();\r
+\r
+         // Remove /start-end from sequence\r
+         if (shortName.indexOf("/") > 0)\r
+         {\r
+           st = new StringTokenizer(shortName, "/");\r
+           String limits = null;\r
+           try\r
+           {\r
+             if (st.countTokens() == 2)\r
+             {\r
+\r
+               shortName = st.nextToken();\r
+\r
+               limits = st.nextToken();\r
+\r
+               st = new StringTokenizer(limits, "-");\r
+\r
+               if (st.countTokens() == 2)\r
+               {\r
+                 setStart(Integer.valueOf(st.nextToken()).intValue());\r
+                 setEnd(Integer.valueOf(st.nextToken()).intValue());\r
+               }\r
+             }\r
+\r
+             // If we're still in this loop, parsing of start and end was ok\r
+             // Therefore remove it from the sequence name\r
+             name = name.substring(0, name.indexOf("/"));\r
+           }\r
+           catch (NumberFormatException ex)\r
+           {\r
+             // Problem parsing sequence limits. Just add it back to the\r
+             // Id so we dont lose this info\r
+             shortName += "/" + limits;\r
+           }\r
+         }\r
+\r
+    }\r
+\r
     void checkValidRange()\r
     {\r
       if (end < 1)\r
@@ -97,7 +156,7 @@ public class Sequence implements SequenceI
      */\r
     public Sequence(String name, String sequence)\r
     {\r
-        this(name, sequence, 1, sequence.length());\r
+        this(name, sequence, 1, -1);\r
     }\r
 \r
     /**\r
@@ -138,14 +197,22 @@ public class Sequence implements SequenceI
         return sequenceFeatures;\r
     }\r
 \r
+    public void addPDBId(PDBEntry entry)\r
+    {\r
+      if(pdbIds == null)\r
+        pdbIds = new Vector();\r
+\r
+      pdbIds.addElement(entry);\r
+    }\r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
      * @param id DOCUMENT ME!\r
      */\r
-    public void setPDBId(String id)\r
+    public void setPDBId(Vector id)\r
     {\r
-        pdbId = id;\r
+        pdbIds = id;\r
     }\r
 \r
     /**\r
@@ -153,9 +220,9 @@ public class Sequence implements SequenceI
      *\r
      * @return DOCUMENT ME!\r
      */\r
-    public String getPDBId()\r
+    public Vector getPDBId()\r
     {\r
-        return pdbId;\r
+        return pdbIds;\r
     }\r
 \r
     /**\r
@@ -175,7 +242,7 @@ public class Sequence implements SequenceI
         }\r
       }\r
 \r
-      result.append(name);\r
+      result.append(shortName);\r
 \r
       if (jvsuffix)\r
       {\r
@@ -192,7 +259,8 @@ public class Sequence implements SequenceI
      */\r
     public void setName(String name)\r
     {\r
-        this.name = name;\r
+      this.name = name;\r
+      this.parseId();\r
     }\r
 \r
     /**\r
@@ -202,7 +270,7 @@ public class Sequence implements SequenceI
      */\r
     public String getName()\r
     {\r
-        return this.name;\r
+       return this.name;\r
     }\r
 \r
     /**\r
@@ -562,4 +630,9 @@ public class Sequence implements SequenceI
       return datasetSequence;\r
     }\r
 \r
+    public String getShortName()\r
+    {\r
+      return shortName;\r
+    }\r
+\r
 }\r