/* * 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.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) { navigateToNext(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()); navigateToNext(PageCertDefinition.class, parameters); } private void showCampaignsPerformed(AjaxRequestTarget target, AccessCertificationDefinitionType definition) { PageParameters parameters = new PageParameters(); parameters.add(OnePageParameterEncoder.PARAMETER, definition.getOid()); navigateToNext(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); } } }; } }