// Path: freya/freya-annotate/src/main/java/org/freya/model/OntologyElement.java
// public interface OntologyElement extends Serializable {
// 
// 	public String getFunction();
// 
// 	public void setFunction(String function);
// 
// 	public boolean isAlreadyAdded();
// 
// 	public void setAlreadyAdded(boolean alreadyAdded);
// 
// 	public Annotation getAnnotation();
// 	
// 	public void setAnnotation(Annotation annotation);
// 
// 	public String getVariable();
// 
// 	public void setVariable(String key);
// 
// 	public boolean isMainSubject();
// 
// 	public void setMainSubject(boolean value);
// 
// 	public List<String> getResults();
// 
// 	public void setResults(List<String> results);
// 
// 	public Object getData();
// 
// 	public void setData(Object data);
// 
// 	public void setScore(Score score);
// 
// 	public Score getScore();
// 
// 	public boolean isAnswer();
// 
// 	public void setAnswer(boolean isAnswer);
// 
// 	public boolean equals(Object o);
// 
// }
// 
// Path: freya/freya-annotate/src/main/java/org/freya/model/SemanticConcept.java
// @XmlRootElement
// public class SemanticConcept implements Serializable {
// 
//     OntologyElement ontologyElement;
//     String function;
//     Boolean verified = false;
//     Double score;
// 
//     public Double getScore() {
//         return score;
//     }
// 
//     public void setScore(Double score) {
//         this.score = score;
//     }
// 
//     public Boolean isVerified() {
//         return verified;
//     }
// 
//     public void setVerified(Boolean verified) {
//         this.verified = verified;
//     }
// 
//     public OntologyElement getOntologyElement() {
//         return ontologyElement;
//     }
// 
//     public void setOntologyElement(OntologyElement ontologyElement) {
//         this.ontologyElement = ontologyElement;
//     }
// 
//     public String getFunction() {
//         return function;
//     }
// 
//     public void setFunction(String function) {
//         this.function = function;
//     }
// 
//     public String toString() {
//         StringBuffer b = new StringBuffer("");
//         b.append("Ontology Elements:\n");
//         if (ontologyElement != null) b.append(ontologyElement.toString());
//         b.append(" Verified:").append(verified).append("\n");
//         b.append(" Function:").append(function).append("\n");
//         if (ontologyElement != null)
//             b.append("Is ontology element already added:"
//                             + ontologyElement.isAlreadyAdded() + "\n");
//         return b.toString();
//     }
// 
//     public Object clone() {
//         Object deepCopy = null;
//         ByteArrayOutputStream byteArrOs = new ByteArrayOutputStream();
//         ObjectOutputStream objOs;
//         try {
//             objOs = new ObjectOutputStream(byteArrOs);
//             objOs.writeObject(this);
//             ByteArrayInputStream byteArrIs =
//                             new ByteArrayInputStream(byteArrOs.toByteArray());
//             ObjectInputStream objIs = new ObjectInputStream(byteArrIs);
//             deepCopy = objIs.readObject();
//             return deepCopy;
//         } catch (IOException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         } catch (ClassNotFoundException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         }
//         return deepCopy;
//     }
// 
//     public boolean equals(Object theOtherConcept) {
//         boolean isEqual = false;
//         String function1 = this.getFunction();
//         String function2 = ((SemanticConcept) theOtherConcept).getFunction();
//         OntologyElement element1 = this.getOntologyElement();
//         OntologyElement element2 =
//                         ((SemanticConcept) theOtherConcept).getOntologyElement();
//         boolean functionEquals = false;
//         if (function1 != null && function2 != null)
//             functionEquals = function1.equals(function2);
//         else if (function1 == null && function2 == null) functionEquals = true;
//         boolean verifiedEquals = false;
//         if (this.isVerified().booleanValue() == ((SemanticConcept) theOtherConcept)
//                         .isVerified().booleanValue()) verifiedEquals = true;
//         if (functionEquals && element1.equals(element2))
//             isEqual = true;
//         // System.out
//         // .print("************************************************************calling equals method..result is:"
//         // + isEqual);
//         return isEqual;
//     }
// }


import java.util.ArrayList;
import java.util.List;
import org.freya.model.OntologyElement;
import org.freya.model.SemanticConcept;
package org.freya.util;


public class OntologyElementsUtil {
    /**
     * @param list
     * @return
     */
    public static String beautifyListOfOntologyElements(List<OntologyElement> list) {
        StringBuffer buff = new StringBuffer();
        for (OntologyElement el : list) {
            buff.append(el.getClass().getSimpleName()).append(":").append(el.getData());

        }
        if (list != null && list.size() > 0) {
            buff.append("(").append(list.get(0).getAnnotation().getText()).append(",")
                            .append(list.get(0).getAnnotation().getStartOffset()).append(",")
                            .append(list.get(0).getAnnotation().getEndOffset()).append(")");
        }
        return buff.toString();
    }

