Skip to content

Commit

Permalink
MID-4229 multi button columns and panels mess rewrite, refactor in pr…
Browse files Browse the repository at this point in the history
…ogress
  • Loading branch information
1azyman committed Jun 20, 2018
1 parent ef8705f commit 41d2be4
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 60 deletions.
Expand Up @@ -19,16 +19,21 @@
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.parser.XmlTag;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;

/**
* @author Viliam Repan (lazyman)
*/
public abstract class AjaxIconButton extends AjaxLink<String> {

private static final long serialVersionUID = 1L;

private IModel<String> title;

private boolean showTitleAsLabel;
Expand All @@ -37,6 +42,16 @@ public AjaxIconButton(String id, IModel<String> icon, IModel<String> title) {
super(id, icon);

this.title = title;

add(AttributeAppender.append("class", new AbstractReadOnlyModel<String>() {

private static final long serialVersionUID = 1L;

@Override
public String getObject() {
return !AjaxIconButton.this.isEnabled() ? "disabled" : "";
}
}));
}

@Override
Expand Down
@@ -0,0 +1,30 @@
/*
* 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.web.component.data;

import org.apache.wicket.ajax.AjaxRequestTarget;

import java.io.Serializable;

/**
* Created by Viliam Repan (lazyman).
*/
@FunctionalInterface
public interface AjaxEventProcessor extends Serializable {

void onEventPerformed(AjaxRequestTarget target);
}
Expand Up @@ -18,7 +18,8 @@

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.web.component.AjaxIconButton;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;

Expand All @@ -27,6 +28,8 @@
*/
public class MultiButtonPanel2<T> extends BasePanel<T> {

private static final long serialVersionUID = 1L;

private static final String ID_BUTTONS = "buttons";

private int numberOfButtons;
Expand Down Expand Up @@ -63,4 +66,24 @@ private void initLayout() {
protected AjaxIconButton createButton(int index, String componentId, IModel<T> model) {
return null;
}

protected AjaxIconButton buildDefaultButton(String componentId, IModel<String> icon, IModel<String> title,
IModel<String> cssClass, final AjaxEventProcessor onClickProcessor) {
AjaxIconButton btn = new AjaxIconButton(componentId, icon, title) {

@Override
public void onClick(AjaxRequestTarget target) {
if (onClickProcessor != null) {
onClickProcessor.onEventPerformed(target);
}
}
};

btn.showTitleAsLabel(true);
if (cssClass != null) {
btn.add(AttributeAppender.append("class", cssClass));
}

return btn;
}
}
Expand Up @@ -107,34 +107,24 @@ protected AjaxIconButton createButton(int index, String componentId, IModel<Audi
AjaxIconButton btn = null;
switch (index) {
case 0:
btn = new AjaxIconButton(componentId, new Model<>("fa fa-circle-o"),
page.createStringResource("ObjectHistoryTabPanel.viewHistoricalObjectDataTitle")) {

@Override
public void onClick(AjaxRequestTarget target) {
currentStateButtonClicked(target, focusWrapperModel.getObject().getOid(),
model.getObject().getEventIdentifier(),
WebComponentUtil.getLocalizedDate(model.getObject().getTimestamp(), DateLabelComponent.SHORT_NOTIME_STYLE),
page.getCompileTimeClass());
}
};
btn.showTitleAsLabel(true)
.add(AttributeAppender.append("class", "btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.INFO));
btn = buildDefaultButton(componentId, new Model<>("fa fa-circle-o"),
createStringResource("ObjectHistoryTabPanel.viewHistoricalObjectDataTitle"),
new Model<>("btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.INFO),
target ->
currentStateButtonClicked(target, focusWrapperModel.getObject().getOid(),
model.getObject().getEventIdentifier(),
WebComponentUtil.getLocalizedDate(model.getObject().getTimestamp(), DateLabelComponent.SHORT_NOTIME_STYLE),
page.getCompileTimeClass()));
break;
case 1:
btn = new AjaxIconButton(componentId, new Model<>(GuiStyleConstants.CLASS_FILE_TEXT),
page.createStringResource("ObjectHistoryTabPanel.viewHistoricalObjectXmlTitle")) {

@Override
public void onClick(AjaxRequestTarget target) {
viewObjectXmlButtonClicked(focusWrapperModel.getObject().getOid(),
model.getObject().getEventIdentifier(),
page.getCompileTimeClass(),
WebComponentUtil.getLocalizedDate(model.getObject().getTimestamp(), DateLabelComponent.SHORT_NOTIME_STYLE));
}
};
btn.showTitleAsLabel(true)
.add(AttributeAppender.append("class", "btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.SUCCESS));
btn = buildDefaultButton(componentId, new Model<>(GuiStyleConstants.CLASS_FILE_TEXT),
createStringResource("ObjectHistoryTabPanel.viewHistoricalObjectXmlTitle"),
new Model<>("btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.SUCCESS),
target ->
viewObjectXmlButtonClicked(focusWrapperModel.getObject().getOid(),
model.getObject().getEventIdentifier(),
page.getCompileTimeClass(),
WebComponentUtil.getLocalizedDate(model.getObject().getTimestamp(), DateLabelComponent.SHORT_NOTIME_STYLE)));
break;
}

Expand Down
Expand Up @@ -29,20 +29,26 @@
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.AjaxIconButton;
import com.evolveum.midpoint.web.component.data.MultiButtonPanel2;
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.EnableBehaviour;
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.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
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.markup.repeater.Item;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
Expand Down Expand Up @@ -150,42 +156,43 @@ private List<IColumn<SelectableBean<AccessCertificationDefinitionType>, String>>
column = new PropertyColumn(createStringResource("PageCertDefinitions.table.description"), "value.description");
columns.add(column);

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

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 getButtonTitle(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;
}
}
private static final long serialVersionUID = 1L;

@Override
public boolean isButtonEnabled(int id, IModel<SelectableBean<AccessCertificationDefinitionType>> model) {
return id != 0 || !Boolean.TRUE.equals(model.getObject().getValue().isAdHoc());
public void populateItem(Item<ICellPopulator<SelectableBean<AccessCertificationDefinitionType>>> cellItem, String componentId,
IModel<SelectableBean<AccessCertificationDefinitionType>> rowModel) {

cellItem.add(new MultiButtonPanel2<SelectableBean<AccessCertificationDefinitionType>>(componentId, rowModel, 3) {

private static final long serialVersionUID = 1L;

@Override
protected AjaxIconButton createButton(int index, String componentId, IModel<SelectableBean<AccessCertificationDefinitionType>> model) {
AjaxIconButton btn = null;
switch (index) {
case 0:
btn = buildDefaultButton(componentId, null, createStringResource("PageCertDefinitions.button.createCampaign"),
new Model<>("btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.PRIMARY),
target -> createCampaignPerformed(target, model.getObject().getValue()));
btn.add(new EnableBehaviour(() -> !Boolean.TRUE.equals(model.getObject().getValue().isAdHoc())));
break;
case 1:
btn = buildDefaultButton(componentId, null, createStringResource("PageCertDefinitions.button.showCampaigns"),
new Model<>("btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.DEFAULT),
target -> showCampaignsPerformed(target, model.getObject().getValue()));
break;
case 2:
btn = buildDefaultButton(componentId, null, createStringResource("PageCertDefinitions.button.deleteDefinition"),
new Model<>("btn btn-sm " + DoubleButtonColumn.BUTTON_COLOR_CLASS.DANGER),
target -> deleteConfirmation(target, model.getObject().getValue()));
break;
}

return btn;
}
});
}
};
columns.add(column);
Expand Down
Expand Up @@ -66,6 +66,9 @@
import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
import org.apache.wicket.core.request.mapper.MountedMapper;
import org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream;
import org.apache.wicket.core.util.objects.checker.IObjectChecker;
import org.apache.wicket.core.util.objects.checker.ObjectSerializationChecker;
import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
import org.apache.wicket.core.util.resource.locator.caching.CachingResourceStreamLocator;
import org.apache.wicket.markup.head.PriorityFirstComparator;
Expand All @@ -77,6 +80,7 @@
import org.apache.wicket.request.resource.PackageResourceReference;
import org.apache.wicket.request.resource.SharedResourceReference;
import org.apache.wicket.resource.loader.IStringResourceLoader;
import org.apache.wicket.serialize.java.JavaSerializer;
import org.apache.wicket.settings.ApplicationSettings;
import org.apache.wicket.settings.ResourceSettings;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
Expand Down

0 comments on commit 41d2be4

Please sign in to comment.