/*
* Copyright (C) 2010-2012 "Oh no sequences!"
*
* This is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.ohnosequences.xml.model.bio4j;
import com.ohnosequences.xml.api.model.XMLElement;
import com.ohnosequences.xml.api.model.XMLElementException;
import java.util.LinkedList;
import java.util.List;
import org.jdom2.Element;
/**
*
* @author Pablo Pareja Tobes <ppareja@era7.com>
*/
public class Bio4jRelationshipXML extends XMLElement{
public static final String TAG_NAME = "relationship";
public static final String NAME_TAG_NAME = "name";
public static final String ITEM_TYPE_TAG_NAME = "item_type";
public static final String DESCRIPTION_TAG_NAME = "description";
public static final String START_NODES_TAG_NAME = "start_nodes";
public static final String END_NODES_TAG_NAME = "end_nodes";
public static final String INDEXES_TAG_NAME = "indexes";
public static final String PROPERTIES_TAG_NAME = "properties";
public static final String JAVADOC_URL_TAG_NAME = "javadoc_url";
public static final String NAME_PROPERTY_TAG_NAME = "name_property";
public static final String DATA_SOURCE_TAG_NAME = "data_source";
public static final String RELATIONSHIP_ITEM_TYPE = "relationship";
public Bio4jRelationshipXML(){
super(new Element(TAG_NAME));
}
public Bio4jRelationshipXML(Element elem) throws XMLElementException{
super(elem);
if(!elem.getName().equals(TAG_NAME)){
throw new XMLElementException(XMLElementException.WRONG_TAG_NAME,new XMLElement(elem));
}
}
public Bio4jRelationshipXML(String value) throws Exception{
super(value);
if(!root.getName().equals(TAG_NAME)){
throw new XMLElementException(XMLElementException.WRONG_TAG_NAME,new XMLElement(value));
}
}
//----------------GETTERS---------------------
public String getDescription( ){ return getNodeText(DESCRIPTION_TAG_NAME);}
public String getItemType(){ return getNodeText(ITEM_TYPE_TAG_NAME);}
public String getRelationshipName( ){ return getNodeText(NAME_TAG_NAME);}
public String getJavadocUrl(){ return getNodeText(JAVADOC_URL_TAG_NAME);}
public String getNameProperty(){ return getNodeText(NAME_PROPERTY_TAG_NAME);}
public String getDataSource(){ return getNodeText(DATA_SOURCE_TAG_NAME);}
public List<Bio4jNodeXML> getStartNodes() throws XMLElementException{
LinkedList<Bio4jNodeXML> list = new LinkedList<Bio4jNodeXML>();
Element elem = root.getChild(START_NODES_TAG_NAME);
if(elem != null){
for (Object e : elem.getChildren(Bio4jNodeXML.TAG_NAME)) {
list.add(new Bio4jNodeXML((Element)e));
}
}
return list;
}
public List<Bio4jNodeXML> getEndNodes() throws XMLElementException{
LinkedList<Bio4jNodeXML> list = new LinkedList<Bio4jNodeXML>();
Element elem = root.getChild(END_NODES_TAG_NAME);
if(elem != null){
for (Object e : elem.getChildren(Bio4jNodeXML.TAG_NAME)) {
list.add(new Bio4jNodeXML((Element)e));
}
}
return list;
}
public List<Bio4jRelationshipIndexXML> getIndexes() throws XMLElementException{
LinkedList<Bio4jRelationshipIndexXML> list = new LinkedList<Bio4jRelationshipIndexXML>();
Element elem = root.getChild(INDEXES_TAG_NAME);
if(elem != null){
for (Object e : elem.getChildren(Bio4jRelationshipIndexXML.TAG_NAME)) {
list.add(new Bio4jRelationshipIndexXML((Element)e));
}
}
return list;
}
//----------------SETTERS-------------------
public void setDescription(String value){ setNodeText(DESCRIPTION_TAG_NAME, value);}
public void setRelationshipName(String value){ setNodeText(NAME_TAG_NAME, value);}
public void setItemType(String value){ setNodeText(ITEM_TYPE_TAG_NAME, value);}
public void setJavadocUrl(String value){ setNodeText(JAVADOC_URL_TAG_NAME, value);}
public void setNameProperty(String value){ setNodeText(NAME_PROPERTY_TAG_NAME, value);}
public void setDataSource(String value){ setNodeText(DATA_SOURCE_TAG_NAME, value);}
public void addStartNode(Bio4jNodeXML node){
Element elem = initStartNodesTag();
elem.addContent(node.getRoot());
}
public void addEndNode(Bio4jNodeXML node){
Element elem = initEndNodesTag();
elem.addContent(node.getRoot());
}
public void addIndex(Bio4jRelationshipIndexXML index){
Element elem = initIndexesTag();
elem.addContent(index.getRoot());
}
public void addProperty(Bio4jPropertyXML property){
Element elem = initPropertiesTag();
elem.addContent(property.getRoot());
}
private Element initStartNodesTag(){
Element elem = root.getChild(START_NODES_TAG_NAME);
if(elem == null){
elem = new Element(START_NODES_TAG_NAME);
root.addContent(elem);
}
return elem;
}
private Element initEndNodesTag(){
Element elem = root.getChild(END_NODES_TAG_NAME);
if(elem == null){
elem = new Element(END_NODES_TAG_NAME);
root.addContent(elem);
}
return elem;
}
private Element initIndexesTag(){
Element elem = root.getChild(INDEXES_TAG_NAME);
if(elem == null){
elem = new Element(INDEXES_TAG_NAME);
root.addContent(elem);
}
return elem;
}
private Element initPropertiesTag(){
Element elem = root.getChild(PROPERTIES_TAG_NAME);
if(elem == null){
elem = new Element(PROPERTIES_TAG_NAME);
root.addContent(elem);
}
return elem;
}
}