initial commit
[jalview.git] / forester / java / src / org / forester / io / parsers / phyloxml / data / PropertyParser.java
1 // $Id:
2 // FORESTER -- software libraries and applications
3 // for evolutionary biology research and applications.
4 //
5 // Copyright (C) 2008-2009 Christian M. Zmasek
6 // Copyright (C) 2008-2009 Burnham Institute for Medical Research
7 // All rights reserved
8 // 
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 // 
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 //
23 // Contact: phylosoft @ gmail . com
24 // WWW: www.phylosoft.org/
25
26 package org.forester.io.parsers.phyloxml.data;
27
28 import org.forester.io.parsers.phyloxml.PhyloXmlMapping;
29 import org.forester.io.parsers.phyloxml.XmlElement;
30 import org.forester.io.parsers.util.PhylogenyParserException;
31 import org.forester.phylogeny.data.PhylogenyData;
32 import org.forester.phylogeny.data.Property;
33 import org.forester.phylogeny.data.Property.AppliesTo;
34 import org.forester.util.ForesterUtil;
35
36 public class PropertyParser implements PhylogenyDataPhyloXmlParser {
37
38     private static final PhylogenyDataPhyloXmlParser _instance;
39     static {
40         try {
41             _instance = new PropertyParser();
42         }
43         catch ( final Throwable e ) {
44             throw new RuntimeException( e.getMessage() );
45         }
46     }
47
48     private PropertyParser() {
49     }
50
51     @Override
52     public PhylogenyData parse( final XmlElement element ) throws PhylogenyParserException {
53         String ref = "";
54         String value = "";
55         String unit = "";
56         String datatype = "";
57         String applies_to_str = "";
58         String id_ref = "";
59         if ( element.isHasAttribute( PhyloXmlMapping.PROPERTY_REF ) ) {
60             ref = element.getAttribute( PhyloXmlMapping.PROPERTY_REF );
61         }
62         if ( element.isHasAttribute( PhyloXmlMapping.PROPERTY_UNIT ) ) {
63             unit = element.getAttribute( PhyloXmlMapping.PROPERTY_UNIT );
64         }
65         if ( element.isHasAttribute( PhyloXmlMapping.PROPERTY_DATATYPE ) ) {
66             datatype = element.getAttribute( PhyloXmlMapping.PROPERTY_DATATYPE );
67         }
68         if ( element.isHasAttribute( PhyloXmlMapping.PROPERTY_APPLIES_TO ) ) {
69             applies_to_str = element.getAttribute( PhyloXmlMapping.PROPERTY_APPLIES_TO );
70         }
71         if ( element.isHasAttribute( PhyloXmlMapping.ID_REF ) ) {
72             id_ref = element.getAttribute( PhyloXmlMapping.ID_REF );
73         }
74         if ( !ForesterUtil.isEmpty( element.getValueAsString() ) ) {
75             value = element.getValueAsString();
76         }
77         AppliesTo applies_to = AppliesTo.OTHER;
78         if ( applies_to_str.equals( AppliesTo.NODE.toString() ) ) {
79             applies_to = AppliesTo.NODE;
80         }
81         else if ( applies_to_str.equals( AppliesTo.PARENT_BRANCH.toString() ) ) {
82             applies_to = AppliesTo.PARENT_BRANCH;
83         }
84         else if ( applies_to_str.equals( AppliesTo.CLADE.toString() ) ) {
85             applies_to = AppliesTo.CLADE;
86         }
87         else if ( applies_to_str.equals( AppliesTo.ANNOTATION.toString() ) ) {
88             applies_to = AppliesTo.ANNOTATION;
89         }
90         else if ( applies_to_str.equals( AppliesTo.PHYLOGENY.toString() ) ) {
91             applies_to = AppliesTo.PHYLOGENY;
92         }
93         return new Property( ref, value, unit, datatype, applies_to, id_ref );
94     }
95
96     public static PhylogenyDataPhyloXmlParser getInstance() {
97         return _instance;
98     }
99 }