com.evolveum.midpoint.web.page.admin.server.TaskBasicTabPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.evolveum.midpoint.web.page.admin.server.TaskBasicTabPanel.java

Source

/*
 * Copyright (c) 2010-2016 Evolveum
 *
 * 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 com.evolveum.midpoint.web.page.admin.server;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.column.LinkPanel;
import com.evolveum.midpoint.web.component.form.Form;
import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectTabPanel;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import com.evolveum.midpoint.web.page.admin.server.dto.TaskDto;
import com.evolveum.midpoint.web.page.admin.server.dto.TaskDtoExecutionStatus;
import com.evolveum.midpoint.web.page.admin.server.handlers.HandlerPanelFactory;
import com.evolveum.midpoint.web.page.admin.server.handlers.dto.HandlerDto;
import com.evolveum.midpoint.web.page.admin.users.PageUser;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import java.util.Collection;
import java.util.Collections;
import java.util.Date;

/**
 * @author semancik
 * @author lazyman
 * @author mserbak
 * @author mederly
 */
public class TaskBasicTabPanel extends AbstractObjectTabPanel<TaskType> implements TaskTabPanel {
    private static final long serialVersionUID = 1L;

    private static final String ID_NAME_CONTAINER = "nameContainer";
    private static final String ID_NAME = "name";
    private static final String ID_DESCRIPTION_CONTAINER = "descriptionContainer";
    private static final String ID_DESCRIPTION = "description";
    private static final String ID_OID = "oid";
    private static final String ID_IDENTIFIER_CONTAINER = "identifierContainer";
    private static final String ID_IDENTIFIER = "identifier";
    private static final String ID_CATEGORY_CONTAINER = "categoryContainer";
    private static final String ID_CATEGORY = "category";
    private static final String ID_PARENT_CONTAINER = "parentContainer";
    private static final String ID_PARENT = "parent";
    private static final String ID_OWNER_CONTAINER = "ownerContainer";
    private static final String ID_OWNER = "owner";
    private static final String ID_HANDLER_URI_CONTAINER = "handlerUriContainer";
    private static final String ID_HANDLER_URI = "handlerUri";
    private static final String ID_EXECUTION_CONTAINER = "executionContainer";
    private static final String ID_EXECUTION = "execution";

    private static final String ID_NODE = "node";

    private static final String ID_HANDLER_PANEL = "handlerPanel";

    private static final Trace LOGGER = TraceManager.getTrace(TaskBasicTabPanel.class);

    private IModel<TaskDto> taskDtoModel;
    private PageTaskEdit parentPage;

    public TaskBasicTabPanel(String id, Form mainForm, LoadableModel<ObjectWrapper<TaskType>> taskWrapperModel,
            IModel<TaskDto> taskDtoModel, PageTaskEdit parentPage) {
        super(id, mainForm, taskWrapperModel, parentPage);
        this.taskDtoModel = taskDtoModel;
        this.parentPage = parentPage;
        initLayoutBasic();
        initLayoutHandler();
        setOutputMarkupId(true);
    }

