com.evolveum.midpoint.web.component.prism.CheckTableHeader.java Source code

Java tutorial

Introduction

Here is the source code for com.evolveum.midpoint.web.component.prism.CheckTableHeader.java

Source

/*
 * Copyright (c) 2010-2013 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.component.prism;

import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.web.component.BootstrapLabel;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenu;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.util.TooltipBehavior;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.*;

import javax.xml.datatype.XMLGregorianCalendar;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * @author lazyman
 */
public class CheckTableHeader extends SimplePanel<ObjectWrapper> {

    private static final String ID_CHECK = "check";
    private static final String ID_ICON = "icon";
    private static final String ID_NAME = "name";
    private static final String ID_DESCRIPTION = "description";
    private static final String ID_MENU = "menu";
    private static final String ID_LINK = "link";
    private static final String ID_STATUS = "status";
    private static final String ID_SHOW_MORE = "showMore";
    private static final String ID_TRIGGER = "trigger";
    private static final String ID_PROTECTED = "protected";

    public CheckTableHeader(String id, IModel<ObjectWrapper> model) {
        super(id, model);

        add(AttributeModifier.append("class", "check-table-header"));
    }

    @Override
    protected void initLayout() {
        AjaxCheckBox check = new AjaxCheckBox(ID_CHECK,
                new PropertyModel<Boolean>(getModel(), ObjectWrapper.F_SELECTED)) {

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
            }
        };
        add(check);

        Label icon = new Label(ID_ICON);
        icon.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {

            @Override
            public String getObject() {
                return createAccountIcon();
            }
        }));
        add(icon);

        Label trigger = new Label(ID_TRIGGER);
        trigger.add(AttributeModifier.replace("title", new AbstractReadOnlyModel<String>() {

            @Override
            public String getObject() {
                return createTriggerTooltip();
            }
        }));
        trigger.add(new TooltipBehavior());
        trigger.add(new VisibleEnableBehaviour() {

            @Override
            public boolean isVisible() {
                return hasTriggers();
            }
        });
        add(trigger);

        Label protectedIcon = new Label(ID_PROTECTED);
        protectedIcon.add(new VisibleEnableBehaviour() {

            @Override
            public boolean isVisible() {
                ObjectWrapper wrapper = getModelObject();
                return wrapper.isProtectedAccount();
            }
        });
        add(protectedIcon);

        BootstrapLabel status = new BootstrapLabel(ID_STATUS, createStringResource("CheckTableHeader.label.error"),
                new Model(BootstrapLabel.State.DANGER));
        status.add(createFetchErrorVisibleBehaviour());
        add(status);
        AjaxLink showMore = new AjaxLink(ID_SHOW_MORE) {

            @Override
            public void onClick(AjaxRequestTarget target) {
                onShowMorePerformed(target);
            }
        };
        showMore.add(createFetchErrorVisibleBehaviour());
        add(showMore);

        AjaxLink link = new AjaxLink(ID_LINK) {

            @Override
            public void onClick(AjaxRequestTarget target) {
                onClickPerformed(target);
            }
        };
        add(link);

        Label name = new Label(ID_NAME, new AbstractReadOnlyModel<String>() {

            @Override
            public String getObject() {
                return getDisplayName();
            }
        });
        link.add(name);

        Label description = new Label(ID_DESCRIPTION, new AbstractReadOnlyModel<String>() {

            @Override
            public String getObject() {
                return getDescription();
            }
        });
        add(description);

        final IModel<List<InlineMenuItem>> items = new Model((Serializable) createMenuItems());
        InlineMenu menu = new InlineMenu(ID_MENU, items, true);
        menu.add(new VisibleEnableBehaviour() {

            @Override
            public boolean isVisible() {
                List<InlineMenuItem> list = items.getObject();
                return list != null && !list.isEmpty();
            }
        });
        add(menu);
    }

    private String createAccountIcon() {
        ObjectWrapper wrapper = getModelObject();
        PrismObject object = wrapper.getObject();
        PrismProperty status = object
                .findProperty(new ItemPath(ShadowType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS));
        if (status != null && status.getRealValue() != null) {
            ActivationStatusType value = (ActivationStatusType) status.getRealValue();
            if (ActivationStatusType.DISABLED.equals(value)) {
                return "fa fa-male text-muted";
            }
        }

        return "fa fa-male";
    }

    private String createTriggerTooltip() {
        ObjectWrapper wrapper = getModelObject();
        PrismObject obj = wrapper.getObject();
        PrismContainer container = obj.findContainer(ObjectType.F_TRIGGER);
        if (container == null || container.isEmpty()) {
            return null;
        }

        List<String> triggers = new ArrayList<>();
        for (PrismContainerValue val : (List<PrismContainerValue>) container.getValues()) {
            XMLGregorianCalendar time = (XMLGregorianCalendar) val.getPropertyRealValue(TriggerType.F_TIMESTAMP,
                    XMLGregorianCalendar.class);

            if (time == null) {
                triggers.add(getString("CheckTableHeader.triggerUnknownTime"));
            } else {
                triggers.add(getString("CheckTableHeader.triggerPlanned", WebMiscUtil.formatDate(time)));
            }
        }

        return StringUtils.join(triggers, '\n');
    }

    private boolean hasTriggers() {
        ObjectWrapper wrapper = getModelObject();
        PrismObject obj = wrapper.getObject();
        PrismContainer container = obj.findContainer(ObjectType.F_TRIGGER);
        return container != null && !container.isEmpty();
    }

    private VisibleEnableBehaviour createFetchErrorVisibleBehaviour() {
        return new VisibleEnableBehaviour() {

            @Override
            public boolean isVisible() {
                OperationResult fetchResult = getModelObject().getFetchResult();
                if (fetchResult != null && !WebMiscUtil.isSuccessOrHandledError(fetchResult)) {
                    return true;
                }

                OperationResult result = getModelObject().getResult();
                if (result != null && !WebMiscUtil.isSuccessOrHandledError(result)) {
                    return true;
                }

                return false;
            }
        };
    }

    private String getDisplayName() {
        ObjectWrapper wrapper = getModel().getObject();
        String key = wrapper.getDisplayName();
        return translate(key);
    }

    private String getDescription() {
        ObjectWrapper wrapper = getModel().getObject();
        String key = wrapper.getDescription();
        return translate(key);
    }

    private String translate(String key) {
        if (key == null) {
            key = "";
        }

        return new StringResourceModel(key, getPage(), null, key).getString();
    }

    protected List<InlineMenuItem> createMenuItems() {
        return new ArrayList<>();
    }

    protected void onClickPerformed(AjaxRequestTarget target) {
        ObjectWrapper wrapper = getModelObject();
        wrapper.setMinimalized(!wrapper.isMinimalized());

        target.add(findParent(PrismObjectPanel.class));
    }

    protected void onShowMorePerformed(AjaxRequestTarget target) {
        showResult(getModelObject().getFetchResult());
        showResult(getModelObject().getResult());

        target.add(getPageBase().getFeedbackPanel());
    }

    private void showResult(OperationResult result) {
        PageBase page = getPageBase();
        if (!WebMiscUtil.isSuccessOrHandledError(result)) {
            page.showResult(result);
        }
    }
}