Search in sources :

Example 1 with ProjectService

use of de.tudarmstadt.ukp.clarin.webanno.api.ProjectService in project webanno by webanno.

the class PreferencesUtil method loadPreferences.

/**
 * Set annotation preferences of users for a given project such as window size, annotation
 * layers,... reading from the file system.
 *
 * @param aUsername
 *            The {@link User} for whom we need to read the preference (preferences are stored
 *            per user)
 * @param aRepositoryService the repository service.
 * @param aAnnotationService the annotation service.
 * @param aBModel
 *            The {@link AnnotatorState} that will be populated with preferences from the
 *            file
 * @param aMode the mode.
 * @throws BeansException hum?
 * @throws IOException hum?
 */
public static void loadPreferences(String aUsername, SettingsService aSettingsService, ProjectService aRepositoryService, AnnotationSchemaService aAnnotationService, AnnotatorState aBModel, Mode aMode) throws BeansException, IOException {
    AnnotationPreference preference = new AnnotationPreference();
    BeanWrapper wrapper = new BeanWrapperImpl(preference);
    // get annotation preference from file system
    try {
        Properties props = aRepositoryService.loadUserSettings(aUsername, aBModel.getProject());
        for (Entry<Object, Object> entry : props.entrySet()) {
            String property = entry.getKey().toString();
            int index = property.indexOf(".");
            String propertyName = property.substring(index + 1);
            String mode = property.substring(0, index);
            if (wrapper.isWritableProperty(propertyName) && mode.equals(aMode.getName())) {
                if (AnnotationPreference.class.getDeclaredField(propertyName).getGenericType() instanceof ParameterizedType) {
                    if (entry.getValue().toString().startsWith("[")) {
                        // its a list
                        List<String> value = Arrays.asList(StringUtils.replaceChars(entry.getValue().toString(), "[]", "").split(","));
                        if (!value.get(0).equals("")) {
                            wrapper.setPropertyValue(propertyName, value);
                        }
                    } else if (entry.getValue().toString().startsWith("{")) {
                        // its a map
                        String s = StringUtils.replaceChars(entry.getValue().toString(), "{}", "");
                        Map<String, String> value = Arrays.stream(s.split(",")).map(x -> x.split("=")).collect(Collectors.toMap(x -> x[0], x -> x[1]));
                        wrapper.setPropertyValue(propertyName, value);
                    }
                } else {
                    wrapper.setPropertyValue(propertyName, entry.getValue());
                }
            }
        }
        // set layers according to preferences
        List<AnnotationLayer> enabledLayers = aAnnotationService.listAnnotationLayer(aBModel.getProject()).stream().filter(// only allow enabled layers
        l -> l.isEnabled()).collect(Collectors.toList());
        List<Long> hiddenLayerIds = preference.getHiddenAnnotationLayerIds();
        enabledLayers = enabledLayers.stream().filter(l -> !hiddenLayerIds.contains(l.getId())).collect(Collectors.toList());
        aBModel.setAnnotationLayers(enabledLayers);
        // Get color preferences for each layer, init with legacy if not found
        Map<Long, ColoringStrategyType> colorPerLayer = preference.getColorPerLayer();
        for (AnnotationLayer layer : aAnnotationService.listAnnotationLayer(aBModel.getProject())) {
            if (!colorPerLayer.containsKey(layer.getId())) {
                colorPerLayer.put(layer.getId(), ColoringStrategyType.LEGACY);
            }
        }
    }// no preference found
     catch (Exception e) {
        // If no layer preferences are defined,
        // then just assume all enabled layers are preferred
        List<AnnotationLayer> enabledLayers = aAnnotationService.listAnnotationLayer(aBModel.getProject()).stream().filter(// only allow enabled layers
        l -> l.isEnabled()).collect(Collectors.toList());
        aBModel.setAnnotationLayers(enabledLayers);
        preference.setWindowSize(aSettingsService.getNumberOfSentences());
        // add default coloring strategy
        Map<Long, ColoringStrategyType> colorPerLayer = new HashMap<>();
        for (AnnotationLayer layer : aBModel.getAnnotationLayers()) {
            colorPerLayer.put(layer.getId(), ColoringStrategy.getBestInitialStrategy(aAnnotationService, layer, preference));
        }
        preference.setColorPerLayer(colorPerLayer);
    }
    aBModel.setPreferences(preference);
}
Also used : Arrays(java.util.Arrays) Properties(java.util.Properties) ProjectService(de.tudarmstadt.ukp.clarin.webanno.api.ProjectService) AnnotatorState(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorState) BeanWrapper(org.springframework.beans.BeanWrapper) IOException(java.io.IOException) HashMap(java.util.HashMap) BeansException(org.springframework.beans.BeansException) ColoringStrategy(de.tudarmstadt.ukp.clarin.webanno.api.annotation.coloring.ColoringStrategy) Mode(de.tudarmstadt.ukp.clarin.webanno.model.Mode) Collectors(java.util.stream.Collectors) StringUtils(org.apache.commons.lang3.StringUtils) BeanWrapperImpl(org.springframework.beans.BeanWrapperImpl) SettingsService(de.tudarmstadt.ukp.clarin.webanno.api.SettingsService) AnnotationSchemaService(de.tudarmstadt.ukp.clarin.webanno.api.AnnotationSchemaService) List(java.util.List) ParameterizedType(java.lang.reflect.ParameterizedType) User(de.tudarmstadt.ukp.clarin.webanno.security.model.User) AnnotationPreference(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotationPreference) AnnotationLayer(de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer) Map(java.util.Map) Entry(java.util.Map.Entry) SecurityContextHolder(org.springframework.security.core.context.SecurityContextHolder) ColoringStrategyType(de.tudarmstadt.ukp.clarin.webanno.api.annotation.coloring.ColoringStrategy.ColoringStrategyType) BeanWrapperImpl(org.springframework.beans.BeanWrapperImpl) Properties(java.util.Properties) AnnotationLayer(de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer) IOException(java.io.IOException) BeansException(org.springframework.beans.BeansException) ParameterizedType(java.lang.reflect.ParameterizedType) BeanWrapper(org.springframework.beans.BeanWrapper) List(java.util.List) AnnotationPreference(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotationPreference) HashMap(java.util.HashMap) Map(java.util.Map) ColoringStrategyType(de.tudarmstadt.ukp.clarin.webanno.api.annotation.coloring.ColoringStrategy.ColoringStrategyType)

