/*
* Copyright 2009-2011 Collaborative Research Centre SFB 632
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package annis.frontend.servlets.visualizers;
import annis.service.ifaces.AnnisResult;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
public abstract class Visualizer
{
private String namespace = "";
private String paula = null;
private Map<String, String> markableMap = new HashMap<String, String>();
private Map<String, String> markableExactMap = new HashMap<String, String>();
private String id = "";
private String contextPath;
private String annisRemoteServiceURL;
private String dotPath;
private Document paulaJDOM = null;
private AnnisResult result;
private Properties mappings;
// BEGIN properties
/**
* Gets the namespace to be processed by {@link #writeOutput(Writer)}.
*/
public String getNamespace()
{
return namespace;
}
/**
* Sets the namespace to be processed by {@link #writeOutput(Writer)}.
*
* @param namespace
* Namespace to be processed
*/
public void setNamespace(String namespace)
{
this.namespace = namespace;
}
/**
* Gets the context path of this Annis installation.
*
* @return The context path, beginning with an "/" but *not* ending with it.
*/
public String getContextPath()
{
return contextPath;
}
/**
* Sets the context path of this Annis installation.
*
* @param contextPath
* The context path, beginning with an "/" but *not* ending with it.
*/
public void setContextPath(String contextPath)
{
this.contextPath = contextPath;
}
/**
* Get the URL which is configured for the Annis installation.
*/
public String getAnnisRemoteServiceURL()
{
return annisRemoteServiceURL;
}
/**
* Set the URL which is configured for the Annis installation.
*/
public void setAnnisRemoteServiceURL(String annisRemoteServiceURL)
{
this.annisRemoteServiceURL = annisRemoteServiceURL;
}
/**
* Gets the map of markables used by {@link #writeOutput(Writer)}. The key of this map must be
* the corresponding node id of annotations or tokens. The values must be HTML compatible color
* definitions like #000000 or red. For detailed information on HTML color definition refer to
* {@link "http://www.w3schools.com/HTML/html_colornames.asp"}
*/
public Map<String, String> getMarkableMap()
{
return markableMap;
}
/**
* Sets the map of markables used by {@link #writeOutput(Writer)}. The key of this map must be
* the corresponding node id of annotations or tokens. The values must be HTML compatible color
* definitions like #000000 or red. For detailed information on HTML color definition refer to
* {@link "http://www.w3schools.com/HTML/html_colornames.asp"}
*/
public void setMarkableMap(Map<String, String> markableMap)
{
this.markableMap = markableMap;
}
/**
* Same as {@link #getMarkableMap() } except that this only includes the really matched nodes and
* not covered token.
*
* @return
*/
public Map<String, String> getMarkableExactMap()
{
return markableExactMap;
}
public void setMarkableExactMap(Map<String, String> markableExactMap)
{
this.markableExactMap = markableExactMap;
}
/**
* Gets an optional result id to be used by {@link #writeOutput(Writer)}
*/
public String getId()
{
return id;
}
/**
* Sets an optional result id to be used by {@link #writeOutput(Writer)}
*
* @param id
* result id to be used in output
*/
public void setId(String id)
{
this.id = id;
}
public AnnisResult getResult()
{
return result;
}
public void setResult(AnnisResult result)
{
this.result = result;
}
/**
* Gets the private paula String property that will be uses by {@link #writeOutput(Writer)}.
*/
@Deprecated
public String getPaula()
{
if (paula == null) {
// construct Paula from result
paula = result.getPaula();
}
return paula;
}
/**
* Get a JDOM Document representing paula. Will be generated only once.
*
* @deprecated no idea why
*/
@Deprecated
protected Document getPaulaJDOM()
{
if (paulaJDOM == null) {
try {
paulaJDOM = new SAXBuilder().build(new InputSource(new StringReader(getPaula())));
}
catch (Exception ex) {
Logger.getLogger(Visualizer.class.getName()).log(Level.SEVERE, null, ex);
// never return null
paulaJDOM = new Document();
}
}
return paulaJDOM;
}
/**
* Set the path to the dot graph layout generator program.
*
* @deprecated For configuration of visualizers please use the more general
* {@link #setMappings(Properties)} .
*/
@Deprecated
public void setDotPath(String dotPath)
{
this.dotPath = dotPath;
}
/**
* Get the path to the dot graph layout generator program.
*
* @deprecated For configuration of visualizers please use the more general
* {@link #getMappings()} .
*/
@Deprecated
public String getDotPath()
{
return dotPath;
}
/**
* Get the mappings for a visualizers. Mappings are visualizer specific properties, that can be
* configured in the resolver table of the database
*
* @return The mappings as properties.
*/
public Properties getMappings()
{
return mappings;
}
/**
* Set the mappings for a visualizers. Mappings are visualizer specific properties, that can be
* configured in the resolver table of the database
*
* @param mappings
* The new mappings.
*/
public void setMappings(Properties mappings)
{
this.mappings = mappings;
}
// END properties
/**
* Writes the final output to passed OutputStream. The stream should remain open.
*
* @param outstream
* the OutputStream to be used
*/
public abstract void writeOutput(OutputStream outstream);
/**
* Returns the content-type for this particular Visualizer output. For more information see
* {@link javax.servlet.ServletResponse#setContentType(String)}. Must be overridden to change
* default "text/html".
*
* @return the ContentType
*/
public String getContentType()
{
return "text/html";
}
/**
* Returns the character endocing for this particular Visualizer output. For more information
* see {@link javax.servlet.ServletResponse#setCharacterEncoding(String)}. Must be overridden to
* change default "utf-8".
*
* @return the CharacterEncoding
*/
public String getCharacterEncoding()
{
return "utf-8";
}
}