001 package nl.cwi.sen1.visbase.factbrowser.data;
002
003 import java.util.Iterator;
004 import java.util.Observable;
005 import java.util.Observer;
006
007 import javax.swing.tree.DefaultMutableTreeNode;
008
009 import nl.cwi.sen1.relationstores.types.RType;
010
011 import org.apache.commons.logging.Log;
012 import org.apache.commons.logging.LogFactory;
013
014 /**
015 * This class is the in memory representation of a Fact coupled to a specific
016 * FactType. This FactType is like <str, str> or similar. The class extends the
017 * DefaultMutableTreeNode so we can directly add new Visualisations which can
018 * represent the Fact.
019 *
020 * @author Renze de Vries
021 * @date 14-02-2007
022 *
023 */
024 public class RStoreFact extends DefaultMutableTreeNode implements Observer {
025 private static final long serialVersionUID = 4010260633083415595L;
026 private static final Log log = LogFactory.getLog(RStoreFact.class);
027 private String factName;
028 private RType rType;
029
030 private int factId;
031
032 private RStoreFactType factType;
033
034 /**
035 * This is the default constructor only present for failsafe situations.
036 * Normally the overloaded constructor: FactNode(String factName, int
037 * factId, RStoreFactType factType) should be used.
038 *
039 * @author Renze de Vries
040 * @date 14-02-2007
041 */
042 public RStoreFact() {
043 factName = "";
044 factId = 0;
045 factType = new RStoreFactType("");
046
047 //By default all FactNodes have no available visualisations
048 DefaultMutableTreeNode noVisNode = new DefaultMutableTreeNode(
049 "no visualisations");
050 this.add(noVisNode);
051 }
052
053 /**
054 * The constructor with all the parameters to create a new Fact
055 *
056 * @param factName
057 * The Name of the Fact
058 * @param factId
059 * The unique identifier of the Fact
060 * @param factType
061 * The Type the fact is composed of
062 *
063 * @author Renze de Vries
064 * @date 14-02-2007
065 */
066 public RStoreFact(String factName, int factId, RStoreFactType factType) {
067 this.factName = factName;
068 this.factId = factId;
069 this.factType = factType;
070
071 factType.addObserver(this);
072
073 update(factType, null);
074
075 //By default all FactNodes have no available visualisations
076 //DefaultMutableTreeNode noVisNode = new DefaultMutableTreeNode(
077 // "no visualisations");
078 //this.add(noVisNode);
079 }
080
081 /**
082 * toString method so in the tree it will be visible what the name of the
083 * fact is and which FactType it is.
084 *
085 * @author Renze de Vries
086 * @date 14-02-2007
087 */
088 public String toString() {
089 return factName + "(" + factType.getFactType() + ")";
090 }
091
092 /**
093 * getFactName method so we can determine the name without the FactType
094 *
095 * @author Renze de Vries
096 * @date 20-02-2007
097 */
098 public String getFactName() {
099 return this.factName;
100 }
101
102 /**
103 * get the FactType this fact is composed of.
104 *
105 * @return The factType
106 *
107 * @author Renze de Vries
108 * @date 14-02-2007
109 */
110 public RStoreFactType getFactType() {
111 return this.factType;
112 }
113
114 /**
115 * This method is there to contain the RType.
116 *
117 * @return The RType itself
118 *
119 * @author Renze de Vries
120 * @date 23-02-2007
121 */
122 public RType getRType() {
123 return rType;
124 }
125
126 /**
127 * This method sets the RType of the FactNode
128 *
129 * @param type This is the actual RType
130 *
131 * @author Renze de Vries
132 * @date 23-02-2007
133 */
134 public void setRType(RType type) {
135 rType = type;
136 }
137
138 /**
139 * get the FactId so we can identify it's uniqueness
140 *
141 * @return The factId
142 *
143 * @author Renze de Vries
144 * @date 14-02-2007
145 */
146 public int getFactId() {
147 return this.factId;
148 }
149
150 /**
151 * Whenever a new visualisation plugin is added for the specific FactType
152 * this method is called as an update caller. This method will update the in
153 * memory tree so it will display the current available visualisations
154 *
155 * @author Renze de Vries
156 * @date 14-02-2007
157 */
158 public void update(Observable arg0, Object arg1) {
159 log.debug("New visualisation plugin for this fact: "
160 + factName);
161
162 //Cast the update from the model to a RStoreFactType
163 RStoreFactType factType = (RStoreFactType) arg0;
164
165 //Remove all the children so we can rebuild the tree
166 this.removeAllChildren();
167
168 Iterator<VisualisationPlugin> iterator = factType.getVisualisationPlugins().iterator();
169
170 //While there are visualisations continue
171 while (iterator.hasNext()) {
172 VisualisationPlugin visPlugin = iterator.next();
173 // Display the visualisationPlugin in the visible Tree
174 DefaultMutableTreeNode visTreeNode = new DefaultMutableTreeNode(
175 visPlugin);
176
177 log.debug("Adding the visualisation to FactNode");
178
179 //add the visualisatoinPlugin to the Tree
180 this.add(visTreeNode);
181 }
182 }
183
184 public String getType() {
185 return getRType().toTerm().toString();
186 }
187 }