com.evolveum.midpoint.gui.api.component.PendingOperationPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.evolveum.midpoint.gui.api.component.PendingOperationPanel.java

Source

/*
 * Copyright (c) 2010-2018 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.gui.api.component;

import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PendingOperationExecutionStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PendingOperationType;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;

import java.util.List;

/**
 * Created by Viliam Repan (lazyman).
 */
public class PendingOperationPanel extends BasePanel<List<PendingOperationType>> {

    private static final String ID_LABEL = "label";
    private static final String ID_OPERATION = "operation";
    private static final String ID_TEXT = "text";

    public PendingOperationPanel(String id, IModel<List<PendingOperationType>> model) {
        super(id, model);
    }

    @Override
    protected void onInitialize() {
        super.onInitialize();

        initLayout();
    }

    private void initLayout() {
        ListView<PendingOperationType> operation = new ListView<PendingOperationType>(ID_OPERATION, getModel()) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void populateItem(ListItem<PendingOperationType> item) {
                item.setRenderBodyOnly(true);

                WebMarkupContainer label = new WebMarkupContainer(ID_LABEL);
                item.add(label);

                Label text = new Label(ID_TEXT, createLabelText(item.getModel()));
                text.setRenderBodyOnly(true);
                label.add(text);

                label.add(AttributeAppender.append("class", createTextClass(item.getModel())));

                label.add(AttributeModifier.replace("title", createTextTooltipModel(item.getModel())));
                label.add(new InfoTooltipBehavior() {

                    @Override
                    public String getCssClass() {
                        return null;
                    }
                });
            }
        };
        add(operation);
    }

    private IModel<String> createTextClass(IModel<PendingOperationType> model) {
        return new IModel<String>() {

            private static final long serialVersionUID = 1L;

            @Override
            public String getObject() {
                PendingOperationType op = model.getObject();
                OperationResultStatusType rStatus = op.getResultStatus();
                PendingOperationExecutionStatusType eStatus = op.getExecutionStatus();

                if (rStatus != null && (rStatus == OperationResultStatusType.FATAL_ERROR
                        || rStatus == OperationResultStatusType.PARTIAL_ERROR)) {
                    return "label-danger";
                }

                if (rStatus != null && (rStatus == OperationResultStatusType.UNKNOWN
                        || rStatus == OperationResultStatusType.WARNING)) {
                    return "label-warning";
                }

                if ((rStatus != null && rStatus == OperationResultStatusType.SUCCESS)
                        || (eStatus != null && eStatus == PendingOperationExecutionStatusType.COMPLETED)) {
                    return "label-success";
                }

                if ((rStatus != null && (rStatus == OperationResultStatusType.IN_PROGRESS
                        || rStatus == OperationResultStatusType.NOT_APPLICABLE
                        || rStatus == OperationResultStatusType.HANDLED_ERROR))) {
                    return "label-info";
                }

                return "label-default";
            }
        };
    }

    private IModel<String> createTextTooltipModel(IModel<PendingOperationType> model) {
        return new IModel<String>() {

            private static final long serialVersionUID = 1L;

            @Override
            public String getObject() {
                StringBuilder sb = new StringBuilder();

                PendingOperationType op = model.getObject();

                buildStringItem(sb, "PendingOperationPanel.resultStatus", op.getResultStatus());
                buildStringItem(sb, "PendingOperationPanel.executionStatus", op.getExecutionStatus());
                buildStringItem(sb, "PendingOperationPanel.operationReference",
                        op.getAsynchronousOperationReference());
                buildStringItem(sb, "PendingOperationPanel.attempt", op.getAttemptNumber());
                buildStringItem(sb, "PendingOperationPanel.pendingOperationType", op.getType());
                buildStringItem(sb, "PendingOperationPanel.lastAttemptTimestamp",
                        WebComponentUtil.formatDate(op.getLastAttemptTimestamp()));
                buildStringItem(sb, "PendingOperationPanel.completionTimestamp",
                        WebComponentUtil.formatDate(op.getCompletionTimestamp()));

                return sb.toString();
            }
        };
    }

    private void buildStringItem(StringBuilder sb, String key, Object obj) {
        if (obj == null) {
            return;
        }

        sb.append(getString(key)).append(" ");

        String value = obj instanceof Enum ? getString((Enum) obj) : obj.toString();

        sb.append(value);
        sb.append('\n');
    }

    private IModel<String> createLabelText(IModel<PendingOperationType> model) {
        return new IModel<String>() {

            private static final long serialVersionUID = 1L;

            @Override
            public String getObject() {
                PendingOperationType op = model.getObject();
                OperationResultStatusType rStatus = op.getResultStatus();
                PendingOperationExecutionStatusType eStatus = op.getExecutionStatus();

                if (rStatus == null) {
                    return getString(eStatus);
                }

                return getString(rStatus);
            }
        };
    }
}