Skip to content

Commit

Permalink
MID-9514: adding button for creating of new task on unrecognized reso…
Browse files Browse the repository at this point in the history
…urce objects
  • Loading branch information
skublik committed Mar 22, 2024
1 parent d3e6a43 commit b3c6059
Show file tree
Hide file tree
Showing 14 changed files with 716 additions and 486 deletions.
5 changes: 5 additions & 0 deletions gui/admin-gui/src/frontend/scss/_tiles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
@include selectable-tile();
}

&.disabled {
pointer-events: none !important;
opacity: .65;
}

&.simple-tile > i {
font-size: 2.625rem;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.task.TaskTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.AjaxIconButton;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ public WizardChoicePanel(String id, AHD resourceModel) {
super(id, resourceModel);
}

public WizardChoicePanel(String id) {
this(id, null);
}

@Override
protected void onInitialize() {
super.onInitialize();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/*
* Copyright (C) 2010-2024 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.impl.page.admin;

import com.evolveum.midpoint.gui.api.util.LocalizationUtil;
import com.evolveum.midpoint.gui.impl.component.tile.Tile;
import com.evolveum.midpoint.gui.impl.component.tile.TilePanel;
import com.evolveum.midpoint.gui.impl.component.wizard.WizardChoicePanel;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.io.Serializable;

/**
* Abstract class for panels with tiles for choice of object template.
*/
public abstract class AbstractTemplateChoicePanel<T extends Serializable> extends WizardChoicePanel<T, AssignmentHolderDetailsModel<AssignmentHolderType>> {

public AbstractTemplateChoicePanel(String id) {
super(id);
}

@Override
protected void onInitialize() {
super.onInitialize();
if (isSelectable()) {
setOutputMarkupId(true);
}
}

@Override
protected Component createTilePanel(String id, IModel<Tile<T>> tileModel) {
return new TilePanel<>(id, tileModel) {

@Override
protected WebMarkupContainer createIconPanel(String idIcon) {
return AbstractTemplateChoicePanel.this.createIconPanel(tileModel, idIcon);
}

protected VisibleEnableBehaviour getDescriptionBehaviour() {
return new VisibleBehaviour(() -> StringUtils.isNotEmpty(tileModel.getObject().getDescription()));
}

@Override
protected void onClick(AjaxRequestTarget target) {
Tile<T> selectedTile = tileModel.getObject();
if (isSelectable()) {
getTilesModel().getObject().forEach(tile -> tile.setSelected(false));
selectedTile.setSelected(true);
target.add(AbstractTemplateChoicePanel.this);
}
onTemplateChosePerformed(selectedTile.getValue(), target);
}
};
}

protected abstract WebMarkupContainer createIconPanel(IModel<Tile<T>> tileModel, String idIcon);

protected boolean isSelectable() {
return false;
}

protected abstract void onTemplateChosePerformed(T view, AjaxRequestTarget target);

@Override
protected @NotNull IModel<String> getBreadcrumbLabel() {
return () -> "";
}

@Override
protected boolean isExitButtonVisible() {
return false;
}

@Override
protected IModel<String> getTextModel() {
return createStringResource(
"TemplateChoicePanel.text",
LocalizationUtil.translateMessage(
ObjectTypeUtil.createTypeDisplayInformation(getType(), false)));
}

protected abstract QName getType();

@Override
protected IModel<String> getSubTextModel() {
return createStringResource(
"TemplateChoicePanel.subText",
LocalizationUtil.translateMessage(
ObjectTypeUtil.createTypeDisplayInformation(getType(), false)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,50 +6,30 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin;

import com.evolveum.midpoint.gui.impl.component.wizard.WizardChoicePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.LocalizationUtil;
import com.evolveum.midpoint.gui.impl.component.data.column.CompositedIconPanel;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIcon;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle;
import com.evolveum.midpoint.gui.impl.component.tile.Tile;
import com.evolveum.midpoint.gui.impl.component.tile.TilePanel;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;

import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;

import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public abstract class TemplateChoicePanel extends WizardChoicePanel<CompiledObjectCollectionView, AssignmentHolderDetailsModel> {
public abstract class TemplateChoicePanel extends AbstractTemplateChoicePanel<CompiledObjectCollectionView> {

public TemplateChoicePanel(String id) {
super(id, null);
}

@Override
protected void onInitialize() {
super.onInitialize();
if (isSelectable()) {
setOutputMarkupId(true);
}
super(id);
}

protected abstract Collection<CompiledObjectCollectionView> findAllApplicableArchetypeViews();
Expand All @@ -64,9 +44,9 @@ protected List<Tile<CompiledObjectCollectionView>> load() {
Collection<CompiledObjectCollectionView> compiledObjectCollectionViews = findAllApplicableArchetypeViews();

compiledObjectCollectionViews.forEach(collection -> {
Tile tile = new Tile(
Tile<CompiledObjectCollectionView> tile = new Tile<>(
null,
WebComponentUtil.getTranslatedPolyString(
LocalizationUtil.translatePolyString(
GuiDisplayTypeUtil.getLabel(collection.getDisplay())));
tile.setDescription(GuiDisplayTypeUtil.getHelp(collection.getDisplay()));
tile.setValue(collection);
Expand All @@ -78,37 +58,12 @@ protected List<Tile<CompiledObjectCollectionView>> load() {
}

@Override
protected Component createTilePanel(String id, IModel<Tile<CompiledObjectCollectionView>> tileModel) {
return new TilePanel(id, tileModel) {

@Override
protected WebMarkupContainer createIconPanel(String idIcon) {
IModel<CompositedIcon> iconModel = () -> {
CompiledObjectCollectionView view = tileModel.getObject().getValue();
return createCompositedIcon(view);
};
return new CompositedIconPanel(idIcon, iconModel);
}

protected VisibleEnableBehaviour getDescriptionBehaviour() {
return new VisibleBehaviour(() -> StringUtils.isNotEmpty(tileModel.getObject().getDescription()));
}

@Override
protected void onClick(AjaxRequestTarget target) {
Tile<CompiledObjectCollectionView> selectedTile = tileModel.getObject();
if (isSelectable()) {
getTilesModel().getObject().forEach(tile -> tile.setSelected(false));
selectedTile.setSelected(true);
target.add(TemplateChoicePanel.this);
}
onTemplateChosePerformed(selectedTile.getValue(), target);
}
protected WebMarkupContainer createIconPanel(IModel<Tile<CompiledObjectCollectionView>> tileModel, String idIcon) {
IModel<CompositedIcon> iconModel = () -> {
CompiledObjectCollectionView view = tileModel.getObject().getValue();
return createCompositedIcon(view);
};
}

protected boolean isSelectable() {
return false;
return new CompositedIconPanel(idIcon, iconModel);
}

private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collectionView) {
Expand All @@ -120,39 +75,4 @@ private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collect

return builder.build();
}

protected abstract void onTemplateChosePerformed(CompiledObjectCollectionView view, AjaxRequestTarget target);

@Override
protected @NotNull IModel<String> getBreadcrumbLabel() {
return () -> "";
}

@Override
protected boolean isExitButtonVisible() {
return false;
}

@Override
protected boolean isSubmitButtonVisible() {
return false;
}

@Override
protected IModel<String> getTextModel() {
return createStringResource(
"TemplateChoicePanel.text",
WebComponentUtil.translateMessage(
ObjectTypeUtil.createTypeDisplayInformation(getType(), false)));
}

protected abstract QName getType();

@Override
protected IModel<String> getSubTextModel() {
return createStringResource(
"TemplateChoicePanel.subText",
WebComponentUtil.translateMessage(
ObjectTypeUtil.createTypeDisplayInformation(getType(), false)));
}
}

0 comments on commit b3c6059

Please sign in to comment.