Save links and scores and keyValues for features
authoramwaterhouse <Andrew Waterhouse>
Wed, 9 Aug 2006 08:50:36 +0000 (08:50 +0000)
committeramwaterhouse <Andrew Waterhouse>
Wed, 9 Aug 2006 08:50:36 +0000 (08:50 +0000)
schemas/jalview.xsd
src/jalview/datamodel/SequenceFeature.java
src/jalview/gui/Jalview2XML.java
src/jalview/schemabinding/version2/Feature.java
src/jalview/schemabinding/version2/FeatureDescriptor.java

index 6c1e65f..5ebae84 100755 (executable)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vamsas="www.vamsas.ac.uk/jalview/version2" xmlns:jalview="www.jalview.org/colours" xmlns:jv="www.jalview.org" targetNamespace="www.jalview.org" elementFormDefault="qualified" attributeFormDefault="unqualified">\r
-<xs:import namespace="www.vamsas.ac.uk/jalview/version2" schemaLocation="vamsas.xsd"/>\r
-<xs:import namespace="www.jalview.org/colours" schemaLocation="JalviewUserColours.xsd"/>\r
+       <xs:import namespace="www.vamsas.ac.uk/jalview/version2" schemaLocation="vamsas.xsd"/>\r
+       <xs:import namespace="www.jalview.org/colours" schemaLocation="JalviewUserColours.xsd"/>\r
        <xs:complexType name="JalviewModel">\r
                <xs:sequence>\r
                        <xs:element name="creationDate" type="xs:dateTime"/>\r
                </xs:sequence>\r
        </xs:complexType>\r
        <xs:complexType name="feature">\r
+               <xs:sequence>\r
+                       <xs:element name="otherData" minOccurs="0" maxOccurs="unbounded">\r
+                               <xs:complexType>\r
+                                       <xs:attribute name="key" type="xs:string" use="required"/>\r
+                                       <xs:attribute name="value" type="xs:string" use="required"/>\r
+                               </xs:complexType>\r
+                       </xs:element>\r
+               </xs:sequence>\r
                <xs:attribute name="begin" type="xs:int" use="required"/>\r
                <xs:attribute name="end" type="xs:int" use="required"/>\r
                <xs:attribute name="type" type="xs:string" use="required"/>\r
                <xs:attribute name="description" type="xs:string" use="optional"/>\r
                <xs:attribute name="status" type="xs:string" use="optional"/>\r
                <xs:attribute name="featureGroup" type="xs:string" use="optional"/>\r
+               <xs:attribute name="score" type="xs:float" use="optional"/>\r
        </xs:complexType>\r
        <xs:complexType name="pdbentry">\r
                <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
index ef391eb..b50c50d 100755 (executable)
@@ -33,7 +33,7 @@ public class SequenceFeature
     public float score;\r
     public String type;\r
     public String description;\r
-    Hashtable otherDetails;\r
+    public Hashtable otherDetails;\r
     public java.util.Vector links;\r
 \r
     // Feature group can be set from a features file\r
index 95912fe..f1f8bb7 100755 (executable)
@@ -253,6 +253,32 @@ public class Jalview2XML
                 features.setDescription(sf[index].getDescription());\r
                 features.setType(sf[index].getType());\r
                 features.setFeatureGroup(sf[index].getFeatureGroup());\r
+                features.setScore(sf[index].getScore());\r
+                if(sf[index].links!=null)\r
+                {\r
+                  for(int l=0; l<sf[index].links.size(); l++)\r
+                  {\r
+                    OtherData keyValue = new OtherData();\r
+                    keyValue.setKey("LINK_"+l);\r
+                    keyValue.setValue(sf[index].links.elementAt(l).toString());\r
+                    features.addOtherData(keyValue);\r
+                  }\r
+                }\r
+                if(sf[index].otherDetails!=null)\r
+                {\r
+                  String key;\r
+                  Enumeration keys = sf[index].otherDetails.keys();\r
+                  while(keys.hasMoreElements())\r
+                  {\r
+                    key = keys.nextElement().toString();\r
+                    OtherData keyValue = new OtherData();\r
+                    keyValue.setKey( key );\r
+                    keyValue.setValue(\r
+                        sf[index].otherDetails.get(key).toString());\r
+                    features.addOtherData(keyValue);\r
+                  }\r
+                }\r
+\r
                 jseq.addFeatures(features);\r
                 index ++;\r
               }\r
@@ -901,6 +927,17 @@ public class Jalview2XML
                   features[f].getBegin(), features[f].getEnd(),\r
                   features[f].getFeatureGroup());\r
 \r
