Explanation.java
001 package gate.creole.annic.apache.lucene.search;
002 
003 /**
004  * Copyright 2004 The Apache Software Foundation
005  *
006  * Licensed under the Apache License, Version 2.0 (the "License");
007  * you may not use this file except in compliance with the License.
008  * You may obtain a copy of the License at
009  *
010  *     http://www.apache.org/licenses/LICENSE-2.0
011  *
012  * Unless required by applicable law or agreed to in writing, software
013  * distributed under the License is distributed on an "AS IS" BASIS,
014  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015  * See the License for the specific language governing permissions and
016  * limitations under the License.
017  */
018 
019 import java.util.ArrayList;
020 
021 /** Expert: Describes the score computation for document and query. */
022 @SuppressWarnings({"serial","rawtypes","unchecked"})
023 public class Explanation implements java.io.Serializable {
024   private float value;                            // the value of this node
025   private String description;                     // what it represents
026   private ArrayList details;                      // sub-explanations
027 
028   public Explanation() {}
029 
030   public Explanation(float value, String description) {
031     this.value = value;
032     this.description = description;
033   }
034 
035   /** The value assigned to this explanation node. */
036   public float getValue() { return value; }
037   /** Sets the value assigned to this explanation node. */
038   public void setValue(float value) { this.value = value; }
039 
040   /** A description of this explanation node. */
041   public String getDescription() { return description; }
042   /** Sets the description of this explanation node. */
043   public void setDescription(String description) {
044     this.description = description;
045   }
046 
047   /** The sub-nodes of this explanation node. */
048   public Explanation[] getDetails() {
049     if (details == null)
050       return null;
051     return (Explanation[])details.toArray(new Explanation[0]);
052   }
053 
054   /** Adds a sub-node to this explanation node. */
055   public void addDetail(Explanation detail) {
056     if (details == null)
057       details = new ArrayList();
058     details.add(detail);
059   }
060 
061   /** Render an explanation as text. */
062   @Override
063   public String toString() {
064     return toString(0);
065   }
066   private String toString(int depth) {
067     StringBuffer buffer = new StringBuffer();
068     for (int i = 0; i < depth; i++) {
069       buffer.append("  ");
070     }
071     buffer.append(getValue());
072     buffer.append(" = ");
073     buffer.append(getDescription());
074     buffer.append("\n");
075 
076     Explanation[] details = getDetails();
077     if (details != null) {
078       for (int i = ; i < details.length; i++) {
079         buffer.append(details[i].toString(depth+1));
080       }
081     }
082 
083     return buffer.toString();
084   }
085 
086 
087   /** Render an explanation as HTML. */
088   public String toHtml() {
089     StringBuffer buffer = new StringBuffer();
090     buffer.append("<ul>\n");
091 
092     buffer.append("<li>");
093     buffer.append(getValue());
094     buffer.append(" = ");
095     buffer.append(getDescription());
096     buffer.append("</li>\n");
097 
098     Explanation[] details = getDetails();
099     if (details != null) {
100       for (int i = ; i < details.length; i++) {
101         buffer.append(details[i].toHtml());
102       }
103     }
104 
105     buffer.append("</ul>\n");
106 
107     return buffer.toString();
108   }
109 }