Skip to content

Commit

Permalink
- support for counters in details menu (assignments, projections)
Browse files Browse the repository at this point in the history
- fixing focus history and cases tabs
  • Loading branch information
katkav committed Aug 26, 2021
1 parent 88d25be commit 12daf26
Show file tree
Hide file tree
Showing 21 changed files with 568 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.evolveum.midpoint.gui.api;

import java.lang.reflect.InvocationTargetException;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.xml.namespace.QName;
Expand All @@ -19,6 +20,8 @@

import com.evolveum.midpoint.prism.path.UniformItemPath;

import com.evolveum.midpoint.web.application.*;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.markup.html.panel.Panel;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -32,9 +35,6 @@
import com.evolveum.midpoint.prism.util.CloneUtil;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.util.ClassPathUtil;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

Expand All @@ -49,15 +49,21 @@ 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.gui.impl.page.admin.assignmentholder.component",
"com.evolveum.midpoint.gui.impl.page.admin.focus.component",
"com.evolveum.midpoint.gui.impl.page.admin.resource.component",
"com.evolveum.midpoint.gui.impl.page.admin.task.component",
"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.resource.component"
"com.evolveum.midpoint.gui.impl.component.assignmentType.inducement"


};

private Map<String, Class<? extends Panel>> panelsMap = new HashMap<>();

private Map<String, SimpleCounter> countersMap = new HashMap<>();

