001package org.biopax.paxtools.impl.level3;
002
003import org.biopax.paxtools.model.level3.Named;
004import org.biopax.paxtools.util.BPCollections;
005import org.biopax.paxtools.util.SetStringBridge;
006import org.hibernate.annotations.Cache;
007import org.hibernate.annotations.*;
008import org.hibernate.search.annotations.Analyze;
009import org.hibernate.search.annotations.Boost;
010import org.hibernate.search.annotations.Field;
011import org.hibernate.search.annotations.FieldBridge;
012
013import javax.persistence.*;
014import javax.persistence.Entity;
015import java.util.Set;
016
017/**
018 */
019@Entity
020@Proxy(proxyClass= Named.class)
021@DynamicUpdate @DynamicInsert
022@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
023public abstract class NamedImpl extends XReferrableImpl implements Named
024{
025
026        private String standardName;
027        private String displayName;
028        private Set<String> allNames;
029
030        public NamedImpl()
031        {
032                allNames = BPCollections.I.createSet();
033                displayName = null;
034                standardName = null;
035        }
036
037        
038    @Field(name=FIELD_NAME, analyze=Analyze.YES, boost=@Boost(3.0f))
039        @Column(columnDefinition="LONGTEXT")
040        protected String getStandardNameX()
041        {
042                return standardName;
043        }
044        protected void setStandardNameX(String name)
045        {
046                standardName = name;
047        }
048
049        @Transient
050        public String getStandardName()
051        {
052                return standardName;
053        }
054
055        public void setStandardName(String name)
056        {
057                addName(standardName = name);
058        }
059        
060    @Field(name=FIELD_NAME, analyze=Analyze.YES, boost=@Boost(2.5f))
061        @Column(columnDefinition="LONGTEXT")
062        protected String getDisplayNameX()
063        {
064                return displayName;
065        }
066        protected void setDisplayNameX(String displayName)
067        {
068                this.displayName = displayName;
069        }
070        
071        @Transient
072        public String getDisplayName()
073        {
074                return displayName;
075        }
076
077        public void setDisplayName(String displayName)
078        {
079                addName(this.displayName = displayName);
080        }
081        
082    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
083    @ElementCollection(fetch=FetchType.EAGER)
084        @JoinTable(name="name")
085    @Field(name=FIELD_NAME, analyze=Analyze.YES, boost=@Boost(2.5f), bridge=@FieldBridge(impl=SetStringBridge.class))
086        @Column(columnDefinition="LONGTEXT")
087        public Set<String> getName()
088        {
089                return allNames;
090        }
091
092        public void setName(Set<String> names)
093        {
094                allNames = names;
095
096                //also include the display and standard names if they're set
097                if(displayName!=null && !displayName.isEmpty())
098                        allNames.add(displayName);
099                if(standardName!=null && !standardName.isEmpty())
100                        allNames.add(standardName);
101        }
102        
103        public void addName(String name)
104        {
105                if (name != null && name.length() > 0)
106                        allNames.add(name);
107        }
108
109        public void removeName(String name)
110        {
111                if (name != null)
112                {
113                        allNames.remove(name);
114                        if (name.equals(standardName))
115                        {
116                                standardName = null;
117                        }
118                        if (name.equals(displayName))
119                        {
120                                displayName = null;
121                        }
122                }
123        }
124
125}