Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Nov 20, 2021
2 parents cae17a3 + b405fce commit 8be9c17
Show file tree
Hide file tree
Showing 37 changed files with 666 additions and 137 deletions.
Expand Up @@ -242,7 +242,7 @@ protected void showMainPopup(Popupable popupable, AjaxRequestTarget target) {
getPageBase().showMainPopup(popupable, target);
}

protected boolean isSaveButtonEnabled() {
protected boolean isSavePreviewButtonEnabled() {
//in case user isn't allowed to modify focus data but has
// e.g. #assign authorization, Save button is disabled on page load.
// Save button becomes enabled just if some changes are made
Expand Down
Expand Up @@ -7,28 +7,23 @@

package com.evolveum.midpoint.gui.impl.page.admin.component;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.Model;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.button.DropdownButtonDto;
import com.evolveum.midpoint.gui.api.component.button.DropdownButtonPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.web.component.AjaxIconButton;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.Model;

import java.util.ArrayList;
import java.util.List;

public class FocusOperationalButtonsPanel<F extends FocusType> extends AssignmentHolderOperationalButtonsPanel<F> {

private static final String ID_EXECUTE_OPTIONS_LEGEND = "executeOptionsLegend";
Expand Down Expand Up @@ -88,6 +83,20 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) {
previewPerformed(ajaxRequestTarget);
}
};
preview.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_PREVIEW_CHANGES_URL)
&& !getModelObject().isReadOnly();
}

@Override
public boolean isEnabled() {
return isSavePreviewButtonEnabled();
}
});
preview.showTitleAsLabel(true);
preview.add(AttributeAppender.append("class", "btn btn-info btn-sm"));
repeatingView.add(preview);
Expand Down
Expand Up @@ -24,7 +24,6 @@
import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.component.icon.LayeredIconCssStyle;
Expand All @@ -42,7 +41,6 @@
import com.evolveum.midpoint.web.component.util.EnableBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.PageDebugView;
import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DetailsPageSaveMethodType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.GuiObjectDetailsPageType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
Expand Down Expand Up @@ -158,7 +156,7 @@ protected void onError(AjaxRequestTarget target) {
}
};
save.add(new VisibleBehaviour(this::isSaveButtonVisible));
save.add(new EnableBehaviour(this::isSaveButtonEnabled));
save.add(new EnableBehaviour(this::isSavePreviewButtonEnabled));
save.titleAsLabel(true);
save.setOutputMarkupId(true);
save.add(AttributeAppender.append("class", "btn btn-success btn-sm"));
Expand All @@ -179,7 +177,7 @@ protected boolean isSaveButtonVisible() {
return !getModelObject().isReadOnly() && !isForcedPreview();
}

