-
Notifications
You must be signed in to change notification settings - Fork 188
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
improving flow for object details pages (e.g. choose template -> crea…
…te user -> progress panel)
- Loading branch information
Showing
28 changed files
with
1,883 additions
and
175 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
...dmin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/CreateTemplatePanel.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?xml version="1.0" encoding="UTF-8" ?> | ||
|
||
<!-- | ||
~ Copyright (c) 2021 Evolveum | ||
~ | ||
~ This work is dual-licensed under the Apache License 2.0 | ||
~ and European Union Public License. See LICENSE file for details. | ||
--> | ||
<html xmlns="http://www.w3.org/1999/xhtml" | ||
xmlns:wicket="http://wicket.apache.org"> | ||
<body> | ||
<wicket:panel> | ||
<div wicket:id="template" /> | ||
</wicket:panel> | ||
</body> | ||
</html> |
156 changes: 156 additions & 0 deletions
156
...dmin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/CreateTemplatePanel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
/* | ||
* Copyright (C) 2021 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 java.util.ArrayList; | ||
import java.util.Collection; | ||
import java.util.List; | ||
import javax.xml.namespace.QName; | ||
|
||
import org.apache.commons.collections4.CollectionUtils; | ||
import org.apache.wicket.ajax.AjaxRequestTarget; | ||
import org.apache.wicket.markup.html.WebPage; | ||
import org.apache.wicket.model.PropertyModel; | ||
|
||
import com.evolveum.midpoint.gui.api.component.BasePanel; | ||
import com.evolveum.midpoint.gui.api.model.LoadableModel; | ||
import com.evolveum.midpoint.gui.api.util.WebComponentUtil; | ||
import com.evolveum.midpoint.gui.api.util.WebDisplayTypeUtil; | ||
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.util.ObjectCollectionViewUtil; | ||
import com.evolveum.midpoint.model.api.AssignmentObjectRelation; | ||
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; | ||
import com.evolveum.midpoint.prism.PrismObject; | ||
import com.evolveum.midpoint.util.QNameUtil; | ||
import com.evolveum.midpoint.util.exception.SchemaException; | ||
import com.evolveum.midpoint.web.component.CompositedIconButtonDto; | ||
import com.evolveum.midpoint.web.component.MultiCompositedButtonPanel; | ||
import com.evolveum.midpoint.web.component.MultiFunctinalButtonDto; | ||
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; | ||
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; | ||
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; | ||
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType; | ||
|
||
public class CreateTemplatePanel<O extends ObjectType> extends BasePanel<PrismObject<O>> { | ||
|
||
private static final String ID_TEMPLATE = "template"; | ||
|
||
public CreateTemplatePanel(String id) { | ||
super(id); | ||
} | ||
|
||
@Override | ||
protected void onInitialize() { | ||
super.onInitialize(); | ||
initLayout(); | ||
} | ||
|
||
private void initLayout() { | ||
MultiCompositedButtonPanel buttonsPanel = new MultiCompositedButtonPanel(ID_TEMPLATE, new PropertyModel<>(loadButtonDescriptions(), MultiFunctinalButtonDto.F_ADDITIONAL_BUTTONS)) { | ||
private static final long serialVersionUID = 1L; | ||
|
||
@Override | ||
protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRelation relationSpec, CompiledObjectCollectionView collectionViews, Class<? extends WebPage> page) { | ||
onTemplateChosePerformed(collectionViews, target); | ||
} | ||
|
||
}; | ||
add(buttonsPanel); | ||
} | ||
|
||
protected void onTemplateChosePerformed(CompiledObjectCollectionView collectionViews, AjaxRequestTarget target) { | ||
List<ObjectReferenceType> archetypeRef = ObjectCollectionViewUtil.getArchetypeReferencesList(collectionViews); | ||
try { | ||
WebComponentUtil.initNewObjectWithReference(getPageBase(), | ||
getType(), | ||
archetypeRef); | ||
} catch (SchemaException ex) { | ||
getPageBase().getFeedbackMessages().error(getPageBase(), ex.getUserFriendlyMessage()); | ||
target.add(getPageBase().getFeedbackPanel()); | ||
} | ||
} | ||
|
||
protected LoadableModel<MultiFunctinalButtonDto> loadButtonDescriptions() { | ||
return new LoadableModel<>(false) { | ||
|
||
@Override | ||
protected MultiFunctinalButtonDto load() { | ||
List<CompositedIconButtonDto> additionalButtons = new ArrayList<>(); | ||
|
||
Collection<CompiledObjectCollectionView> compiledObjectCollectionViews = findAllApplicableArchetypeViews(); | ||
|
||
if (CollectionUtils.isNotEmpty(compiledObjectCollectionViews)) { | ||
compiledObjectCollectionViews.forEach(collection -> { | ||
CompositedIconButtonDto buttonDesc = new CompositedIconButtonDto(); | ||
buttonDesc.setCompositedIcon(createCompositedIcon(collection)); | ||
buttonDesc.setOrCreateDefaultAdditionalButtonDisplayType(collection.getDisplay()); | ||
buttonDesc.setCollectionView(collection); | ||
additionalButtons.add(buttonDesc); | ||
}); | ||
} | ||
|
||
if (isGenericNewButtonVisible()) { | ||
CompositedIconButtonDto defaultButton = new CompositedIconButtonDto(); | ||
DisplayType defaultButtonDisplayType = getDefaultButtonDisplayType(); | ||
defaultButton.setAdditionalButtonDisplayType(defaultButtonDisplayType); | ||
|
||
CompositedIconBuilder defaultButtonIconBuilder = new CompositedIconBuilder(); | ||
defaultButtonIconBuilder.setBasicIcon(WebComponentUtil.getIconCssClass(defaultButtonDisplayType), IconCssStyle.IN_ROW_STYLE) | ||
.appendColorHtmlValue(WebComponentUtil.getIconColor(defaultButtonDisplayType)); | ||
|
||
defaultButton.setCompositedIcon(defaultButtonIconBuilder.build()); | ||
additionalButtons.add(defaultButton); | ||
} | ||
|
||
MultiFunctinalButtonDto multifunctionalButton = new MultiFunctinalButtonDto(); | ||
multifunctionalButton.setAdditionalButtons(additionalButtons); | ||
return multifunctionalButton; | ||
} | ||
}; | ||
} | ||
|
||
protected Collection<CompiledObjectCollectionView> findAllApplicableArchetypeViews() { | ||
return null; | ||
} | ||
|
||
//TODO copied from MainObjectListPanel | ||
private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collectionView) { | ||
DisplayType additionalButtonDisplayType = WebDisplayTypeUtil.getNewObjectDisplayTypeFromCollectionView(collectionView, getPageBase()); | ||
CompositedIconBuilder builder = new CompositedIconBuilder(); | ||
|
||
builder.setBasicIcon(WebComponentUtil.getIconCssClass(additionalButtonDisplayType), IconCssStyle.IN_ROW_STYLE) | ||
.appendColorHtmlValue(WebComponentUtil.getIconColor(additionalButtonDisplayType)); | ||
|
||
return builder.build(); | ||
} | ||
|
||
private DisplayType getDefaultButtonDisplayType() { | ||
String iconCssStyle = WebComponentUtil.createDefaultBlackIcon(getType()); | ||
|
||
String sb = createStringResource("MainObjectListPanel.newObject").getString() | ||
+ " " | ||
+ createStringResource("ObjectTypeLowercase." + getType().getLocalPart()).getString(); | ||
DisplayType display = WebDisplayTypeUtil.createDisplayType(iconCssStyle, "", sb); | ||
display.setLabel(WebComponentUtil.createPolyFromOrigString( | ||
getType().getLocalPart(), "ObjectType." + getType().getLocalPart())); | ||
return display; | ||
} | ||
|
||
protected boolean isGenericNewButtonVisible() { | ||
if (QNameUtil.match(ReportType.COMPLEX_TYPE, getType())) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
|
||
protected QName getType() { | ||
return null; | ||
} | ||
|
||
} |
28 changes: 28 additions & 0 deletions
28
gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/DetailsFragment.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* Copyright (C) 2021 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 org.apache.wicket.MarkupContainer; | ||
import org.apache.wicket.markup.html.panel.Fragment; | ||
|
||
public class DetailsFragment extends Fragment { | ||
|
||
public DetailsFragment(String id, String markupId, MarkupContainer markupProvider) { | ||
super(id, markupId, markupProvider); | ||
setOutputMarkupId(true); | ||
} | ||
|
||
@Override | ||
protected void onInitialize() { | ||
super.onInitialize(); | ||
initFragmentLayout(); | ||
} | ||
|
||
protected void initFragmentLayout() { | ||
|
||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
...min-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/ObjectChangeExecutor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
/* | ||
* Copyright (C) 2021 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.prism.delta.ObjectDelta; | ||
import com.evolveum.midpoint.schema.ObjectDeltaOperation; | ||
import com.evolveum.midpoint.schema.result.OperationResult; | ||
import com.evolveum.midpoint.task.api.Task; | ||
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; | ||
|
||
import org.apache.wicket.ajax.AjaxRequestTarget; | ||
|
||
import java.util.Collection; | ||
|
||
public interface ObjectChangeExecutor { | ||
|
||
Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, Task task, OperationResult result, AjaxRequestTarget target); | ||
} |
76 changes: 76 additions & 0 deletions
76
...ui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/ObjectChangesExecutorImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* Copyright (C) 2021 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 java.util.Collection; | ||
|
||
import com.evolveum.midpoint.util.logging.Trace; | ||
|
||
import com.evolveum.midpoint.util.logging.TraceManager; | ||
|
||
import org.apache.wicket.ajax.AjaxRequestTarget; | ||
|
||
import com.evolveum.midpoint.model.api.ModelExecuteOptions; | ||
import com.evolveum.midpoint.model.api.ModelService; | ||
import com.evolveum.midpoint.prism.delta.ObjectDelta; | ||
import com.evolveum.midpoint.schema.ObjectDeltaOperation; | ||
import com.evolveum.midpoint.schema.result.OperationResult; | ||
import com.evolveum.midpoint.task.api.Task; | ||
import com.evolveum.midpoint.util.exception.CommonException; | ||
import com.evolveum.midpoint.util.logging.LoggingUtils; | ||
import com.evolveum.midpoint.web.security.MidPointApplication; | ||
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; | ||
|
||
public class ObjectChangesExecutorImpl implements ObjectChangeExecutor { | ||
|
||
private static final Trace LOGGER = TraceManager.getTrace(ObjectChangesExecutorImpl.class); | ||
|
||
@Override | ||
public Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(Collection<ObjectDelta<? extends ObjectType>> deltas, boolean previewOnly, Task task, OperationResult result, AjaxRequestTarget target) { | ||
return executeChanges(deltas, task, result, target); | ||
} | ||
|
||
public Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(Collection<ObjectDelta<? extends ObjectType>> deltas, Task task, OperationResult result, AjaxRequestTarget target) { | ||
return executeChanges(deltas, null, task, result); | ||
} | ||
|
||
/** | ||
* Executes changes on behalf of the parent page. By default, changes are executed asynchronously (in | ||
* a separate thread). However, when set in the midpoint configuration, changes are executed synchronously. | ||
* | ||
* @param deltas Deltas to be executed. | ||
* @param options Model execution options. | ||
* @param task Task in context of which the changes have to be executed. | ||
* @param result Operation result. | ||
*/ | ||
public Collection<ObjectDeltaOperation<? extends ObjectType>> executeChanges(Collection<ObjectDelta<? extends ObjectType>> deltas, | ||
ModelExecuteOptions options, Task task, OperationResult result) { | ||
|
||
return executeChangesSync(deltas, options, task, result); | ||
|
||
} | ||
|
||
private Collection<ObjectDeltaOperation<? extends ObjectType>> executeChangesSync(Collection<ObjectDelta<? extends ObjectType>> deltas, ModelExecuteOptions options, Task task, OperationResult result) { | ||
|
||
try { | ||
MidPointApplication application = MidPointApplication.get(); | ||
|
||
ModelService service = application.getModel(); | ||
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = service.executeChanges(deltas, options, task, result); | ||
result.computeStatusIfUnknown(); | ||
return executedDeltas; | ||
} catch (CommonException | RuntimeException e) { | ||
LoggingUtils.logUnexpectedException(LOGGER, "Error executing changes", e); | ||
if (!result.isFatalError()) { // just to be sure the exception is recorded into the result | ||
result.recordFatalError(e.getMessage(), e); | ||
} | ||
} | ||
return null; | ||
} | ||
|
||
|
||
} |
18 changes: 18 additions & 0 deletions
18
...m/evolveum/midpoint/gui/impl/page/admin/assignmentholder/PageAssignmentHolderDetails.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<!-- | ||
~ Copyright (c) 2021 Evolveum | ||
~ | ||
~ This work is dual-licensed under the Apache License 2.0 | ||
~ and European Union Public License. See LICENSE file for details. | ||
--> | ||
<!DOCTYPE html> | ||
<html xmlns:wicket="http://wicket.apache.org"> | ||
<body> | ||
<wicket:extend> | ||
|
||
<wicket:fragment wicket:id="templateView"> | ||
<div wicket:id="template"></div> | ||
</wicket:fragment> | ||
<wicket:child/> | ||
</wicket:extend> | ||
</body> | ||
</html> |
Oops, something went wrong.