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}