Example 2 with ProjectService

use of de.tudarmstadt.ukp.clarin.webanno.api.ProjectService in project webanno by webanno.

the class AnnotationPage method commonInit.

private void commonInit() {
    setModel(Model.of(new AnnotatorStateImpl(Mode.ANNOTATION)));
    // Ensure that a user is set
    getModelObject().setUser(userRepository.getCurrentUser());
    add(createUrlFragmentBehavior());
    add(annotationEditor = createAnnotationEditor());
    add(createRightSidebar());
    add(createLeftSidebar());
    add(createDocumentInfoLabel());
    add(getOrCreatePositionInfoLabel());
    add(openDocumentsModal = new OpenDocumentDialog("openDocumentsModal", getModel(), getAllowedProjects()) {

        private static final long serialVersionUID = 5474030848589262638L;

        @Override
        public void onDocumentSelected(AjaxRequestTarget aTarget) {
            actionLoadDocument(aTarget);
        }
    });
    add(preferencesModal = new AnnotationPreferencesDialog("preferencesDialog", getModel()));
    preferencesModal.setOnChangeAction(this::actionCompletePreferencesChange);
    add(exportDialog = new ExportDocumentDialog("exportDialog", getModel()));
    add(guidelinesDialog = new GuidelinesDialog("guidelinesDialog", getModel()));
    Form<Void> gotoPageTextFieldForm = new Form<>("gotoPageTextFieldForm");
    gotoPageTextField = new NumberTextField<>("gotoPageText", Model.of(1), Integer.class);
    // FIXME minimum and maximum should be obtained from the annotator state
    gotoPageTextField.setMinimum(1);
    gotoPageTextField.setOutputMarkupId(true);
    gotoPageTextFieldForm.add(gotoPageTextField);
    LambdaAjaxSubmitLink gotoPageLink = new LambdaAjaxSubmitLink("gotoPageLink", gotoPageTextFieldForm, this::actionGotoPage);
    gotoPageTextFieldForm.setDefaultButton(gotoPageLink);
    gotoPageTextFieldForm.add(gotoPageLink);
    add(gotoPageTextFieldForm);
    add(new LambdaAjaxLink("initialLoadComplete", this::actionInitialLoadComplete));
    add(new LambdaAjaxLink("showOpenDocumentDialog", this::actionShowOpenDocumentDialog));
    add(new ActionBarLink("showPreferencesDialog", this::actionShowPreferencesDialog));
    add(new ActionBarLink("showGuidelinesDialog", guidelinesDialog::show));
    add(new ActionBarLink("showExportDialog", exportDialog::show).onConfigure(_this -> {
        AnnotatorState state = AnnotationPage.this.getModelObject();
        _this.setVisible(state.getProject() != null && (isAdmin(state.getProject(), projectService, state.getUser()) || !state.getProject().isDisableExport()));
    }));
    add(new ActionBarLink("showPreviousDocument", t -> actionShowPreviousDocument(t)).add(new InputBehavior(new KeyType[] { KeyType.Shift, KeyType.Page_up }, EventType.click)));
    add(new ActionBarLink("showNextDocument", t -> actionShowNextDocument(t)).add(new InputBehavior(new KeyType[] { KeyType.Shift, KeyType.Page_down }, EventType.click)));
    add(new ActionBarLink("showNext", t -> actionShowNextPage(t)).add(new InputBehavior(new KeyType[] { KeyType.Page_down }, EventType.click)));
    add(new ActionBarLink("showPrevious", t -> actionShowPreviousPage(t)).add(new InputBehavior(new KeyType[] { KeyType.Page_up }, EventType.click)));
    add(new ActionBarLink("showFirst", t -> actionShowFirstPage(t)).add(new InputBehavior(new KeyType[] { KeyType.Home }, EventType.click)));
    add(new ActionBarLink("showLast", t -> actionShowLastPage(t)).add(new InputBehavior(new KeyType[] { KeyType.End }, EventType.click)));
    add(new ActionBarLink("toggleScriptDirection", this::actionToggleScriptDirection));
    add(createOrGetResetDocumentDialog());
    add(createOrGetResetDocumentLink());
    add(finishDocumentDialog = new ConfirmationDialog("finishDocumentDialog", new StringResourceModel("FinishDocumentDialog.title", this, null), new StringResourceModel("FinishDocumentDialog.text", this, null)));
    add(finishDocumentLink = new LambdaAjaxLink("showFinishDocumentDialog", this::actionFinishDocument) {

        private static final long serialVersionUID = 874573384012299998L;

        @Override
        protected void onConfigure() {
            super.onConfigure();
            AnnotatorState state = AnnotationPage.this.getModelObject();
            setEnabled(state.getDocument() != null && !documentService.isAnnotationFinished(state.getDocument(), state.getUser()));
        }
    });
    finishDocumentIcon = new FinishImage("finishImage", getModel());
    finishDocumentIcon.setOutputMarkupId(true);
    finishDocumentLink.add(finishDocumentIcon);
}
Also used : SpringBean(org.apache.wicket.spring.injection.annot.SpringBean) AnnotationEditorBase(de.tudarmstadt.ukp.clarin.webanno.api.annotation.AnnotationEditorBase) LoggerFactory(org.slf4j.LoggerFactory) ConstraintsService(de.tudarmstadt.ukp.clarin.webanno.constraints.ConstraintsService) NoResultException(javax.persistence.NoResultException) AnnotatorStateImpl(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorStateImpl) AnnotationDetailEditorPanel(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.detail.AnnotationDetailEditorPanel) Sentence(de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Sentence) PAGE_PARAM_DOCUMENT_ID(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.PAGE_PARAM_DOCUMENT_ID) OpenDocumentDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.OpenDocumentDialog) UrlFragment(org.wicketstuff.urlfragment.UrlFragment) ActionBarLink(de.tudarmstadt.ukp.clarin.webanno.support.lambda.ActionBarLink) FinishImage(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.component.FinishImage) SessionMetaData(de.tudarmstadt.ukp.clarin.webanno.api.SessionMetaData) PageParameters(org.apache.wicket.request.mapper.parameter.PageParameters) AnnotationEditorExtensionRegistry(de.tudarmstadt.ukp.clarin.webanno.api.annotation.AnnotationEditorExtensionRegistry) Locale(java.util.Locale) GuidelinesDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.GuidelinesDialog) Map(java.util.Map) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) IModel(org.apache.wicket.model.IModel) StringValue(org.apache.wicket.util.string.StringValue) JCas(org.apache.uima.jcas.JCas) NumberTextField(org.apache.wicket.markup.html.form.NumberTextField) DocumentNamePanel(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.component.DocumentNamePanel) SecurityUtil.isAnnotator(de.tudarmstadt.ukp.clarin.webanno.api.SecurityUtil.isAnnotator) WebAnnoConst(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst) ANNOTATION_IN_PROGRESS_TO_ANNOTATION_FINISHED(de.tudarmstadt.ukp.clarin.webanno.model.AnnotationDocumentStateTransition.ANNOTATION_IN_PROGRESS_TO_ANNOTATION_FINISHED) Model(org.apache.wicket.model.Model) UserDao(de.tudarmstadt.ukp.clarin.webanno.security.UserDao) AnnotationDocument(de.tudarmstadt.ukp.clarin.webanno.model.AnnotationDocument) PAGE_PARAM_FOCUS(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.PAGE_PARAM_FOCUS) AttributeModifier(org.apache.wicket.AttributeModifier) IHeaderResponse(org.apache.wicket.markup.head.IHeaderResponse) AnnotationDocumentState(de.tudarmstadt.ukp.clarin.webanno.model.AnnotationDocumentState) IFeedback(org.apache.wicket.feedback.IFeedback) SettingsService(de.tudarmstadt.ukp.clarin.webanno.api.SettingsService) List(java.util.List) AnnotationEditorFactory(de.tudarmstadt.ukp.clarin.webanno.api.annotation.AnnotationEditorFactory) ProjectType(de.tudarmstadt.ukp.clarin.webanno.api.ProjectType) SourceDocument(de.tudarmstadt.ukp.clarin.webanno.model.SourceDocument) ApplicationEventPublisherHolder(de.tudarmstadt.ukp.clarin.webanno.support.spring.ApplicationEventPublisherHolder) KeyType(wicket.contrib.input.events.key.KeyType) AnnotationPreferencesDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.AnnotationPreferencesDialog) Form(org.apache.wicket.markup.html.form.Form) SecurityUtil.isAdmin(de.tudarmstadt.ukp.clarin.webanno.api.SecurityUtil.isAdmin) ExportDocumentDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.ExportDocumentDialog) ProjectService(de.tudarmstadt.ukp.clarin.webanno.api.ProjectService) SourceDocumentState(de.tudarmstadt.ukp.clarin.webanno.model.SourceDocumentState) AnnotatorState(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorState) StringResourceModel(org.apache.wicket.model.StringResourceModel) WebAnnoCasUtil.selectByAddr(de.tudarmstadt.ukp.clarin.webanno.api.annotation.util.WebAnnoCasUtil.selectByAddr) Mode(de.tudarmstadt.ukp.clarin.webanno.model.Mode) ArrayList(java.util.ArrayList) AnnotationSchemaService(de.tudarmstadt.ukp.clarin.webanno.api.AnnotationSchemaService) ConfirmationDialog(de.tudarmstadt.ukp.clarin.webanno.support.dialog.ConfirmationDialog) User(de.tudarmstadt.ukp.clarin.webanno.security.model.User) PAGE_PARAM_PROJECT_ID(de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.PAGE_PARAM_PROJECT_ID) MountPath(org.wicketstuff.annotation.mount.MountPath) Project(de.tudarmstadt.ukp.clarin.webanno.model.Project) IRequestParameters(org.apache.wicket.request.IRequestParameters) DecoratedObject(de.tudarmstadt.ukp.clarin.webanno.support.wicket.DecoratedObject) DocumentService(de.tudarmstadt.ukp.clarin.webanno.api.DocumentService) Logger(org.slf4j.Logger) CssContentHeaderItem(org.apache.wicket.markup.head.CssContentHeaderItem) LambdaAjaxSubmitLink(de.tudarmstadt.ukp.clarin.webanno.support.lambda.LambdaAjaxSubmitLink) IOException(java.io.IOException) OnLoadHeaderItem(org.apache.wicket.markup.head.OnLoadHeaderItem) SidebarPanel(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.sidebar.SidebarPanel) WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer) LambdaAjaxLink(de.tudarmstadt.ukp.clarin.webanno.support.lambda.LambdaAjaxLink) NEW_TO_ANNOTATION_IN_PROGRESS(de.tudarmstadt.ukp.clarin.webanno.model.SourceDocumentStateTransition.NEW_TO_ANNOTATION_IN_PROGRESS) JCasUtil.select(org.apache.uima.fit.util.JCasUtil.select) Session(org.apache.wicket.Session) DocumentOpenedEvent(de.tudarmstadt.ukp.clarin.webanno.api.annotation.event.DocumentOpenedEvent) EventType(wicket.contrib.input.events.EventType) LambdaModel(de.tudarmstadt.ukp.clarin.webanno.support.lambda.LambdaModel) WicketUtil(de.tudarmstadt.ukp.clarin.webanno.support.wicket.WicketUtil) AnnotationEditorRegistry(de.tudarmstadt.ukp.clarin.webanno.api.annotation.AnnotationEditorRegistry) UrlParametersReceivingBehavior(de.tudarmstadt.ukp.clarin.webanno.support.wicketstuff.UrlParametersReceivingBehavior) InputBehavior(wicket.contrib.input.events.InputBehavior) InputBehavior(wicket.contrib.input.events.InputBehavior) AnnotationPreferencesDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.AnnotationPreferencesDialog) Form(org.apache.wicket.markup.html.form.Form) ActionBarLink(de.tudarmstadt.ukp.clarin.webanno.support.lambda.ActionBarLink) AnnotatorStateImpl(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorStateImpl) AnnotatorState(de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorState) LambdaAjaxSubmitLink(de.tudarmstadt.ukp.clarin.webanno.support.lambda.LambdaAjaxSubmitLink) ConfirmationDialog(de.tudarmstadt.ukp.clarin.webanno.support.dialog.ConfirmationDialog) FinishImage(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.component.FinishImage) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) LambdaAjaxLink(de.tudarmstadt.ukp.clarin.webanno.support.lambda.LambdaAjaxLink) ExportDocumentDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.ExportDocumentDialog) GuidelinesDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.GuidelinesDialog) OpenDocumentDialog(de.tudarmstadt.ukp.clarin.webanno.ui.annotation.dialog.OpenDocumentDialog) StringResourceModel(org.apache.wicket.model.StringResourceModel)