protected boolean isSaveButtonEnabled() {
protected boolean isSavePreviewButtonEnabled() {
return true;
}

Expand Down
Expand Up @@ -25,12 +25,12 @@ public UserOperationalButtonsPanel(String id, LoadableModel<PrismObjectWrapper<U
this.delegationsModel = delegationsModel;
}

protected boolean isSaveButtonEnabled() {
protected boolean isSavePreviewButtonEnabled() {
//in case user isn't allowed to modify focus data but has
// e.g. #assign authorization, Save button is disabled on page load.
// Save button becomes enabled if some changes are made
// on the Delegations panel
return isDelegationAddedOrRemoved() || super.isSaveButtonEnabled();
return isDelegationAddedOrRemoved() || super.isSavePreviewButtonEnabled();
}


Expand Down
Expand Up @@ -56,6 +56,7 @@ public final class DescriptorLoader implements DebugDumpable {
"com.evolveum.midpoint.web.page.error",
"com.evolveum.midpoint.web.page.forgetpassword",
"com.evolveum.midpoint.web.page.self",
"com.evolveum.midpoint.gui.impl.page.self",
"com.evolveum.midpoint.web.component.prism.show",
"com.evolveum.midpoint.gui.impl.page.admin",
"com.evolveum.midpoint.gui.impl.page.admin.cases",
Expand Down
Expand Up @@ -199,7 +199,7 @@ public static <C extends Containerable> Search<C> createContainerSearch(Containe
availableDefs = getAvailableDefinitions(containerDef, null, true, modelServiceLocator);
}

Search search = new Search(type, availableDefs);
Search<C> search = new Search<>(type, availableDefs);

List<SearchItemDefinition> configuredSearchItemDefs = null;
if (useObjectCollection) {
Expand All @@ -216,9 +216,9 @@ public static <C extends Containerable> Search<C> createContainerSearch(Containe
return search;
}

public static <T extends ObjectType> Search createSearch(Class<? extends T> type, ModelServiceLocator modelServiceLocator) {
public static <T extends ObjectType> Search<? extends T> createSearch(Class<? extends T> type, ModelServiceLocator modelServiceLocator) {
@NotNull ObjectTypes objectTypes = ObjectTypes.getObjectType(type);
return createSearch(new ContainerTypeSearchItem<T>(new SearchValue(type, "ObjectType." + objectTypes.getTypeQName().getLocalPart())), null, null,
return createSearch(new ContainerTypeSearchItem<>(new SearchValue<>(type, "ObjectType." + objectTypes.getTypeQName().getLocalPart())), null, null,
null, modelServiceLocator, null, true, true, Search.PanelType.DEFAULT);
}

Expand All @@ -234,12 +234,12 @@ public static <T extends ObjectType> Search<T> createSearch(
panelType, false);
}

private static <T extends ObjectType> Search createSearch(
private static <T extends ObjectType> Search<T> createSearch(
ContainerTypeSearchItem<T> type, String collectionViewName, List<ItemPath> fixedSearchItems, ResourceShadowDiscriminator discriminator,
ModelServiceLocator modelServiceLocator, List<ItemPath> availableItemPath, boolean useDefsFromSuperclass, boolean useObjectCollection, Search.PanelType panelType,
boolean isOidSearchEnabled) {

PrismObjectDefinition objectDef = findObjectDefinition(type.getTypeClass(), discriminator, modelServiceLocator);
PrismObjectDefinition<?> objectDef = findObjectDefinition(type.getTypeClass(), discriminator, modelServiceLocator);
List<SearchItemDefinition> availableDefs = getAvailableDefinitions(objectDef, availableItemPath, useDefsFromSuperclass, modelServiceLocator);
boolean isFullTextSearchEnabled = isFullTextSearchEnabled(modelServiceLocator, type.getTypeClass());

Expand All @@ -251,10 +251,10 @@ private static <T extends ObjectType> Search createSearch(
searchMode = searchBox.getDefaultMode();
allowedSearchModes = searchBox.getAllowedMode();
}
Search search = new Search(type, availableDefs, isFullTextSearchEnabled, searchMode, allowedSearchModes, isOidSearchEnabled);
Search<T> search = new Search<>(type, availableDefs, isFullTextSearchEnabled, searchMode, allowedSearchModes, isOidSearchEnabled);

SchemaRegistry registry = modelServiceLocator.getPrismContext().getSchemaRegistry();
PrismObjectDefinition objDef = registry.findObjectDefinitionByCompileTimeClass(type.getTypeClass());
PrismObjectDefinition<?> objDef = registry.findObjectDefinitionByCompileTimeClass(type.getTypeClass());

List<SearchItemDefinition> configuredSearchItemDefs = null;
if (useObjectCollection) {
Expand All @@ -279,9 +279,9 @@ private static <T extends ObjectType> Search createSearch(
return search;
}

public static <C extends Containerable> Search createSearchForReport(Class<C> type, List<SearchFilterParameterType> parameters, ModelServiceLocator modelServiceLocator) {
public static <C extends Containerable> Search<C> createSearchForReport(Class<C> type, List<SearchFilterParameterType> parameters, ModelServiceLocator modelServiceLocator) {
ContainerTypeSearchItem<C> typeItem = new ContainerTypeSearchItem<>(new SearchValue<>(type, ""));
Search search = new Search(typeItem, new ArrayList<>(), false, SearchBoxModeType.BASIC, Collections.singletonList(SearchBoxModeType.BASIC), false);
Search<C> search = new Search<>(typeItem, new ArrayList<>(), false, SearchBoxModeType.BASIC, Collections.singletonList(SearchBoxModeType.BASIC), false);

SchemaRegistry registry = modelServiceLocator.getPrismContext().getSchemaRegistry();
PrismContainerDefinition objDef = registry.findContainerDefinitionByCompileTimeClass(type);
Expand All @@ -303,7 +303,6 @@ public static <C extends Containerable> Search createSearchForReport(Class<C> ty
}
}
configuredSearchItemDefs.add(new SearchItemDefinition(searchItemType));
return;
});
processSearchItemDefFromCompiledView(configuredSearchItemDefs, search, objDef);
search.setCanConfigure(false);
Expand Down Expand Up @@ -356,7 +355,7 @@ public static <T extends ObjectType> PrismObjectDefinition findObjectDefinition(
}
}

public static <C extends Containerable> List<SearchItemDefinition> getConfiguredSearchItemDefinitions(List<SearchItemDefinition> availableDefinitions,
public static List<SearchItemDefinition> getConfiguredSearchItemDefinitions(List<SearchItemDefinition> availableDefinitions,
ModelServiceLocator modelServiceLocator, QName type, String collectionViewName, Search.PanelType panelType) {
SearchBoxConfigurationType searchConfig = getSearchBoxConfiguration(modelServiceLocator, type, collectionViewName, panelType);
if (searchConfig == null) {
Expand Down Expand Up @@ -401,7 +400,7 @@ public static <C extends Containerable> List<SearchItemDefinition> getAvailableD
List<ItemPath> paths = CollectionUtils.isEmpty(availableItemPath) ? getAvailableSearchableItems(typeClass, modelServiceLocator) : availableItemPath;
if (paths != null) {
for (ItemPath path : paths) {
ItemDefinition def = objectDef.findItemDefinition(path);
ItemDefinition<?> def = objectDef.findItemDefinition(path);
if (def != null) {
SearchItemDefinition searchItemDef = new SearchItemDefinition(path, def, getAllowedValues(path));
definitions.add(searchItemDef);
Expand All @@ -423,7 +422,7 @@ private static List<DisplayableValue> getAllowedValues(ItemPath path) {
if (AuditEventRecordType.F_CHANNEL.equivalent(path)) {
List<DisplayableValue> list = new ArrayList<>();
for (GuiChannel channel : GuiChannel.values()) {
list.add(new SearchValue(channel.getUri(), channel.getLocalizationKey()));
list.add(new SearchValue<>(channel.getUri(), channel.getLocalizationKey()));
}
return list;
}
Expand All @@ -433,17 +432,17 @@ private static List<DisplayableValue> getAllowedValues(ItemPath path) {
public static List<ItemPath> getAvailableSearchableItems(Class<?> typeClass, ModelServiceLocator modelServiceLocator) {
List<ItemPath> items = SEARCHABLE_OBJECTS.get(typeClass);
if (AuditEventRecordType.class.equals(typeClass)) {
SystemConfigurationType systemConfigurationType = null;
SystemConfigurationType systemConfigurationType;
try {
systemConfigurationType = modelServiceLocator.getModelInteractionService().getSystemConfiguration(new OperationResult("load_system_config"));
systemConfigurationType = modelServiceLocator.getModelInteractionService()
.getSystemConfiguration(new OperationResult("load_system_config"));
} catch (SchemaException | ObjectNotFoundException e) {
throw new SystemException(e);
}
if (systemConfigurationType != null && systemConfigurationType.getAudit() != null
&& systemConfigurationType.getAudit().getEventRecording() != null &&
Boolean.TRUE.equals(systemConfigurationType.getAudit().getEventRecording().isRecordResourceOids())) {
ArrayList<ItemPath> auditItems = new ArrayList<>();
auditItems.addAll(items);
ArrayList<ItemPath> auditItems = new ArrayList<>(items);
auditItems.add(ItemPath.create(AuditEventRecordType.F_RESOURCE_OID));
items = auditItems;
}
Expand Down Expand Up @@ -484,15 +483,15 @@ private static SearchBoxConfigurationType getSearchBoxConfiguration(ModelService
return view.getSearchBoxConfiguration();
}
return null;
} catch (SchemaException | ObjectNotFoundException | CommunicationException | ConfigurationException | SecurityViolationException | ExpressionEvaluationException ex) {
} catch (SchemaException | ObjectNotFoundException | CommunicationException
| ConfigurationException | SecurityViolationException | ExpressionEvaluationException ex) {
throw new SystemException(ex);
}
}

public static <C extends Containerable> List<SearchItemDefinition> createExtensionDefinitionList(
PrismContainerDefinition<C> objectDef) {

// Map<ItemPath, ItemDefinition> map = new HashMap<>();
List<SearchItemDefinition> searchItemDefinitions = new ArrayList<>();

ItemPath extensionPath = ObjectType.F_EXTENSION;
Expand All @@ -502,7 +501,8 @@ public static <C extends Containerable> List<SearchItemDefinition> createExtensi
return searchItemDefinitions;
}

for (ItemDefinition def : (List<ItemDefinition>) ext.getDefinitions()) {
//noinspection unchecked
for (ItemDefinition<?> def : (List<ItemDefinition<?>>) ext.getDefinitions()) {
ItemPath itemPath = ItemPath.create(extensionPath, def.getItemName());

if (!isIndexed(def)) {
Expand All @@ -521,29 +521,34 @@ public static <C extends Containerable> List<SearchItemDefinition> createExtensi
&& !(def instanceof PrismReferenceDefinition)) {
continue;
}

}

return searchItemDefinitions;
}

public static <C extends Containerable> void addSearchRefDef(PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs, AreaCategoryType category, PageBase pageBase) {
public static <C extends Containerable> void addSearchRefDef(
PrismContainerDefinition<C> containerDef, ItemPath path,
List<SearchItemDefinition> defs, AreaCategoryType category, PageBase pageBase) {
PrismReferenceDefinition refDef = containerDef.findReferenceDefinition(path);
if (refDef == null) {
return;
}
if (pageBase == null) {
defs.add(new SearchItemDefinition(path, refDef, Collections.singletonList(WebComponentUtil.getDefaultRelationOrFail())));
defs.add(new SearchItemDefinition(path, refDef,
Collections.singletonList(WebComponentUtil.getDefaultRelationOrFail())));
return;
}
defs.add(new SearchItemDefinition(path, refDef, WebComponentUtil.getCategoryRelationChoices(category, pageBase)));
defs.add(new SearchItemDefinition(path, refDef,
WebComponentUtil.getCategoryRelationChoices(category, pageBase)));
}

public static <C extends Containerable> void addSearchPropertyDef(PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs) {
public static <C extends Containerable> void addSearchPropertyDef(
PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs) {
addSearchPropertyDef(containerDef, path, defs, null);
}

public static <C extends Containerable> void addSearchPropertyDef(PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs, String key) {
public static <C extends Containerable> void addSearchPropertyDef(
PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs, String key) {
PrismPropertyDefinition propDef = containerDef.findPropertyDefinition(path);
if (propDef == null) {
return;
Expand Down
Expand Up @@ -409,6 +409,9 @@ private void newTaskPerformed(String archetypeOid, AjaxRequestTarget target) {
taskType.getAssignment().add(ObjectTypeUtil.createAssignmentTo(archetypeOid, ObjectTypes.ARCHETYPE, getPrismContext()));
}
taskType.setOwnerRef(ObjectTypeUtil.createObjectRef(SecurityUtils.getPrincipalUser().getOid(), ObjectTypes.USER));
taskType.setObjectRef(
ObjectTypeUtil.createObjectRef(
getResourceType()));

WebComponentUtil.dispatchToObjectDetailsPage(taskType.asPrismObject(), this);
}
Expand Down
Expand Up @@ -95,6 +95,7 @@ protected UserProfileStorage.TableId getTableId() {
return UserProfileStorage.TableId.TABLE_TASKS;
}
};
tablePanel.setRootTasksOnly(true);
add(tablePanel);
}

Expand Down

0 comments on commit 8be9c17

Please sign in to comment.