    /**
     * utility method takes ontology elements from semantic concepts and generates a list
     * 
     * @param candidates
     * @return
     */
    public static List<OntologyElement> fromSemanticConceptsToOntologyElements(
// Path: freya/freya-annotate/src/main/java/org/freya/model/OntologyElement.java
// public interface OntologyElement extends Serializable {
// 
// 	public String getFunction();
// 
// 	public void setFunction(String function);
// 
// 	public boolean isAlreadyAdded();
// 
// 	public void setAlreadyAdded(boolean alreadyAdded);
// 
// 	public Annotation getAnnotation();
// 	
// 	public void setAnnotation(Annotation annotation);
// 
// 	public String getVariable();
// 
// 	public void setVariable(String key);
// 
// 	public boolean isMainSubject();
// 
// 	public void setMainSubject(boolean value);
// 
// 	public List<String> getResults();
// 
// 	public void setResults(List<String> results);
// 
// 	public Object getData();
// 
// 	public void setData(Object data);
// 
// 	public void setScore(Score score);
// 
// 	public Score getScore();
// 
// 	public boolean isAnswer();
// 
// 	public void setAnswer(boolean isAnswer);
// 
// 	public boolean equals(Object o);
// 
// }
// 
// Path: freya/freya-annotate/src/main/java/org/freya/model/SemanticConcept.java
// @XmlRootElement
// public class SemanticConcept implements Serializable {
// 
//     OntologyElement ontologyElement;
//     String function;
//     Boolean verified = false;
//     Double score;
// 
//     public Double getScore() {
//         return score;
//     }
// 
//     public void setScore(Double score) {
//         this.score = score;
//     }
// 
//     public Boolean isVerified() {
//         return verified;
//     }
// 
//     public void setVerified(Boolean verified) {
//         this.verified = verified;
//     }
// 
//     public OntologyElement getOntologyElement() {
//         return ontologyElement;
//     }
// 
//     public void setOntologyElement(OntologyElement ontologyElement) {
//         this.ontologyElement = ontologyElement;
//     }
// 
//     public String getFunction() {
//         return function;
//     }
// 
//     public void setFunction(String function) {
//         this.function = function;
//     }
// 
//     public String toString() {
//         StringBuffer b = new StringBuffer("");
//         b.append("Ontology Elements:\n");
//         if (ontologyElement != null) b.append(ontologyElement.toString());
//         b.append(" Verified:").append(verified).append("\n");
//         b.append(" Function:").append(function).append("\n");
//         if (ontologyElement != null)
//             b.append("Is ontology element already added:"
//                             + ontologyElement.isAlreadyAdded() + "\n");
//         return b.toString();
//     }
// 
//     public Object clone() {
//         Object deepCopy = null;
//         ByteArrayOutputStream byteArrOs = new ByteArrayOutputStream();
//         ObjectOutputStream objOs;
//         try {
//             objOs = new ObjectOutputStream(byteArrOs);
//             objOs.writeObject(this);
//             ByteArrayInputStream byteArrIs =
//                             new ByteArrayInputStream(byteArrOs.toByteArray());
//             ObjectInputStream objIs = new ObjectInputStream(byteArrIs);
//             deepCopy = objIs.readObject();
//             return deepCopy;
//         } catch (IOException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         } catch (ClassNotFoundException e) {
//             // TODO Auto-generated catch block
//             e.printStackTrace();
//         }
//         return deepCopy;
//     }
// 
//     public boolean equals(Object theOtherConcept) {
//         boolean isEqual = false;
//         String function1 = this.getFunction();
//         String function2 = ((SemanticConcept) theOtherConcept).getFunction();
//         OntologyElement element1 = this.getOntologyElement();
//         OntologyElement element2 =
//                         ((SemanticConcept) theOtherConcept).getOntologyElement();
//         boolean functionEquals = false;
//         if (function1 != null && function2 != null)
//             functionEquals = function1.equals(function2);
//         else if (function1 == null && function2 == null) functionEquals = true;
//         boolean verifiedEquals = false;
//         if (this.isVerified().booleanValue() == ((SemanticConcept) theOtherConcept)
//                         .isVerified().booleanValue()) verifiedEquals = true;
//         if (functionEquals && element1.equals(element2))
//             isEqual = true;
//         // System.out
//         // .print("************************************************************calling equals method..result is:"
//         // + isEqual);
//         return isEqual;
//     }
// }


// Path: freya/freya-annotate/src/main/java/org/freya/util/OntologyElementsUtil.java
import java.util.ArrayList;
import java.util.List;
import org.freya.model.OntologyElement;
import org.freya.model.SemanticConcept;

package org.freya.util;


public class OntologyElementsUtil {
    /**
     * @param list
     * @return
     */
    public static String beautifyListOfOntologyElements(List<OntologyElement> list) {
        StringBuffer buff = new StringBuffer();
        for (OntologyElement el : list) {
            buff.append(el.getClass().getSimpleName()).append(":").append(el.getData());

        }
        if (list != null && list.size() > 0) {
            buff.append("(").append(list.get(0).getAnnotation().getText()).append(",")
                            .append(list.get(0).getAnnotation().getStartOffset()).append(",")
                            .append(list.get(0).getAnnotation().getEndOffset()).append(")");
        }
        return buff.toString();
    }

    /**
     * utility method takes ontology elements from semantic concepts and generates a list
     * 
     * @param candidates
     * @return
     */
    public static List<OntologyElement> fromSemanticConceptsToOntologyElements(
                    List<SemanticConcept> candidates) {