com.evolveum.midpoint.web.page.admin.certification.PageCertDefinitions.java Source code

Java tutorial

Introduction

Here is the source code for com.evolveum.midpoint.web.page.admin.certification.PageCertDefinitions.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.certification;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.data.column.*;
import com.evolveum.midpoint.web.component.dialog.ConfirmationPanel;
import com.evolveum.midpoint.web.component.dialog.Popupable;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.workflow.PageAdminWorkItems;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationDefinitionType;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import java.util.ArrayList;
import java.util.List;

/**
 * @author katkav
 * @author lazyman
 */
@PageDescriptor(url = "/admin/certification/definitions", action = {
        @AuthorizationAction(actionUri = PageAdminCertification.AUTH_CERTIFICATION_ALL, label = PageAdminCertification.AUTH_CERTIFICATION_ALL_LABEL, description = PageAdminCertification.AUTH_CERTIFICATION_ALL_DESCRIPTION),
        @AuthorizationAction(actionUri = PageAdminCertification.AUTH_CERTIFICATION_DEFINITIONS, label = PageAdminCertification.AUTH_CERTIFICATION_DEFINITIONS_LABEL, description = PageAdminCertification.AUTH_CERTIFICATION_DEFINITIONS_DESCRIPTION) })
public class PageCertDefinitions extends PageAdminWorkItems {

    private static final long serialVersionUID = 1L;

    private static final String ID_MAIN_FORM = "mainForm";
    private static final String ID_TABLE = "table";

    private static final String DOT_CLASS = PageCertDefinitions.class.getName() + ".";
    private static final String OPERATION_CREATE_CAMPAIGN = DOT_CLASS + "createCampaign";
    private static final String OPERATION_DELETE_DEFINITION = DOT_CLASS + "deleteDefinition";

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

    private AccessCertificationDefinitionType singleDelete;

    public PageCertDefinitions() {
        initLayout();
    }

    private void initLayout() {
        Form mainForm = new Form(ID_MAIN_FORM);
        add(mainForm);

        MainObjectListPanel<AccessCertificationDefinitionType> mainPanel = new MainObjectListPanel<AccessCertificationDefinitionType>(
                ID_TABLE, AccessCertificationDefinitionType.class, TableId.PAGE_CERT_DEFINITIONS_PANEL, null,
                this) {
            private static final long serialVersionUID = 1L;

            @Override
            protected IColumn<SelectableBean<AccessCertificationDefinitionType>, String> createCheckboxColumn() {
                return null;
            }

            @Override
            public void objectDetailsPerformed(AjaxRequestTarget target,
                    AccessCertificationDefinitionType service) {
                PageCertDefinitions.this.detailsPerformed(target, service);
            }

            @Override
            protected List<IColumn<SelectableBean<AccessCertificationDefinitionType>, String>> createColumns() {
                return PageCertDefinitions.this.initColumns();
            }

            @Override
            protected List<InlineMenuItem> createInlineMenu() {
                return null;
            }

            @Override
            protected void newObjectPerformed(AjaxRequestTarget target) {
                setResponsePage(PageCertDefinition.class);
            }
        };
        mainPanel.setAdditionalBoxCssClasses(GuiStyleConstants.CLASS_OBJECT_CERT_DEF_BOX_CSS_CLASSES);
        mainForm.add(mainPanel);
    }

    private MainObjectListPanel<AccessCertificationDefinitionType> getDefinitionsTable() {
        return (MainObjectListPanel<AccessCertificationDefinitionType>) get(
                createComponentPath(ID_MAIN_FORM, ID_TABLE));
    }

    private IModel<String> createDeleteConfirmString() {
        return new AbstractReadOnlyModel<String>() {
            @Override
            public String getObject() {
                if (singleDelete == null) {
                    return "";
                } else {
                    return createStringResource("PageCertDefinitions.deleteDefinitionConfirmSingle",
                            singleDelete.getName()).getString();
                }
            }
        };
    }