    private void initLayoutBasic() {

        // Name
        WebMarkupContainer nameContainer = new WebMarkupContainer(ID_NAME_CONTAINER);
        RequiredTextField<String> name = new RequiredTextField<>(ID_NAME,
                new PropertyModel<String>(taskDtoModel, TaskDto.F_NAME));
        name.add(parentPage.createEnabledIfEdit(new ItemPath(TaskType.F_NAME)));
        name.add(new AttributeModifier("style", "width: 100%"));
        name.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
        nameContainer.add(name);
        nameContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_NAME)));
        add(nameContainer);

        // Description
        WebMarkupContainer descriptionContainer = new WebMarkupContainer(ID_DESCRIPTION_CONTAINER);
        TextArea<String> description = new TextArea<>(ID_DESCRIPTION,
                new PropertyModel<String>(taskDtoModel, TaskDto.F_DESCRIPTION));
        description.add(parentPage.createEnabledIfEdit(new ItemPath(TaskType.F_DESCRIPTION)));
        //        description.add(new AttributeModifier("style", "width: 100%"));
        //        description.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
        descriptionContainer.add(description);
        descriptionContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_DESCRIPTION)));
        add(descriptionContainer);

        // OID
        Label oid = new Label(ID_OID, new PropertyModel(getObjectWrapperModel(), ID_OID));
        add(oid);

        // Identifier
        WebMarkupContainer identifierContainer = new WebMarkupContainer(ID_IDENTIFIER_CONTAINER);
        identifierContainer.add(new Label(ID_IDENTIFIER, new PropertyModel(taskDtoModel, TaskDto.F_IDENTIFIER)));
        identifierContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_TASK_IDENTIFIER)));
        add(identifierContainer);

        // Category
        WebMarkupContainer categoryContainer = new WebMarkupContainer(ID_CATEGORY_CONTAINER);
        categoryContainer.add(new Label(ID_CATEGORY, WebComponentUtil.createCategoryNameModel(this,
                new PropertyModel(taskDtoModel, TaskDto.F_CATEGORY))));
        categoryContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_CATEGORY)));
        add(categoryContainer);

        // Parent
        WebMarkupContainer parentContainer = new WebMarkupContainer(ID_PARENT_CONTAINER);
        final LinkPanel parent = new LinkPanel(ID_PARENT,
                new PropertyModel<String>(taskDtoModel, TaskDto.F_PARENT_TASK_NAME)) {
            @Override
            public void onClick(AjaxRequestTarget target) {
                String oid = taskDtoModel.getObject().getParentTaskOid();
                if (oid != null) {
                    PageParameters parameters = new PageParameters();
                    parameters.add(OnePageParameterEncoder.PARAMETER, oid);
                    setResponsePage(PageTaskEdit.class, parameters);
                }
            }
        };
        parentContainer.add(parent);
        parentContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_PARENT)));
        add(parentContainer);

        // Owner
        WebMarkupContainer ownerContainer = new WebMarkupContainer(ID_OWNER_CONTAINER);
        final LinkPanel owner = new LinkPanel(ID_OWNER,
                new PropertyModel<String>(taskDtoModel, TaskDto.F_OWNER_NAME)) {
            @Override
            public void onClick(AjaxRequestTarget target) {
                String oid = taskDtoModel.getObject().getOwnerOid();
                if (oid != null) {
                    PageParameters parameters = new PageParameters();
                    parameters.add(OnePageParameterEncoder.PARAMETER, oid);
                    setResponsePage(PageUser.class, parameters);
                }
            }
        };
        ownerContainer.add(owner);
        ownerContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_OWNER_REF)));
        add(ownerContainer);

        // Handler URI
        ListView<String> handlerUriContainer = new ListView<String>(ID_HANDLER_URI_CONTAINER,
                new PropertyModel(taskDtoModel, TaskDto.F_HANDLER_URI_LIST)) {
            @Override
            protected void populateItem(ListItem<String> item) {
                item.add(new Label(ID_HANDLER_URI, item.getModelObject()));
            }
        };
        handlerUriContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_HANDLER_URI),
                new ItemPath(TaskType.F_OTHER_HANDLERS_URI_STACK)));
        add(handlerUriContainer);

        // Execution
        WebMarkupContainer executionContainer = new WebMarkupContainer(ID_EXECUTION_CONTAINER);
        Label execution = new Label(ID_EXECUTION, new AbstractReadOnlyModel<String>() {

            @Override
            public String getObject() {
                TaskDtoExecutionStatus executionStatus = taskDtoModel.getObject().getExecution();
                if (executionStatus != TaskDtoExecutionStatus.CLOSED) {
                    return getString(TaskDtoExecutionStatus.class.getSimpleName() + "." + executionStatus.name());
                } else {
                    return getString(TaskDtoExecutionStatus.class.getSimpleName() + "." + executionStatus.name()
                            + ".withTimestamp", new AbstractReadOnlyModel<String>() {
                                @Override
                                public String getObject() {
                                    if (taskDtoModel.getObject().getCompletionTimestamp() != null) {
                                        return new Date(taskDtoModel.getObject().getCompletionTimestamp())
                                                .toLocaleString(); // todo correct formatting
                                    } else {
                                        return "?";
                                    }
                                }
                            });
                }
            }
        });
        executionContainer.add(execution);
        Label node = new Label(ID_NODE, new AbstractReadOnlyModel<String>() {
            @Override
            public String getObject() {
                TaskDto dto = taskDtoModel.getObject();
                if (!TaskDtoExecutionStatus.RUNNING.equals(dto.getExecution())) {
                    return null;
                }
                return parentPage.getString("pageTaskEdit.message.node", dto.getExecutingAt());
            }
        });
        executionContainer.add(node);
        executionContainer.add(parentPage.createVisibleIfAccessible(new ItemPath(TaskType.F_EXECUTION_STATUS),
                new ItemPath(TaskType.F_NODE_AS_OBSERVED)));
        add(executionContainer);

    }

    private void initLayoutHandler() {
        Panel handlerPanel = HandlerPanelFactory.instance().createPanelForTask(ID_HANDLER_PANEL,
                new PropertyModel<HandlerDto>(taskDtoModel, TaskDto.F_HANDLER_DTO), parentPage);
        add(handlerPanel);
    }

    @Override
    public Collection<Component> getComponentsToUpdate() {
        return Collections.<Component>singleton(this);
    }

}