/*
* Copyright 2012
* Ubiquitous Knowledge Processing (UKP) Lab and FG Language Technology
* Technische Universität Darmstadt
*
* 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 de.tudarmstadt.ukp.clarin.webanno.ui.curation.component.model;
import java.io.IOException;
import org.apache.uima.UIMAException;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import com.googlecode.wicket.jquery.ui.resource.JQueryUIResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.api.annotation.exception.AnnotationException;
import de.tudarmstadt.ukp.clarin.webanno.brat.annotation.BratVisualizer;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratAjaxResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratAnnotatorUiResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratConfigurationResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratCurationUiResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratDispatcherResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratUtilResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratVisualizerResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.BratVisualizerUiResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.JQueryJsonResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.JQuerySvgDomResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.brat.resource.JQuerySvgResourceReference;
import de.tudarmstadt.ukp.clarin.webanno.model.Mode;
/**
* Wicket panel for visualizing an annotated sentence in brat. When a user
* clicks on a span or an arc, the Method onSelectAnnotationForMerge() is
* called. Override that method to receive the result in another wicket panel.
*
*/
public class BratSuggestionVisualizer
extends BratVisualizer
{
private static final long serialVersionUID = 6653508018500736430L;
private AbstractDefaultAjaxBehavior controller;
public BratSuggestionVisualizer(String id, IModel<CurationUserSegmentForAnnotationDocument> aModel) {
super(id, aModel);
String username;
if(getModelObject().getBratAnnotatorModel().getMode().equals(Mode.AUTOMATION)
||getModelObject().getBratAnnotatorModel().getMode().equals(Mode.CORRECTION)){
username = "Suggestion";
}
else {
username = getModelObject().getUsername();
}
Label label = new Label("username", username);
add(label);
controller = new AbstractDefaultAjaxBehavior() {
private static final long serialVersionUID = 1133593826878553307L;
@Override
protected void respond(AjaxRequestTarget aTarget) {
try {
onSelectAnnotationForMerge(aTarget);
}
catch (UIMAException | ClassNotFoundException | IOException | AnnotationException e) {
aTarget.addChildren(getPage(), FeedbackPanel.class);
error(e.getMessage());
}
}
};
add(controller);
}
public void setModel(IModel<CurationUserSegmentForAnnotationDocument> aModel)
{
setDefaultModel(aModel);
}
public void setModelObject(CurationUserSegmentForAnnotationDocument aModel)
{
setDefaultModelObject(aModel);
}
@SuppressWarnings("unchecked")
public IModel<CurationUserSegmentForAnnotationDocument> getModel()
{
return (IModel<CurationUserSegmentForAnnotationDocument>) getDefaultModel();
}
public CurationUserSegmentForAnnotationDocument getModelObject()
{
return (CurationUserSegmentForAnnotationDocument) getDefaultModelObject();
}
@Override
public void renderHead(IHeaderResponse aResponse)
{
// MUST NOT CALL super.renderHead here because that would call Util.embedByUrl again!
// super.renderHead(aResponse);
// Libraries
aResponse.render(JavaScriptHeaderItem.forReference(JQueryUIResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(JQuerySvgResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(JQuerySvgDomResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(JQueryJsonResourceReference.get()));
// BRAT helpers
aResponse.render(JavaScriptHeaderItem.forReference(BratConfigurationResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(BratUtilResourceReference.get()));
//aResponse.render(JavaScriptHeaderItem.forReference(BratAnnotationLogResourceReference.get()));
//aResponse.render(JavaScriptHeaderItem.forReference(BratSpinnerResourceReference.get()));
// BRAT modules
aResponse.render(JavaScriptHeaderItem.forReference(BratDispatcherResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(BratAjaxResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(BratVisualizerResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(BratVisualizerUiResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(BratAnnotatorUiResourceReference.get()));
aResponse.render(JavaScriptHeaderItem.forReference(BratCurationUiResourceReference.get()));
//aResponse.render(JavaScriptHeaderItem.forReference(BratUrlMonitorResourceReference.get()));
// BRAT call to load the BRAT JSON from our collProvider and docProvider.
StringBuilder script = new StringBuilder();
script.append("Util.embedByURL(");
script.append(" '"+vis.getMarkupId()+"',");
script.append(" '"+collProvider.getCallbackUrl()+"', ");
script.append(" '"+docProvider.getCallbackUrl()+"', ");
script.append(" function(dispatcher) {");
script.append(" dispatcher.wicketId = '" + vis.getMarkupId() + "'; ");
script.append(" dispatcher.ajaxUrl = '" + controller.getCallbackUrl() + "'; ");
script.append(" var ajax = new Ajax(dispatcher);");
script.append(" var curation_mod = new CurationMod(dispatcher, '"+vis.getMarkupId()+"');");
script.append(" dispatcher.post('clearSVG', []);");
script.append(" });");
aResponse.render(OnLoadHeaderItem.forScript("\n" + script.toString()));
}
@Override
protected String getDocumentData()
{
return getModelObject().getDocumentResponse() == null ? "{}" : getModelObject()
.getDocumentResponse();
}
@Override
protected String getCollectionData()
{
return getModelObject().getCollectionData();
}
protected void onSelectAnnotationForMerge(AjaxRequestTarget aTarget) throws UIMAException, ClassNotFoundException, IOException, AnnotationException
{
// Overriden in Curation Panel
}
}