    private List<IColumn<SelectableBean<AccessCertificationDefinitionType>, String>> initColumns() {
        List<IColumn<SelectableBean<AccessCertificationDefinitionType>, String>> columns = new ArrayList<>();

        IColumn column;

        column = new PropertyColumn(createStringResource("PageCertDefinitions.table.description"),
                "value.description");
        columns.add(column);

        column = new MultiButtonColumn<SelectableBean<AccessCertificationDefinitionType>>(new Model(), 3) {

            private final String[] captionKeys = { "PageCertDefinitions.button.createCampaign",
                    "PageCertDefinitions.button.showCampaigns", "PageCertDefinitions.button.deleteDefinition" };

            private final DoubleButtonColumn.BUTTON_COLOR_CLASS[] colors = {
                    DoubleButtonColumn.BUTTON_COLOR_CLASS.PRIMARY, DoubleButtonColumn.BUTTON_COLOR_CLASS.DEFAULT,
                    DoubleButtonColumn.BUTTON_COLOR_CLASS.DANGER };

            @Override
            public String getCaption(int id) {
                return PageCertDefinitions.this.createStringResource(captionKeys[id]).getString();
            }

            @Override
            public String getButtonColorCssClass(int id) {
                return colors[id].toString();
            }

            @Override
            public void clickPerformed(int id, AjaxRequestTarget target,
                    IModel<SelectableBean<AccessCertificationDefinitionType>> model) {
                switch (id) {
                case 0:
                    createCampaignPerformed(target, model.getObject().getValue());
                    break;
                case 1:
                    showCampaignsPerformed(target, model.getObject().getValue());
                    break;
                case 2:
                    deleteConfirmation(target, model.getObject().getValue());
                    break;
                }
            }

        };
        columns.add(column);

        return columns;
    }

    protected void detailsPerformed(AjaxRequestTarget target, AccessCertificationDefinitionType service) {
        PageParameters parameters = new PageParameters();
        parameters.add(OnePageParameterEncoder.PARAMETER, service.getOid());
        setResponsePage(PageCertDefinition.class, parameters);
    }

    private void showCampaignsPerformed(AjaxRequestTarget target, AccessCertificationDefinitionType definition) {
        PageParameters parameters = new PageParameters();
        parameters.add(OnePageParameterEncoder.PARAMETER, definition.getOid());
        setResponsePage(PageCertCampaigns.class, parameters);
    }

    private void createCampaignPerformed(AjaxRequestTarget target, AccessCertificationDefinitionType definition) {
        LOGGER.debug("Create certification campaign performed for {}", definition.asPrismObject());

        OperationResult result = new OperationResult(OPERATION_CREATE_CAMPAIGN);
        try {
            Task task = createSimpleTask(OPERATION_CREATE_CAMPAIGN);
            getCertificationService().createCampaign(definition.getOid(), task, result);
        } catch (Exception ex) {
            result.recordFatalError(ex);
        } finally {
            result.computeStatusIfUnknown();
        }

        showResult(result);
        target.add(getFeedbackPanel());
    }

    private void deleteConfirmation(AjaxRequestTarget target, AccessCertificationDefinitionType definition) {

        this.singleDelete = definition;
        showMainPopup(getDeleteDefinitionConfirmationPanel(), target);
    }

    private void deleteDefinitionPerformed(AjaxRequestTarget target, AccessCertificationDefinitionType definition) {
        OperationResult result = new OperationResult(OPERATION_DELETE_DEFINITION);
        try {
            Task task = createSimpleTask(OPERATION_DELETE_DEFINITION);
            ObjectDelta<AccessCertificationDefinitionType> delta = ObjectDelta.createDeleteDelta(
                    AccessCertificationDefinitionType.class, definition.getOid(), getPrismContext());
            getModelService().executeChanges(WebComponentUtil.createDeltaCollection(delta), null, task, result);
        } catch (Exception ex) {
            result.recordPartialError("Couldn't delete campaign definition.", ex);
            LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete campaign definition", ex);
        }

        result.computeStatusIfUnknown();
        if (result.isSuccess()) {
            result.recordStatus(OperationResultStatus.SUCCESS, "The definition has been successfully deleted.");
        }

        getDefinitionsTable().clearCache();

        showResult(result);
        target.add(getFeedbackPanel(), getDefinitionsTable());
    }

    private Popupable getDeleteDefinitionConfirmationPanel() {
        return new ConfirmationPanel(getMainPopupBodyId(), createDeleteConfirmString()) {
            @Override
            public void yesPerformed(AjaxRequestTarget target) {
                ModalWindow modalWindow = findParent(ModalWindow.class);
                if (modalWindow != null) {
                    modalWindow.close(target);
                    deleteDefinitionPerformed(target, singleDelete);
                }
            }
        };
    }

}