Aggregations

AnnotationSchemaService (de.tudarmstadt.ukp.clarin.webanno.api.AnnotationSchemaService)2 ProjectService (de.tudarmstadt.ukp.clarin.webanno.api.ProjectService)2 SettingsService (de.tudarmstadt.ukp.clarin.webanno.api.SettingsService)2 AnnotatorState (de.tudarmstadt.ukp.clarin.webanno.api.annotation.model.AnnotatorState)2 Mode (de.tudarmstadt.ukp.clarin.webanno.model.Mode)2 User (de.tudarmstadt.ukp.clarin.webanno.security.model.User)2 IOException (java.io.IOException)2 List (java.util.List)2 Map (java.util.Map)2 DocumentService (de.tudarmstadt.ukp.clarin.webanno.api.DocumentService)1 ProjectType (de.tudarmstadt.ukp.clarin.webanno.api.ProjectType)1 SecurityUtil.isAdmin (de.tudarmstadt.ukp.clarin.webanno.api.SecurityUtil.isAdmin)1 SecurityUtil.isAnnotator (de.tudarmstadt.ukp.clarin.webanno.api.SecurityUtil.isAnnotator)1 SessionMetaData (de.tudarmstadt.ukp.clarin.webanno.api.SessionMetaData)1 WebAnnoConst (de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst)1 PAGE_PARAM_DOCUMENT_ID (de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.PAGE_PARAM_DOCUMENT_ID)1 PAGE_PARAM_FOCUS (de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.PAGE_PARAM_FOCUS)1 PAGE_PARAM_PROJECT_ID (de.tudarmstadt.ukp.clarin.webanno.api.WebAnnoConst.PAGE_PARAM_PROJECT_ID)1 AnnotationEditorBase (de.tudarmstadt.ukp.clarin.webanno.api.annotation.AnnotationEditorBase)1 AnnotationEditorExtensionRegistry (de.tudarmstadt.ukp.clarin.webanno.api.annotation.AnnotationEditorExtensionRegistry)1