Skip to content

Commit

Permalink
default collection - all users, all roles, ...
Browse files Browse the repository at this point in the history
styles fixes
  • Loading branch information
katkav committed Sep 27, 2021
1 parent 8563362 commit 6efdc70
Show file tree
Hide file tree
Showing 20 changed files with 195 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
import java.util.*;
import javax.annotation.PostConstruct;

import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.polystring.PolyString;

import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;

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

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.markup.html.panel.Panel;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -46,7 +46,7 @@ public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
@Autowired private PrismContext prismContext;
@Autowired private AdminGuiConfigurationMergeManager adminGuiConfigurationMergeManager;

private static final String[] PACKAGES_TO_SCAN = {
private static final String[] PANEL_PACKAGES_TO_SCAN = {
"com.evolveum.midpoint.web.component.objectdetails", //Old panels
"com.evolveum.midpoint.web.component.assignment", //Assignments
"com.evolveum.midpoint.gui.impl.page.admin",
Expand All @@ -68,6 +68,20 @@ public class DefaultGuiConfigurationCompiler implements GuiProfileCompilable {
"com.evolveum.midpoint.gui.impl.page.admin.report.component"
};

private static final String[] COLLECTION_PACKAGES_TO_SCAN = {
"com.evolveum.midpoint.web.page.admin.users",
"com.evolveum.midpoint.web.page.admin.services",
"com.evolveum.midpoint.web.page.admin.tasks",
"com.evolveum.midpoint.web.page.admin.roles",
"com.evolveum.midpoint.web.page.admin.resources",
"com.evolveum.midpoint.web.page.admin.reports",
"com.evolveum.midpoint.web.page.admin.orgs",
"com.evolveum.midpoint.web.page.admin.objectTemplate",
"com.evolveum.midpoint.web.page.admin.objectCollection",
"com.evolveum.midpoint.web.page.admin.cases",
"com.evolveum.midpoint.web.page.admin.archetype"
};

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

private final Map<String, SimpleCounter> countersMap = new HashMap<>();
Expand All @@ -92,11 +106,18 @@ public SimpleCounter findCounter(String idenifier) {
public void postProcess(CompiledGuiProfile compiledGuiProfile) {
experimentalFeaturesEnabled = compiledGuiProfile.isEnableExperimentalFeatures();

Set<Class<?>> classes = collectClasses();
Set<Class<?>> classes = collectPackagesClasses();

fillInPanelsMap(classes);
fillInCountersMap(classes);

compileDefaultDetailsPages(classes, compiledGuiProfile);
mergeCollectionViewsWithDefault(compiledGuiProfile);
processShadowPanels(classes, compiledGuiProfile);

}

private void compileDefaultDetailsPages(Set<Class<?>> classes, CompiledGuiProfile compiledGuiProfile) {
GuiObjectDetailsSetType defaultDetailsPages = compileDefaultGuiObjectDetailsSetType(classes);
List<GuiObjectDetailsPageType> detailsPages = defaultDetailsPages.getObjectDetailsPage();
for (GuiObjectDetailsPageType defaultDetailsPage : detailsPages) {
Expand All @@ -111,9 +132,50 @@ public void postProcess(CompiledGuiProfile compiledGuiProfile) {
compiledGuiProfile.getObjectDetails().getObjectDetailsPage().removeIf(p -> QNameUtil.match(p.getType(), defaultDetailsPage.getType()));
compiledGuiProfile.getObjectDetails().getObjectDetailsPage().add(mergedDetailsPage.cloneWithoutId());
}
}

processShadowPanels(classes, compiledGuiProfile);
private void mergeCollectionViewsWithDefault(CompiledGuiProfile compiledGuiProfile) {
Set<Class<?>> classes = collectCollectionClasses();
List<CompiledObjectCollectionView> defaultCollectionViews = compileDefaultCollectionViews(classes);

for (CompiledObjectCollectionView defaultCollectionView : defaultCollectionViews) {
CompiledObjectCollectionView compiledObjectCollectionView = compiledGuiProfile.findObjectCollectionView(defaultCollectionView.getContainerType(), defaultCollectionView.getViewIdentifier());
if (compiledObjectCollectionView == null) {
compiledGuiProfile.getObjectCollectionViews().add(defaultCollectionView);
continue;
}
mergeCollectionViews(compiledObjectCollectionView, defaultCollectionView);
}

}

private void mergeCollectionViews(CompiledObjectCollectionView compiledObjectCollectionView, CompiledObjectCollectionView defaulCollectionView) {
DisplayType displayType = adminGuiConfigurationMergeManager.mergeDisplayType(compiledObjectCollectionView.getDisplay(), defaulCollectionView.getDisplay());
compiledObjectCollectionView.setDisplay(displayType);

if (compiledObjectCollectionView.getApplicableForOperation() == null) {
compiledObjectCollectionView.setApplicableForOperation(defaulCollectionView.getApplicableForOperation());
}
}

private List<CompiledObjectCollectionView> compileDefaultCollectionViews(Set<Class<?>> classes) {
List<CompiledObjectCollectionView> compiledObjectCollectionViews = new ArrayList<>();
for (Class<?> clazz : classes) {
CollectionInstance collectionInstance = clazz.getAnnotation(CollectionInstance.class);
if (collectionInstance == null) {
continue;
}
ObjectTypes objectType = ObjectTypes.getObjectType(collectionInstance.applicableForType());
CompiledObjectCollectionView defaultCollectionView = new CompiledObjectCollectionView(objectType.getTypeQName(), collectionInstance.identifier());
defaultCollectionView.setDisplay(createDisplayType(collectionInstance.display()));
compiledObjectCollectionViews.add(defaultCollectionView);
defaultCollectionView.setDefaultView(true);

if (collectionInstance.applicableForOperation().length == 1) {
defaultCollectionView.setApplicableForOperation(collectionInstance.applicableForOperation()[0]);
}
}
return compiledObjectCollectionViews;
}

private void processShadowPanels(Set<Class<?>> classes, CompiledGuiProfile compiledGuiProfile) {
Expand Down Expand Up @@ -243,9 +305,17 @@ private List<ContainerPanelConfigurationType> getPanelsFor(Class<? extends Objec
return panels;
}

private Set<Class<?>> collectClasses() {
private Set<Class<?>> collectPackagesClasses() {
return collectClasses(PANEL_PACKAGES_TO_SCAN);
}

private Set<Class<?>> collectCollectionClasses() {
return collectClasses(COLLECTION_PACKAGES_TO_SCAN);
}

private Set<Class<?>> collectClasses(String[] packagesToScan) {
Set<Class<?>> allClasses = new HashSet<>();
for (String packageToScan : PACKAGES_TO_SCAN) {
for (String packageToScan : packagesToScan) {
Set<Class<?>> classes = ClassPathUtil.listClasses(packageToScan);
allClasses.addAll(classes);
}
Expand Down Expand Up @@ -363,11 +433,16 @@ private List<ContainerPanelConfigurationType> processChildren(Set<Class<?>> clas

private DisplayType createDisplayType(PanelDisplay display) {
DisplayType displayType = new DisplayType();
PolyStringTranslationType translationType = new PolyStringTranslationType();
translationType.setKey(display.label());
PolyString polyString = new PolyString(null, null, translationType);
displayType.setLabel(new PolyStringType(polyString));
displayType.setLabel(createPolyStringType(display.label()));
displayType.setSingularLabel(createPolyStringType(display.singularLabel()));
displayType.setIcon(new IconType().cssClass(display.icon()));
return displayType;
}

private PolyStringType createPolyStringType(String key) {
PolyStringTranslationType translationType = new PolyStringTranslationType();
translationType.setKey(key);
PolyString polyString = new PolyString(null, null, translationType);
return new PolyStringType(polyString);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -250,21 +250,6 @@ protected MultiFunctinalButtonDto load() {
});
}

if (!(isCollectionViewPanelForCompiledView() || isCollectionViewPanelForWidget())
&& getNewObjectGenericButtonVisibility() && isGenericNewButtonVisible()) {
CompositedIconButtonDto defaultButton = new CompositedIconButtonDto();
DisplayType defaultButtonDisplayType = getNewObjectButtonSpecialDisplayType();
defaultButton.setAdditionalButtonDisplayType(defaultButtonDisplayType);

CompositedIconBuilder defaultButtonIconBuilder = new CompositedIconBuilder();
defaultButtonIconBuilder.setBasicIcon(WebComponentUtil.getIconCssClass(defaultButtonDisplayType), IconCssStyle.IN_ROW_STYLE)
.appendColorHtmlValue(WebComponentUtil.getIconColor(defaultButtonDisplayType));
// .appendLayerIcon(WebComponentUtil.createIconType(GuiStyleConstants.CLASS_PLUS_CIRCLE, "green"), IconCssStyle.BOTTOM_RIGHT_STYLE);

defaultButton.setCompositedIcon(defaultButtonIconBuilder.build());
additionalButtons.add(defaultButton);
}

multifunctionalButton.setAdditionalButtons(additionalButtons);

return multifunctionalButton;
Expand All @@ -273,10 +258,6 @@ && getNewObjectGenericButtonVisibility() && isGenericNewButtonVisible()) {

}

protected boolean isGenericNewButtonVisible() {
return true;
}

@Override
protected List<IColumn<SelectableBean<O>, String>> createDefaultColumns() {
GuiObjectListViewType defaultView = DefaultColumnUtils.getDefaultView(getType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,19 +95,6 @@ protected MultiFunctinalButtonDto load() {
});
}

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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public PageAssignmentHolderDetails(PrismObject<AH> assignmentHolder) {
@Override
protected void initLayout() {
Collection<CompiledObjectCollectionView> applicableArchetypes = findAllApplicableArchetypeViews();
if (isAdd() && !applicableArchetypes.isEmpty()) {
if (isAdd() && applicableArchetypes.size() > 1) {
TemplateFragment templateFragment = new TemplateFragment(ID_DETAILS_VIEW, ID_TEMPLATE_VIEW, PageAssignmentHolderDetails.this);
add(templateFragment);
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* 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.web.application;

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

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface CollectionInstance {

String identifier() default "";

/**
* The type for which the panel is applicable for.
*/
Class<? extends ObjectType> applicableForType() default ObjectType.class;


/**
* Defined the type of the operation when the panel is visible. Default behavior is
* that the panel is visible for both - ADD new object and MODIFY object.
*/
OperationTypeType[] applicableForOperation() default {OperationTypeType.ADD, OperationTypeType.MODIFY};


/**
* Defined display parameters for the panels, such as an icon, label, display oreder...
*/
PanelDisplay display();
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
public @interface PanelDisplay {

String label() default "";
String singularLabel() default "";

String icon() default "fa fa-circle-o";

int order() default 1000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,22 @@

import java.util.List;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.web.application.Url;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.PageAdmin;
import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration;

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

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.data.column.ColumnUtils;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
Expand All @@ -47,6 +48,8 @@
label = "PageArchetypes.auth.archetypes.view.label",
description = "PageArchetypes.auth.archetypes.view.description")
})
@CollectionInstance(identifier = "allArchetypes", applicableForType = ArchetypeType.class,
display = @PanelDisplay(label = "PageAdmin.menu.top.archetypes.list", singularLabel = "ObjectType.archetype", icon = GuiStyleConstants.EVO_ARCHETYPE_TYPE_ICON))
public class PageArchetypes extends PageAdmin {

private static final long serialVersionUID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.Trace;
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.application.Url;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
Expand Down Expand Up @@ -55,6 +53,8 @@
@AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CASES_VIEW_URL,
label = "PageCases.auth.cases.view.label",
description = "PageCases.auth.cases.view.description") })
@CollectionInstance(identifier = "allCases", applicableForType = CaseType.class,
display = @PanelDisplay(label = "PageAdmin.menu.top.cases.list", singularLabel = "ObjectType.case", icon = GuiStyleConstants.EVO_CASE_OBJECT_ICON))
public class PageCases extends PageAdmin {
private static final long serialVersionUID = 1L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
*/
package com.evolveum.midpoint.web.page.admin.objectCollection;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.application.Url;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.data.column.ColumnUtils;
import com.evolveum.midpoint.web.component.form.MidpointForm;
Expand All @@ -24,6 +23,7 @@
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;

import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionType;

import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateType;
Expand Down Expand Up @@ -55,6 +55,8 @@
label = "PageObjectCollections.auth.objectCollections.label",
description = "PageObjectCollections.auth.objectCollections.description")
})
@CollectionInstance(identifier = "allObjectCollections", applicableForType = ObjectCollectionType.class,
display = @PanelDisplay(label = "PageAdmin.menu.top.objectCollections.list", singularLabel = "ObjectType.objectCollection", icon = GuiStyleConstants.CLASS_OBJECT_COLLECTION_ICON))
public class PageObjectCollections extends PageAdmin{

private static final long serialVersionUID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
*/
package com.evolveum.midpoint.web.page.admin.objectTemplate;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.application.Url;
import com.evolveum.midpoint.web.application.*;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.data.column.ColumnUtils;
import com.evolveum.midpoint.web.component.form.MidpointForm;
Expand Down Expand Up @@ -57,6 +56,8 @@
label = "PageObjectTemplates.auth.objectTemplates.label",
description = "PageObjectTemplates.auth.objectTemplates.description")
})
@CollectionInstance(identifier = "allObjectTemplates", applicableForType = ObjectTemplateType.class,
display = @PanelDisplay(label = "PageAdmin.menu.top.objectTemplates.list", singularLabel = "ObjectType.objectTemplate", icon = GuiStyleConstants.CLASS_OBJECT_TEMPLATE_ICON))
public class PageObjectTemplates extends PageAdmin{

private static final long serialVersionUID = 1L;
Expand Down

0 comments on commit 6efdc70

Please sign in to comment.