@Override
@PostConstruct
public void register() {
Expand All @@ -68,6 +74,10 @@ public Class<? extends Panel> findPanel(String identifier) {
return panelsMap.get(identifier);
}

public SimpleCounter findCounter(String idenifier) {
return countersMap.get(idenifier);
}

@Override
public void postProcess(CompiledGuiProfile compiledGuiProfile) {
fillInPanelsMap();
Expand Down Expand Up @@ -200,6 +210,16 @@ private ContainerPanelConfigurationType compileContainerPanelConfiguration(Strin
List<ContainerPanelConfigurationType> children = processChildren(classes, objectType, clazz);
config.getPanel().addAll(children);

Counter counterDefinition = clazz.getAnnotation(Counter.class);
if (counterDefinition != null) {
Class<? extends SimpleCounter> counterProvider = counterDefinition.provider();
try {
countersMap.put(identifier, counterProvider.getDeclaredConstructor().newInstance());
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
//TODO log at least
}
}

if (isDefault) {
config.setDefault(true);
// defaultContainerPanelConfigurationMap.put(objectType, config);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.evolveum.midpoint.gui.api.DefaultGuiConfigurationCompiler;
import com.evolveum.midpoint.gui.impl.component.menu.LeftMenuPanel;

import com.evolveum.midpoint.web.application.SimpleCounter;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
Expand Down Expand Up @@ -1879,4 +1881,8 @@ public ModelExecuteOptions executeOptions() {
public Class<? extends Panel> findObjectPanel(String identifier) {
return guiConfigurationRegistry.findPanel(identifier);
}

public SimpleCounter getCounterProvider(String identifier) {
return guiConfigurationRegistry.findCounter(identifier);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4932,14 +4932,18 @@ public static String filterNonDeadProjections(List<ShadowWrapper> projectionWrap
}

public static String countLinkFroNonDeadShadows(Collection<ObjectReferenceType> refs) {
return Integer.toString(countLinkForNonDeadShadows(refs));
}

public static int countLinkForNonDeadShadows(Collection<ObjectReferenceType> refs) {
int count = 0;
for (ObjectReferenceType ref : refs) {
if (QNameUtil.match(ref.getRelation(), SchemaConstants.ORG_RELATED)) {
continue;
}
count++;
}
return Integer.toString(count);
return count;
}

public static List<DisplayableValue<?>> getAllowedValues(SearchFilterParameterType parameter, PageBase pageBase) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import java.util.List;

import com.evolveum.midpoint.gui.impl.page.admin.ObjectDetailsModels;
import com.evolveum.midpoint.web.application.SimpleCounter;
import com.evolveum.midpoint.web.session.ObjectDetailsStorage;

import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -30,6 +31,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserInterfaceElementVisibilityType;

import org.opensaml.xmlsec.signature.P;

public class DetailsNavigationPanel<O extends ObjectType> extends BasePanel<List<ContainerPanelConfigurationType>> {

private static final String ID_NAV = "menu";
Expand Down Expand Up @@ -115,16 +118,18 @@ protected void onClickPerformed(ContainerPanelConfigurationType config, AjaxRequ
private IModel<String> createCountModel(IModel<ContainerPanelConfigurationType> panelModel) {
return new ReadOnlyModel<>( () -> {
ContainerPanelConfigurationType config = panelModel.getObject();
String panelIdentifier = config.getPanelType();
if ("assignments".equals(panelIdentifier)) {
AssignmentCounter counter = new AssignmentCounter(objectDetialsModel);
int count = counter.count();
if (count == 0) {
return null;
}
return String.valueOf(count);
String panelInstanceIdentifier = config.getIdentifier();

SimpleCounter counter = getPageBase().getCounterProvider(panelInstanceIdentifier);
if (counter == null || counter.getClass().equals(SimpleCounter.class)) {
return null;
}
return null;

int count = counter.count(objectDetialsModel);
// if (count == 0) {
// return null;
// }
return String.valueOf(count);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ protected PrismObjectWrapper<O> load() {
detailsPageConfigurationModel = new LoadableModel<>(false) {
@Override
protected GuiObjectDetailsPageType load() {
return loadDetailsPageConfiguration();
return loadDetailsPageConfiguration(prismObjectModel.getObject());
}
};

Expand All @@ -94,8 +94,8 @@ protected O load() {
};
}

protected GuiObjectDetailsPageType loadDetailsPageConfiguration() {
return modelServiceLocator.getCompiledGuiProfile().findObjectDetailsConfiguration(prismObjectModel.getObject().getDefinition().getTypeName());
protected GuiObjectDetailsPageType loadDetailsPageConfiguration(PrismObject<O> prismObject) {
return modelServiceLocator.getCompiledGuiProfile().findObjectDetailsConfiguration(prismObject.getDefinition().getTypeName());
}

public LoadableModel<PrismObjectWrapper<O>> getObjectWrapperModel() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.web.application.*;

@PanelType(name = "inducements", defaultContainerPath = "inducement")
//@PanelType(name = "inducements", defaultContainerPath = "inducement")
@PanelInstance(identifier = "inducements", applicableFor = AbstractRoleType.class)
@PanelDisplay(label = "Inducements", order = 70)
public class AbstractRoleInducementPanel<AR extends AbstractRoleType> extends AbstractObjectMainPanel<AR, ObjectDetailsModels<AR>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@ public AssignmentHolderDetailsModel(LoadableModel<PrismObject<AH>> prismObjectMo
}

@Override
protected GuiObjectDetailsPageType loadDetailsPageConfiguration() {
GuiObjectDetailsPageType defaultPageConfig = super.loadDetailsPageConfiguration();
protected GuiObjectDetailsPageType loadDetailsPageConfiguration(PrismObject<AH> assignmentHolder) {
GuiObjectDetailsPageType defaultPageConfig = super.loadDetailsPageConfiguration(assignmentHolder);

AH modelObject = getPrismObject().asObjectable();
List<ObjectReferenceType> archetypes = modelObject.getArchetypeRef();
List<ObjectReferenceType> archetypes = assignmentHolder.asObjectable().getArchetypeRef();

OperationResult result = new OperationResult("mergeArchetypeConfig");
return getAdminGuiConfigurationMergeManager().mergeObjectDetailsPageConfiguration(defaultPageConfig, archetypes, result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
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, ObjectDetailsModels<AH> model, ContainerPanelConfigurationType config) {
super(id, model, config);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?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="mainPanel"/>
</wicket:panel>
</body>
</html>

0 comments on commit 12daf26

Please sign in to comment.