Coverage Report - yarfraw.core.datamodel.AbstractBaseObject
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractBaseObject
92% 
100% 
0
 
 1  
 package yarfraw.core.datamodel;
 2  
 
 3  
 import java.io.Serializable;
 4  
 import java.util.ArrayList;
 5  
 import java.util.HashMap;
 6  
 import java.util.List;
 7  
 import java.util.Locale;
 8  
 import java.util.Map;
 9  
 import java.util.Map.Entry;
 10  
 
 11  
 import javax.xml.namespace.QName;
 12  
 
 13  
 import org.apache.commons.lang.builder.EqualsBuilder;
 14  
 import org.apache.commons.lang.builder.HashCodeBuilder;
 15  
 import org.apache.commons.lang.builder.ToStringBuilder;
 16  
 import org.apache.commons.lang.builder.ToStringStyle;
 17  
 import org.w3c.dom.Element;
 18  
 
 19  
 import yarfraw.utils.XMLUtils;
 20  
 /**
 21  
  * An abstract base object for the core data model
 22  
  */
 23  46292
 abstract class AbstractBaseObject implements Serializable{
 24  
   protected String _base;
 25  
   protected String _lang;
 26  
   protected String _resource;
 27  
   protected String _about;
 28  
   //this is initial to 0 in the interest of saving space since most of the time
 29  
   //these elements are expectted to be empty
 30  46292
   protected Map<QName, String> _otherAttributes = new HashMap<QName, String>(0);
 31  46293
   protected List<Element> _otherElements = new ArrayList<Element>(0);
 32  
   
 33  
   /**
 34  
    * This maps to the 'base' attribute that is common in all Atom 1.0 elements.
 35  
    * Other {@link FeedFormat} will ignore this attribute.
 36  
    * 
 37  
    * @return - attribute value.
 38  
    */
 39  
   public String getBase() {
 40  750
     return _base;
 41  
   }
 42  
   /**
 43  
    * The language attribute indicates the language that is used by the enclosed
 44  
    * element. 
 45  
    * 
 46  
    * @return - attribute value.
 47  
    */
 48  
   public String getLang() {
 49  927
     return _lang;
 50  
   }
 51  
 
 52  
   /**
 53  
    * The language attribute indicates the language that is used by the enclosed
 54  
    * element. 
 55  
    * 
 56  
    * @return - a new Locale Object by parsing the lang attribute.
 57  
    */
 58  
   public Locale getLangAsLocale() {
 59  6
     if(_lang == null)
 60  3
       return null;
 61  
     
 62  3
     return new Locale(_lang);
 63  
   }
 64  
   
 65  
   /**
 66  
    * This maps to the optional 'resource' attribute that present in some Rss 1.0 elements.
 67  
    * Other {@link FeedFormat} will ignore this attribute.
 68  
    * 
 69  
    * @return - attribute value.
 70  
    */
 71  
   public String getResource() {
 72  156
     return _resource;
 73  
   }
 74  
 
 75  
   /**
 76  
    * This maps to the required 'about' attribute that present of all second level elements
 77  
    * (channel, image, item, and textinput).
 78  
    * Other {@link FeedFormat} will ignore this attribute.
 79  
    * 
 80  
    * @return - attribute value.
 81  
    */
 82  
   public String getAbout() {
 83  531
     return _about;
 84  
   }
 85  
 
 86  
   /**
 87  
    * Other additional elements that are not in the Rss specs.
 88  
    */
 89  
   public List<Element> getOtherElements() {
 90  20443
     return _otherElements;
 91  
   }
 92  
 
 93  
   /**
 94  
    * Search through the other element list and return the first element that matches
 95  
    * both input the namespaceURI and the localName.
 96  
    * 
 97  
    * @param namespaceURI - namespaceURI of the element to be search for
 98  
    * @param localName - localName of the element
 99  
    * @return - null if no matching element is found,
 100  
    * the matching element otherwise.
 101  
    */
 102  
   public Element getElementByNS(String namespaceURI, String localName){
 103  78
     return XMLUtils.getElementByNS(_otherElements, namespaceURI, localName);
 104  
   }
 105  
 
 106  
   /**
 107  
    * Search through the other element list and return the FIRST element that matches
 108  
    * the input localName.
 109  
    * 
 110  
    * @param localName - localName of the element
 111  
    * @return - null if no matching element is found,
 112  
    * the matching element otherwise.
 113  
    */
 114  
   public Element getElementByLocalName(String localName){
 115  12
     return XMLUtils.getElementByLocalName(_otherElements, localName);
 116  
   }
 117  
   
 118  
   /**
 119  
    * Any other attribute that is not in the RSS specs.
 120  
    */
 121  
   public Map<QName, String> getOtherAttributes() {
 122  7094
     return _otherAttributes;
 123  
   }
 124  
   
 125  
   /**
 126  
    * Search for attributes that are not in the spec by its local name.
 127  
    * @param localName localName of the attribute
 128  
    * @return null if attribute is not found, the value of the attribute otherwise
 129  
    */
 130  
   public String getAttributeValueByLocalName(String localName){
 131  30
     if(_otherAttributes != null && localName != null){
 132  30
       for(Entry<QName, String> e : _otherAttributes.entrySet()){
 133  54
         if(localName.equals(e.getKey().getLocalPart())){
 134  27
           return e.getValue();
 135  
         }
 136  
       }
 137  
     }
 138  3
     return null;
 139  
   }
 140  
   /**
 141  
    * Search for attributes that are not in the spec by its {@link QName}.
 142  
    * @param name {@link QName} of the attribute
 143  
    * @return null if attribute is not found, the value of the attribute otherwise
 144  
    */
 145  
   public String getAttributeValueByQName(QName name){
 146  30
     if(_otherAttributes != null){
 147  30
       return _otherAttributes.get(name);
 148  
     }
 149  0
     return null;
 150  
   }
 151  
   
 152  
   @Override
 153  
   public String toString(){
 154  0
     return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
 155  
   }
 156  
   @Override
 157  
   public boolean equals(Object other){
 158  1061
     return EqualsBuilder.reflectionEquals(this, other);
 159  
   }
 160  
   @Override
 161  
   public int hashCode(){
 162  4306
     return HashCodeBuilder.reflectionHashCode(this);
 163  
   }
 164  
   
 165  
   public abstract void validate(FeedFormat format) throws ValidationException;
 166  
 }