Skip to content

Commit

Permalink
fixing details panel creation
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Aug 25, 2021
1 parent 40e9d9b commit d96e1d4
Show file tree
Hide file tree
Showing 52 changed files with 2,296 additions and 249 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
"com.evolveum.midpoint.web.component.objectdetails", //Old panels
"com.evolveum.midpoint.web.component.assignment", //Assignments
"com.evolveum.midpoint.gui.impl.page.admin",
"com.evolveum.midpoint.web.page.admin.resources",
"com.evolveum.midpoint.gui.impl.component.assignment",
"com.evolveum.midpoint.gui.impl.component.assignmentType.assignment",
"com.evolveum.midpoint.gui.impl.component.assignmentType.inducement",
"com.evolveum.midpoint.gui.impl.page.admin.task.component"
"com.evolveum.midpoint.gui.impl.page.admin.task.component",
"com.evolveum.midpoint.gui.impl.page.admin.resource.component"
};

private Map<String, Class<? extends Panel>> panelsMap = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,4 @@ public interface PrismObjectWrapper<O extends ObjectType> extends PrismContainer

PrismObjectValueWrapper<O> getValue();

void addShadowDelta(ReferenceDelta shadowRefDelta);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.repo.common.ObjectResolver;
import com.evolveum.midpoint.repo.common.expression.ExpressionFactory;
import com.evolveum.midpoint.schema.GetOperationOptionsBuilder;
import com.evolveum.midpoint.security.api.SecurityContextManager;
import com.evolveum.midpoint.security.enforcer.api.SecurityEnforcer;
import com.evolveum.midpoint.task.api.Task;
Expand Down Expand Up @@ -97,4 +98,5 @@ default ObjectResolver getModelObjectResolver() {
<IW extends ItemWrapper, VW extends PrismValueWrapper, PV extends PrismValue> VW createValueWrapper(IW parentWrapper, PV newValue, ValueStatus status, WrapperContext context) throws SchemaException;

MidpointFormValidatorRegistry getFormValidatorRegistry();

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,12 @@

import com.evolveum.midpoint.gui.impl.page.admin.ObjectDetailsModels;

import com.google.common.reflect.Invokable;
import com.google.common.reflect.TypeToken;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.*;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.reflect.ConstructorUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.apache.commons.validator.routines.checkdigit.VerhoeffCheckDigit;
import org.apache.wicket.*;
Expand Down Expand Up @@ -5082,23 +5085,34 @@ public static <T extends ObjectType> Panel createPanel(Class<? extends Panel> pa
}

try {
Constructor constructor = panelClass.getConstructor(String.class, LoadableModel.class, ContainerPanelConfigurationType.class);
Panel panel = (Panel) constructor.newInstance(markupId, objectDetailsModels.getObjectWrapperModel(), panelConfig);
Panel panel = ConstructorUtils.invokeConstructor(panelClass, markupId, objectDetailsModels, panelConfig);
// Constructor constructor = panelClass.getConstructor(String.class, objectDetailsModels.getClass().getEnclosingClass(), ContainerPanelConfigurationType.class);
// Panel panel = (Panel) constructor.newInstance(markupId, objectDetailsModels, panelConfig);
panel.setOutputMarkupId(true);
return panel;
} catch (Throwable e) {
e.printStackTrace();
LOGGER.trace("No constructor found for (String, LoadableModel, ContainerPanelConfigurationType). Continue with lookup.");
}

try {
Constructor constructor = panelClass.getConstructor(String.class, IModel.class, ContainerPanelConfigurationType.class);
Panel panel = (Panel) constructor.newInstance(markupId, objectDetailsModels.getObjectWrapperModel(), panelConfig);
panel.setOutputMarkupId(true);
return panel;
} catch (Throwable e) {
LOGGER.trace("No constructor found for (String, Model, ContainerPanelConfigurationType). Panel cannot be created");
}
// try {
// Constructor constructor = panelClass.getConstructor(String.class, LoadableModel.class, ContainerPanelConfigurationType.class);
// Panel panel = (Panel) constructor.newInstance(markupId, objectDetailsModels.getObjectWrapperModel(), panelConfig);
// panel.setOutputMarkupId(true);
// return panel;
// } catch (Throwable e) {
// e.printStackTrace();
// LOGGER.trace("No constructor found for (String, LoadableModel, ContainerPanelConfigurationType). Continue with lookup.");
// }
//
// try {
// Constructor constructor = panelClass.getConstructor(String.class, IModel.class, ContainerPanelConfigurationType.class);
// Panel panel = (Panel) constructor.newInstance(markupId, objectDetailsModels.getObjectWrapperModel(), panelConfig);
// panel.setOutputMarkupId(true);
// return panel;
// } catch (Throwable e) {
// LOGGER.trace("No constructor found for (String, Model, ContainerPanelConfigurationType). Panel cannot be created");
// }

return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,39 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin;

import com.evolveum.midpoint.gui.api.component.BasePanel;

import com.evolveum.midpoint.gui.api.model.LoadableModel;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;

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

import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;

import javax.xml.namespace.QName;

public abstract class AbstractObjectMainPanel<O extends ObjectType> extends BasePanel<PrismObjectWrapper<O>> {
public abstract class AbstractObjectMainPanel<O extends ObjectType, M extends ObjectDetailsModels<O>> extends Panel {

private ContainerPanelConfigurationType panelConfiguration;
private M objectDetailsModels;

public AbstractObjectMainPanel(String id, LoadableModel<PrismObjectWrapper<O>> model, ContainerPanelConfigurationType config) {
super(id, model);
public AbstractObjectMainPanel(String id, M model, ContainerPanelConfigurationType config) {
super(id);
this.objectDetailsModels = model;
this.panelConfiguration = config;

}

@Override
Expand All @@ -39,14 +47,26 @@ protected void onInitialize() {
initLayout();
}

protected M getObjectDetailsModels() {
return objectDetailsModels;
}

public LoadableModel<PrismObjectWrapper<O>> getObjectWrapperModel() {
return objectDetailsModels.getObjectWrapperModel();
}

public PrismObjectWrapper<O> getObjectWrapper() {
return getObjectWrapperModel().getObject();
}

protected abstract void initLayout();

public ContainerPanelConfigurationType getPanelConfiguration() {
return panelConfiguration;
}

public <C extends Containerable> IModel<PrismContainerWrapper<C>> createContainerModel() {
return PrismContainerWrapperModel.fromContainerWrapper(getModel(), getContainerPath());
return PrismContainerWrapperModel.fromContainerWrapper(getObjectWrapperModel(), getContainerPath());
}

private ItemPath getContainerPath() {
Expand All @@ -63,4 +83,50 @@ public <C extends Containerable> Class<C> getTypeClass() {
public QName getType() {
return getPanelConfiguration().getType();
}

protected PageBase getPageBase() {
return WebComponentUtil.getPageBase(this);
}

protected PrismContext getPrismContext() {
return getPageBase().getPrismContext();
}

public String getString(String resourceKey, Object... objects) {
return createStringResource(resourceKey, objects).getString();
}

public StringResourceModel createStringResource(String resourceKey, Object... objects) {
return new StringResourceModel(resourceKey, this).setModel(null)
.setDefaultValue(resourceKey)
.setParameters(objects);
}

public StringResourceModel createStringResource(Enum<?> e) {
return createStringResource(e, null);
}

private StringResourceModel createStringResource(Enum<?> e, String prefix) {
return createStringResource(e, prefix, null);
}

private StringResourceModel createStringResource(Enum<?> e, String prefix, String nullKey) {
StringBuilder sb = new StringBuilder();
if (StringUtils.isNotEmpty(prefix)) {
sb.append(prefix).append('.');
}

if (e == null) {
if (StringUtils.isNotEmpty(nullKey)) {
sb.append(nullKey);
} else {
sb = new StringBuilder();
}
} else {
sb.append(e.getDeclaringClass().getSimpleName()).append('.');
sb.append(e.name());
}

return createStringResource(sb.toString());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.GuiObjectDetailsPageType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

public abstract class AbstractPageObjectDetails<O extends ObjectType> extends PageBase {
public abstract class AbstractPageObjectDetails<O extends ObjectType, ODM extends ObjectDetailsModels<O>> extends PageBase {

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

Expand All @@ -80,7 +80,7 @@ public abstract class AbstractPageObjectDetails<O extends ObjectType> extends Pa
private static final String ID_PROGRESS_PANEL = "progressPanel";
private static final String ID_DETAILS = "details";

private ObjectDetailsModels<O> objectDetailsModels;
private ODM objectDetailsModels;

private ProgressPanel progressPanel;
protected boolean previewRequested;
Expand All @@ -98,11 +98,12 @@ protected ObjectDetailsModels<O> getObjectDetailsModels() {
return objectDetailsModels;
}

private ObjectDetailsModels<O> createObjectDetailsModels() {
return new ObjectDetailsModels<>(createPrismObejctModel(), this);
//TODO should be abstract??
protected ODM createObjectDetailsModels() {
return (ODM) new ObjectDetailsModels<>(createPrismObejctModel(), this);
}

private LoadableModel<PrismObject<O>> createPrismObejctModel() {
protected LoadableModel<PrismObject<O>> createPrismObejctModel() {
return new LoadableModel<>(false) {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,18 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.web.component.assignment.SwitchAssignmentTypePanel;
import com.evolveum.midpoint.web.component.assignment.TabbedAssignmentTypePanel;
import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;

@PanelType(name = "inducements", defaultContainerPath = "inducement")
@PanelInstance(identifier = "inducements", applicableFor = AbstractRoleType.class)
@PanelDisplay(label = "Inducements", order = 70)
public class AbstractRoleInducementPanel<AH extends AssignmentHolderType> extends AbstractObjectMainPanel<AH> {
public class AbstractRoleInducementPanel<AR extends AbstractRoleType> extends AbstractObjectMainPanel<AR, ObjectDetailsModels<AR>> {

public AbstractRoleInducementPanel(String id, LoadableModel<PrismObjectWrapper<AH>> model, ContainerPanelConfigurationType config) {
public AbstractRoleInducementPanel(String id, ObjectDetailsModels<AR> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,12 @@

import com.evolveum.midpoint.gui.api.model.LoadableModel;

import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.web.component.assignment.TabbedAssignmentTypePanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;

import com.evolveum.midpoint.xml.ns._public.common.common_3.UserInterfaceElementVisibilityType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;

import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
Expand All @@ -29,21 +24,16 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//@PanelType(name = "assignments", defaultContainerPath = "assignment")
@PanelInstance(identifier = "assignments", applicableFor = AssignmentHolderType.class)
@PanelDisplay(label = "Assignments", icon = GuiStyleConstants.EVO_ASSIGNMENT_ICON, order = 30)
@Counter(provider = AssignmentCounter.class)
public class AssignmentHolderAssignmentPanel<AH extends AssignmentHolderType> extends AbstractObjectMainPanel<AH> {
public class AssignmentHolderAssignmentPanel<AH extends AssignmentHolderType> extends AbstractObjectMainPanel<AH, ObjectDetailsModels<AH>> {

private static final String ID_ASSIGNMENTS = "assignmentsContainer";
private static final String ID_ASSIGNMENTS_PANEL = "assignmentsPanel";

public AssignmentHolderAssignmentPanel(String id, LoadableModel<PrismObjectWrapper<AH>> model, ContainerPanelConfigurationType config) {
public AssignmentHolderAssignmentPanel(String id, ObjectDetailsModels<AH> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@
@PanelType(name = "basic", defaultContainerPath = "empty")
@PanelInstance(identifier = "basic", applicableFor = AssignmentHolderType.class, defaultPanel = true, notApplicableFor = ResourceType.class)
@PanelDisplay(label = "Basic", icon = GuiStyleConstants.CLASS_CIRCLE_FULL, order = 10)
public class AssignmentHolderBasicPanel<AH extends AssignmentHolderType> extends AbstractObjectMainPanel<AH> {
public class AssignmentHolderBasicPanel<AH extends AssignmentHolderType> extends AbstractObjectMainPanel<AH, ObjectDetailsModels<AH>> {

private static final String ID_MAIN_PANEL = "properties";
private static final Trace LOGGER = TraceManager.getTrace(AssignmentHolderBasicPanel.class);
private static final String ID_VIRTUAL_PANELS = "virtualPanels";

public AssignmentHolderBasicPanel(String id, LoadableModel<PrismObjectWrapper<AH>> model, ContainerPanelConfigurationType config) {
public AssignmentHolderBasicPanel(String id, ObjectDetailsModels<AH> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}

Expand All @@ -52,7 +52,7 @@ protected void initLayout() {
//
// }
// add(view);
SingleContainerPanel panel = new SingleContainerPanel(ID_MAIN_PANEL, getModel(), getPanelConfiguration());
SingleContainerPanel panel = new SingleContainerPanel(ID_MAIN_PANEL, getObjectWrapperModel(), getPanelConfiguration());
add(panel);
// } catch (SchemaException e) {
// LOGGER.error("Could not create focus details panel. Reason: {}", e.getMessage(), e);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2016 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 class="row">
<div class="col-md-12">
<div wicket:id="taskTable"/>
</div>
</div>
</wicket:panel>
</body>
</html>

0 comments on commit d96e1d4

Please sign in to comment.