001package org.biopax.paxtools.impl.level3;
002
003import org.apache.commons.logging.Log;
004import org.apache.commons.logging.LogFactory;
005import org.biopax.paxtools.model.level3.Provenance;
006import org.biopax.paxtools.model.level3.Xref;
007import org.hibernate.annotations.Cache;
008import org.hibernate.annotations.CacheConcurrencyStrategy;
009import org.hibernate.annotations.Proxy;
010import org.hibernate.annotations.DynamicInsert;
011import org.hibernate.annotations.DynamicUpdate; 
012import org.hibernate.search.annotations.Indexed;
013
014import javax.persistence.Entity;
015import javax.persistence.Transient;
016
017import java.util.Comparator;
018import java.util.TreeSet;
019
020@Entity
021@Proxy(proxyClass= Provenance.class)
022@Indexed
023@DynamicUpdate @DynamicInsert
024@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
025public class ProvenanceImpl extends NamedImpl implements Provenance
026{
027        private final static Log LOG = LogFactory.getLog(ProvenanceImpl.class);
028        
029        public ProvenanceImpl() {
030        }
031
032        @Transient
033    public Class<? extends Provenance> getModelInterface()
034        {
035                return Provenance.class;
036        }
037
038        /*
039         * (non-Javadoc)
040         * @see org.biopax.paxtools.impl.BioPAXElementImpl#toString()
041         * 
042         * TODO this probably makes inconsistent strings (on different systems); fix, if it matters....
043         * 
044         */
045        @Override public String toString()
046        {
047                try {
048                        StringBuilder s = new StringBuilder();
049
050                        for (String name : new TreeSet<String>(this.getName())) 
051                                s.append(name).append(";");
052                        
053                        if (!getXref().isEmpty()) 
054                        {
055                                TreeSet<Xref> xrefs = new TreeSet<Xref>(new Comparator<Xref>() {
056                                        @Override
057                                        public int compare(Xref o1, Xref o2) {
058                                                return o1.toString().compareTo(o2.toString());
059                                        }                                       
060                                });
061                                xrefs.addAll(getXref());
062                                
063                                s.append(" (");
064                                for (Xref anXref : xrefs)
065                                        s.append(anXref).append(";");
066                                s.append(")");
067                        }
068                        
069                        return s.toString();
070
071                } catch (Exception e) {
072                        // possible issues - when in a persistent context (e.g., lazy
073                        // collections init...)
074                        LOG.warn("toString: ", e);
075                        return getRDFId();
076                }
077        }
078}