+              sf.setScore(features[f].getScore());\r
+              for(int od=0; od<features[f].getOtherDataCount(); od++)\r
+              {\r
+                OtherData keyValue = features[f].getOtherData(od);\r
+                if(keyValue.getKey().startsWith("LINK"))\r
+                  sf.addLink(keyValue.getValue());\r
+                else\r
+                  sf.setValue(keyValue.getKey(), keyValue.getValue());\r
+\r
+              }\r
+\r
               al.getSequenceAt(i).getDatasetSequence().addSequenceFeature(sf);\r
             }\r
           }\r
index 3c738bd..305e287 100755 (executable)
@@ -15,6 +15,8 @@ import java.io.IOException;
 import java.io.Reader;\r
 import java.io.Serializable;\r
 import java.io.Writer;\r
+import java.util.Enumeration;\r
+import java.util.Vector;\r
 import org.exolab.castor.xml.MarshalException;\r
 import org.exolab.castor.xml.Marshaller;\r
 import org.exolab.castor.xml.Unmarshaller;\r
@@ -73,6 +75,21 @@ public class Feature implements java.io.Serializable {
      */\r
     private java.lang.String _featureGroup;\r
 \r
+    /**\r
+     * Field _score\r
+     */\r
+    private float _score;\r
+\r
+    /**\r
+     * keeps track of state for field: _score\r
+     */\r
+    private boolean _has_score;\r
+\r
+    /**\r
+     * Field _otherDataList\r
+     */\r
+    private java.util.Vector _otherDataList;\r
+\r
 \r
       //----------------/\r
      //- Constructors -/\r
@@ -80,6 +97,7 @@ public class Feature implements java.io.Serializable {
 \r
     public Feature() {\r
         super();\r
+        _otherDataList = new Vector();\r
     } //-- jalview.schemabinding.version2.Feature()\r
 \r
 \r
@@ -88,6 +106,33 @@ public class Feature implements java.io.Serializable {
     //-----------/\r
 \r
     /**\r
+     * Method addOtherData\r
+     * \r
+     * \r
+     * \r
+     * @param vOtherData\r
+     */\r
+    public void addOtherData(jalview.schemabinding.version2.OtherData vOtherData)\r
+        throws java.lang.IndexOutOfBoundsException\r
+    {\r
+        _otherDataList.addElement(vOtherData);\r
+    } //-- void addOtherData(jalview.schemabinding.version2.OtherData) \r
+\r
+    /**\r
+     * Method addOtherData\r
+     * \r
+     * \r
+     * \r
+     * @param index\r
+     * @param vOtherData\r
+     */\r
+    public void addOtherData(int index, jalview.schemabinding.version2.OtherData vOtherData)\r
+        throws java.lang.IndexOutOfBoundsException\r
+    {\r
+        _otherDataList.insertElementAt(vOtherData, index);\r
+    } //-- void addOtherData(int, jalview.schemabinding.version2.OtherData) \r
+\r
+    /**\r
      * Method deleteBegin\r
      * \r
      */\r
@@ -106,6 +151,27 @@ public class Feature implements java.io.Serializable {
     } //-- void deleteEnd() \r
 \r
     /**\r
+     * Method deleteScore\r
+     * \r
+     */\r
+    public void deleteScore()\r
+    {\r
+        this._has_score= false;\r
+    } //-- void deleteScore() \r
+\r
+    /**\r
+     * Method enumerateOtherData\r
+     * \r
+     * \r
+     * \r
+     * @return Enumeration\r
+     */\r
+    public java.util.Enumeration enumerateOtherData()\r
+    {\r
+        return _otherDataList.elements();\r
+    } //-- java.util.Enumeration enumerateOtherData() \r
+\r
+    /**\r
      * Returns the value of field 'begin'.\r
      * \r
      * @return int\r
@@ -150,6 +216,65 @@ public class Feature implements java.io.Serializable {
     } //-- java.lang.String getFeatureGroup() \r
 \r
     /**\r
+     * Method getOtherData\r
+     * \r
+     * \r
+     * \r
+     * @param index\r
+     * @return OtherData\r
+     */\r
+    public jalview.schemabinding.version2.OtherData getOtherData(int index)\r
+        throws java.lang.IndexOutOfBoundsException\r
+    {\r
+        //-- check bounds for index\r
+        if ((index < 0) || (index > _otherDataList.size())) {\r
+            throw new IndexOutOfBoundsException();\r
+        }\r
+        \r
+        return (jalview.schemabinding.version2.OtherData) _otherDataList.elementAt(index);\r
+    } //-- jalview.schemabinding.version2.OtherData getOtherData(int) \r
+\r
+    /**\r
+     * Method getOtherData\r
+     * \r
+     * \r
+     * \r
+     * @return OtherData\r
+     */\r
+    public jalview.schemabinding.version2.OtherData[] getOtherData()\r
+    {\r
+        int size = _otherDataList.size();\r
+        jalview.schemabinding.version2.OtherData[] mArray = new jalview.schemabinding.version2.OtherData[size];\r
+        for (int index = 0; index < size; index++) {\r
+            mArray[index] = (jalview.schemabinding.version2.OtherData) _otherDataList.elementAt(index);\r
+        }\r
+        return mArray;\r
+    } //-- jalview.schemabinding.version2.OtherData[] getOtherData() \r
+\r
+    /**\r
+     * Method getOtherDataCount\r
+     * \r
+     * \r
+     * \r
+     * @return int\r
+     */\r
+    public int getOtherDataCount()\r
+    {\r
+        return _otherDataList.size();\r
+    } //-- int getOtherDataCount() \r
+\r
+    /**\r
+     * Returns the value of field 'score'.\r
+     * \r
+     * @return float\r
+     * @return the value of field 'score'.\r
+     */\r
+    public float getScore()\r
+    {\r
+        return this._score;\r
+    } //-- float getScore() \r
+\r
+    /**\r
      * Returns the value of field 'status'.\r
      * \r
      * @return String\r
@@ -196,6 +321,18 @@ public class Feature implements java.io.Serializable {
     } //-- boolean hasEnd() \r
 \r
     /**\r
+     * Method hasScore\r
+     * \r
+     * \r
+     * \r
+     * @return boolean\r
+     */\r
+    public boolean hasScore()\r
+    {\r
+        return this._has_score;\r
+    } //-- boolean hasScore() \r
+\r
+    /**\r
      * Method isValid\r
      * \r
      * \r
@@ -242,6 +379,30 @@ public class Feature implements java.io.Serializable {
     } //-- void marshal(org.xml.sax.ContentHandler) \r
 \r
     /**\r
+     * Method removeAllOtherData\r
+     * \r
+     */\r
+    public void removeAllOtherData()\r
+    {\r
+        _otherDataList.removeAllElements();\r
+    } //-- void removeAllOtherData() \r
+\r
+    /**\r
+     * Method removeOtherData\r
+     * \r
+     * \r
+     * \r
+     * @param index\r
+     * @return OtherData\r
+     */\r
+    public jalview.schemabinding.version2.OtherData removeOtherData(int index)\r
+    {\r
+        java.lang.Object obj = _otherDataList.elementAt(index);\r
+        _otherDataList.removeElementAt(index);\r
+        return (jalview.schemabinding.version2.OtherData) obj;\r
+    } //-- jalview.schemabinding.version2.OtherData removeOtherData(int) \r
+\r
+    /**\r
      * Sets the value of field 'begin'.\r
      * \r
      * @param begin the value of field 'begin'.\r
@@ -284,6 +445,51 @@ public class Feature implements java.io.Serializable {
     } //-- void setFeatureGroup(java.lang.String) \r
 \r
     /**\r
+     * Method setOtherData\r
+     * \r
+     * \r
+     * \r
+     * @param index\r
+     * @param vOtherData\r
+     */\r
+    public void setOtherData(int index, jalview.schemabinding.version2.OtherData vOtherData)\r
+        throws java.lang.IndexOutOfBoundsException\r
+    {\r
+        //-- check bounds for index\r
+        if ((index < 0) || (index > _otherDataList.size())) {\r
+            throw new IndexOutOfBoundsException();\r
+        }\r
+        _otherDataList.setElementAt(vOtherData, index);\r
+    } //-- void setOtherData(int, jalview.schemabinding.version2.OtherData) \r
+\r
+    /**\r
+     * Method setOtherData\r
+     * \r
+     * \r
+     * \r
+     * @param otherDataArray\r
+     */\r
+    public void setOtherData(jalview.schemabinding.version2.OtherData[] otherDataArray)\r
+    {\r
+        //-- copy array\r
+        _otherDataList.removeAllElements();\r
+        for (int i = 0; i < otherDataArray.length; i++) {\r
+            _otherDataList.addElement(otherDataArray[i]);\r
+        }\r
+    } //-- void setOtherData(jalview.schemabinding.version2.OtherData) \r
+\r
+    /**\r
+     * Sets the value of field 'score'.\r
+     * \r
+     * @param score the value of field 'score'.\r
+     */\r
+    public void setScore(float score)\r
+    {\r
+        this._score = score;\r
+        this._has_score = true;\r
+    } //-- void setScore(float) \r
+\r
+    /**\r
      * Sets the value of field 'status'.\r
      * \r
      * @param status the value of field 'status'.\r
index ac172e8..d0b9372 100755 (executable)
@@ -57,6 +57,9 @@ public class FeatureDescriptor extends org.exolab.castor.xml.util.XMLClassDescri
         super();\r
         nsURI = "www.jalview.org";\r
         xmlName = "feature";\r
+        \r
+        //-- set grouping compositor\r
+        setCompositorAsSequence();\r
         org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;\r
         org.exolab.castor.xml.XMLFieldHandler              handler        = null;\r
         org.exolab.castor.xml.FieldValidator               fieldValidator = null;\r
@@ -290,8 +293,84 @@ public class FeatureDescriptor extends org.exolab.castor.xml.util.XMLClassDescri
             fieldValidator.setValidator(typeValidator);\r
         }\r
         desc.setValidator(fieldValidator);\r
+        //-- _score\r
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(float.class, "_score", "score", org.exolab.castor.xml.NodeType.Attribute);\r
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {\r
+            public java.lang.Object getValue( java.lang.Object object ) \r
+                throws IllegalStateException\r
+            {\r
+                Feature target = (Feature) object;\r
+                if(!target.hasScore())\r
+                    return null;\r
+                return new java.lang.Float(target.getScore());\r
+            }\r
+            public void setValue( java.lang.Object object, java.lang.Object value) \r
+                throws IllegalStateException, IllegalArgumentException\r
+            {\r
+                try {\r
+                    Feature target = (Feature) object;\r
+                    // if null, use delete method for optional primitives \r
+                    if (value == null) {\r
+                        target.deleteScore();\r
+                        return;\r
+                    }\r
+                    target.setScore( ((java.lang.Float)value).floatValue());\r
+                }\r
+                catch (java.lang.Exception ex) {\r
+                    throw new IllegalStateException(ex.toString());\r
+                }\r
+            }\r
+            public java.lang.Object newInstance( java.lang.Object parent ) {\r
+                return null;\r
+            }\r
+        } );\r
+        desc.setHandler(handler);\r
+        addFieldDescriptor(desc);\r
+        \r
+        //-- validation code for: _score\r
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();\r
+        { //-- local scope\r
+            FloatValidator typeValidator = new FloatValidator();\r
+            fieldValidator.setValidator(typeValidator);\r
+        }\r
+        desc.setValidator(fieldValidator);\r
         //-- initialize element descriptors\r
         \r
+        //-- _otherDataList\r
+        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(jalview.schemabinding.version2.OtherData.class, "_otherDataList", "otherData", org.exolab.castor.xml.NodeType.Element);\r
+        handler = (new org.exolab.castor.xml.XMLFieldHandler() {\r
+            public java.lang.Object getValue( java.lang.Object object ) \r
+                throws IllegalStateException\r
+            {\r
+                Feature target = (Feature) object;\r
+                return target.getOtherData();\r
+            }\r
+            public void setValue( java.lang.Object object, java.lang.Object value) \r
+                throws IllegalStateException, IllegalArgumentException\r
+            {\r
+                try {\r
+                    Feature target = (Feature) object;\r
+                    target.addOtherData( (jalview.schemabinding.version2.OtherData) value);\r
+                }\r
+                catch (java.lang.Exception ex) {\r
+                    throw new IllegalStateException(ex.toString());\r
+                }\r
+            }\r
+            public java.lang.Object newInstance( java.lang.Object parent ) {\r
+                return new jalview.schemabinding.version2.OtherData();\r
+            }\r
+        } );\r
+        desc.setHandler(handler);\r
+        desc.setNameSpaceURI("www.jalview.org");\r
+        desc.setMultivalued(true);\r
+        addFieldDescriptor(desc);\r
+        \r
+        //-- validation code for: _otherDataList\r
+        fieldValidator = new org.exolab.castor.xml.FieldValidator();\r
+        fieldValidator.setMinOccurs(0);\r
+        { //-- local scope\r
+        }\r
+        desc.setValidator(fieldValidator);\r
     } //-- jalview.schemabinding.version2.FeatureDescriptor()\r
 \r
 \r