/* * 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.annotation.dialog; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.NumberTextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.spring.injection.annot.SpringBean; import de.tudarmstadt.ukp.clarin.webanno.api.AnnotationSchemaService; import de.tudarmstadt.ukp.clarin.webanno.api.ProjectService; import de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst; import de.tudarmstadt.ukp.clarin.webanno.api.annotation.exception.AnnotationException; import de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotationPreference; import de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorState; import de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer; import de.tudarmstadt.ukp.clarin.webanno.model.Mode; import de.tudarmstadt.ukp.clarin.webanno.model.Project; import de.tudarmstadt.ukp.clarin.webanno.model.SourceDocument; import de.tudarmstadt.ukp.clarin.webanno.ui.annotation.PreferencesUtil; import de.tudarmstadt.ukp.clarin.webanno.ui.annotation.detail.AnnotationDetailEditorPanel; import de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Token; /** * Modal Window to configure layers, window size, etc. */ public class AnnotationPreferenceModalPanel extends Panel { private static final long serialVersionUID = -2102136855109258306L; private @SpringBean AnnotationSchemaService annotationService; private @SpringBean ProjectService projectService; private final AnnotationLayerDetailForm tagSelectionForm; private NumberTextField<Integer> windowSizeField; private NumberTextField<Integer> curationWindowSizeField; private NumberTextField<Integer> sidebarSizeField; private NumberTextField<Integer> fontSizeField; private final AnnotatorState bModel; private class AnnotationLayerDetailForm extends Form<AnnotationLayerDetailFormModel> { private static final long serialVersionUID = -683824912741426241L; public AnnotationLayerDetailForm(String id, final ModalWindow modalWindow, AnnotationDetailEditorPanel aEditor) { super(id, new CompoundPropertyModel<AnnotationLayerDetailFormModel>( new AnnotationLayerDetailFormModel())); // Import current settings from the annotator getModelObject().windowSize = bModel.getPreferences().getWindowSize() < 1 ? 1 : bModel.getPreferences().getWindowSize(); getModelObject().curationWindowSize = bModel.getPreferences().getCurationWindowSize(); getModelObject().sidebarSize = bModel.getPreferences().getSidebarSize(); getModelObject().fontSize = bModel.getPreferences().getFontSize(); getModelObject().scrollPage = bModel.getPreferences().isScrollPage(); getModelObject().staticColor = bModel.getPreferences().isStaticColor(); getModelObject().rememberLayer = bModel.getPreferences().isRememberLayer(); for (AnnotationLayer layer : bModel.getAnnotationLayers()) { getModelObject().annotationLayers.add(layer); } windowSizeField = new NumberTextField<Integer>("windowSize"); windowSizeField.setType(Integer.class); windowSizeField.setMinimum(1); add(windowSizeField); sidebarSizeField = new NumberTextField<Integer>("sidebarSize"); sidebarSizeField.setType(Integer.class); sidebarSizeField.setMinimum(AnnotationPreference.SIDEBAR_SIZE_MIN); sidebarSizeField.setMaximum(AnnotationPreference.SIDEBAR_SIZE_MAX); add(sidebarSizeField); fontSizeField = new NumberTextField<Integer>("fontSize"); fontSizeField.setType(Integer.class); fontSizeField.setMinimum(AnnotationPreference.FONT_SIZE_MIN); fontSizeField.setMaximum(AnnotationPreference.FONT_SIZE_MAX); add(fontSizeField); curationWindowSizeField = new NumberTextField<Integer>("curationWindowSize"); curationWindowSizeField.setType(Integer.class); curationWindowSizeField.setMinimum(1); if (!bModel.getMode().equals(Mode.CURATION)) { curationWindowSizeField.setEnabled(false); } // add(curationWindowSizeField); add(new CheckBoxMultipleChoice<AnnotationLayer>("annotationLayers") { private static final long serialVersionUID = 1L; { setSuffix("<br>"); setChoices(new LoadableDetachableModel<List<AnnotationLayer>>() { private static final long serialVersionUID = 1L; @Override protected List<AnnotationLayer> load() { // disable corefernce annotation for correction/curation pages for 0.4.0 // release List<AnnotationLayer> layers = annotationService .listAnnotationLayer(bModel.getProject()); List<AnnotationLayer> corefTagSets = new ArrayList<AnnotationLayer>(); List<AnnotationLayer> hideLayer = new ArrayList<AnnotationLayer>(); for (AnnotationLayer layer : layers) { if (!layer.isEnabled()) { hideLayer.add(layer); continue; } if (layer.getName().equals(Token.class.getName())) { hideLayer.add(layer); } else if (layer.getType().equals(WebAnnoConst.CHAIN_TYPE)) { corefTagSets.add(layer); } } if (bModel.getMode().equals(Mode.CORRECTION) || bModel.getMode().equals(Mode.CURATION)) { layers.removeAll(corefTagSets); } layers.removeAll(hideLayer); return layers; } }); setChoiceRenderer(new ChoiceRenderer<AnnotationLayer>("uiName", "id")); } }); // Add a Checkbox to enable/disable automatic page navigations while annotating add(new CheckBox("scrollPage")); add(new CheckBox("rememberLayer")); add(new CheckBox("staticColor")); add(new Label("scrollPageLabel", "Auto-scroll document while annotating :")); add(new AjaxSubmitLink("saveButton") { private static final long serialVersionUID = -755759008587787147L; @Override protected void onSubmit(AjaxRequestTarget aTarget, Form<?> aForm) { bModel.getPreferences().setScrollPage(getModelObject().scrollPage); bModel.getPreferences().setRememberLayer(getModelObject().rememberLayer); bModel.setAnnotationLayers(getModelObject().annotationLayers); bModel.getPreferences().setWindowSize(getModelObject().windowSize); bModel.getPreferences().setSidebarSize(getModelObject().sidebarSize); bModel.getPreferences().setFontSize(getModelObject().fontSize); /* bModel.getPreferences().setCurationWindowSize( getModelObject().curationWindowSize);*/ bModel.getPreferences().setStaticColor(getModelObject().staticColor); try { PreferencesUtil.savePreference(bModel, projectService); aEditor.loadFeatureEditorModels(aTarget); } catch (FileNotFoundException e) { error("Preference file not found"); } catch (IOException e) { error("Preference file not found"); } catch (AnnotationException e) { error("Preference file not found"); } modalWindow.close(aTarget); aTarget.add(aEditor); } @Override protected void onError(AjaxRequestTarget aTarget, Form<?> aForm) { } }); add(new AjaxLink<Void>("cancelButton") { private static final long serialVersionUID = 7202600912406469768L; @Override public void onClick(AjaxRequestTarget aTarget) { AnnotationLayerDetailForm.this.detach(); onCancel(aTarget); modalWindow.close(aTarget); } }); } } protected void onCancel(AjaxRequestTarget aTarget) { } public static class AnnotationLayerDetailFormModel implements Serializable { private static final long serialVersionUID = -1L; public Project project; public SourceDocument document; public int windowSize; public int sidebarSize; public int fontSize; public int curationWindowSize; public boolean scrollPage; public boolean rememberLayer; public boolean staticColor; public List<AnnotationLayer> annotationLayers = new ArrayList<AnnotationLayer>(); } public AnnotationPreferenceModalPanel(String aId, final ModalWindow modalWindow, AnnotatorState aBModel, AnnotationDetailEditorPanel aEditor) { super(aId); this.bModel = aBModel; tagSelectionForm = new AnnotationLayerDetailForm("tagSelectionForm", modalWindow, aEditor); add(tagSelectionForm); } }