// This file is part of AceWiki.
// Copyright 2008-2013, AceWiki developers.
//
// AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
// Lesser General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
// even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
// not, see http://www.gnu.org/licenses/.
package ch.uzh.ifi.attempto.aceeditor;
import java.util.Arrays;
import nextapp.echo.app.Border;
import nextapp.echo.app.Color;
import nextapp.echo.app.Column;
import nextapp.echo.app.Component;
import nextapp.echo.app.Extent;
import nextapp.echo.app.Font;
import nextapp.echo.app.Insets;
import nextapp.echo.app.Row;
import ch.uzh.ifi.attempto.ape.ACEParserResult;
import ch.uzh.ifi.attempto.ape.OutputType;
import ch.uzh.ifi.attempto.ape.SyntaxBoxes;
import ch.uzh.ifi.attempto.echocomp.HSpace;
import ch.uzh.ifi.attempto.echocomp.Label;
import ch.uzh.ifi.attempto.echocomp.SolidLabel;
import echopoint.DirectHtml;
import echopoint.util.HtmlKit;
/**
* This class represents a certain result of the parser for a certain ACE text. Such results can be
* DRSs, paraphrases, syntax trees, etc.
*
* @author Tobias Kuhn
*/
class ResultItem extends Row {
private static final long serialVersionUID = -5108657342043962969L;
// The possible types:
public static final String PARAPHRASE = "Paraphrase";
public static final String SENTENCES = "Sentences";
public static final String TOKENS = "Tokens";
public static final String SYNTAX_LIST = "Syntax List";
public static final String SYNTAX_TREE = "Syntax Tree";
public static final String SYNTAX_BOXES = "Syntax Boxes";
public static final String DRS_PROLOG = "Prolog DRS";
public static final String DRS_PRETTY = "Pretty-Printed DRS";
public static final String DRS_XML = "XML DRS";
public static final String FOL = "First-order Logic";
public static final String PNF = "Normalized First-order Logic";
public static final String OWL_FSS = "OWL FSS";
public static final String OWL_XML = "OWL XML";
public static final String[] TYPES = new String[] {
PARAPHRASE, SENTENCES, TOKENS, SYNTAX_LIST, SYNTAX_TREE, SYNTAX_BOXES, DRS_PROLOG,
DRS_PRETTY, DRS_XML, FOL, PNF, OWL_FSS, OWL_XML
};
private static final String[] PREFORMATED_TYPES = new String[] {
SYNTAX_TREE, DRS_PRETTY, DRS_XML, OWL_FSS, OWL_XML
};
private static final String[] HTML_TYPES = new String[] {SYNTAX_BOXES};
private String type;
private String content;
private Column contentColumn;
/**
* Creates a new result item for the given type.
*
* @param type The type of the result item to be created.
*/
public ResultItem(String type) {
this.type = type;
setInsets(new Insets(0, 0, 0, 5));
Column mainColumn = new Column();
mainColumn.setBorder(new Border(1, Color.BLACK, Border.STYLE_SOLID));
Row headRow = new Row();
headRow.setCellSpacing(new Extent(5));
headRow.setInsets(new Insets(2, 0));
headRow.setBackground(new Color(200, 200, 200));
SolidLabel titleLabel = new SolidLabel(type, Font.PLAIN, 9);
titleLabel.setForeground(Color.WHITE);
headRow.add(titleLabel);
contentColumn = new Column();
contentColumn.setInsets(new Insets(10, 0));
mainColumn.add(headRow);
mainColumn.add(contentColumn);
add(mainColumn);
add(new HSpace());
}
/**
* Sets the content of this result item on the basis of the given parser result.
*
* @param parserResult The parser result according to which this result item should be set.
*/
public void setContent(ACEParserResult parserResult) {
setContent(getOutput(parserResult));
}
private void setContent(String content) {
this.content = content;
contentColumn.removeAll();
Component contentComp;
if (isPreformated()) {
contentComp = new DirectHtml(
"<pre style=\"font-size:11px;\">" + HtmlKit.encode(content) + "</pre>"
);
} else if (isHtml()) {
contentComp = new DirectHtml("<span style=\"font-size:11px;\">" + content + "</span>");
} else {
Label l = new Label(content);
l.setFont(new Font(Font.MONOSPACE, Font.PLAIN, new Extent(11)));
Column c = new Column();
c.setInsets(new Insets(0, 10));
c.add(l);
contentComp = c;
}
contentColumn.add(contentComp);
}
/**
* Returns the type of this result item.
*
* @return The type of this result item.
*/
public String getType() {
return type;
}
/**
* Copies this result item.
*
* @return A copy of this result item.
*/
public ResultItem copy() {
ResultItem copy = new ResultItem(type);
copy.setContent(content);
copy.setVisible(isVisible());
return copy;
}
private String getOutput(ACEParserResult parserResult) {
if (type.equals(ResultItem.PARAPHRASE)) return parserResult.get(OutputType.PARAPHRASE);
if (type.equals(ResultItem.SENTENCES)) return parserResult.get(OutputType.SENTENCES);
if (type.equals(ResultItem.TOKENS)) return parserResult.get(OutputType.TOKENS);
if (type.equals(ResultItem.SYNTAX_LIST)) return parserResult.get(OutputType.SYNTAX);
if (type.equals(ResultItem.SYNTAX_TREE)) return parserResult.get(OutputType.SYNTAXPP);
if (type.equals(ResultItem.SYNTAX_BOXES)) return SyntaxBoxes.getBoxesHtml(parserResult);
if (type.equals(ResultItem.DRS_PROLOG)) return parserResult.get(OutputType.DRS);
if (type.equals(ResultItem.DRS_PRETTY)) return parserResult.get(OutputType.DRSPP);
if (type.equals(ResultItem.DRS_XML)) return parserResult.get(OutputType.DRSXML);
if (type.equals(ResultItem.FOL)) return parserResult.get(OutputType.FOL);
if (type.equals(ResultItem.PNF)) return parserResult.get(OutputType.PNF);
if (type.equals(ResultItem.OWL_FSS)) return parserResult.get(OutputType.OWLFSSPP);
if (type.equals(ResultItem.OWL_XML)) return parserResult.get(OutputType.OWLXML);
return "";
}
private boolean isPreformated() {
return Arrays.asList(PREFORMATED_TYPES).contains(type);
}
private boolean isHtml() {
return Arrays.asList(HTML_TYPES).contains(type);
}
}