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 Mar 31, 2023
2 parents 47b6a25 + 0b4bb48 commit 07de580
Show file tree
Hide file tree
Showing 30 changed files with 917 additions and 200 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2320,6 +2320,11 @@ public static String createResourceIcon(PrismObject<ResourceType> object) {
return GuiStyleConstants.CLASS_OBJECT_RESOURCE_ICON + " " + GuiStyleConstants.CLASS_ICON_STYLE_NORMAL;
}

public static boolean isTemplateCategory(@NotNull ResourceType resource) {
return Boolean.TRUE.equals(resource.isTemplate())
|| Boolean.TRUE.equals(resource.isAbstract());
}

public static String createTaskIcon() {
return GuiStyleConstants.CLASS_OBJECT_TASK_ICON + " " + GuiStyleConstants.CLASS_ICON_STYLE_NORMAL;
}
Expand Down Expand Up @@ -4424,7 +4429,7 @@ public static void deleteSyncTokenPerformed(AjaxRequestTarget target, ResourceTy
List<PrismObject<TaskType>> taskList = WebModelServiceUtils.searchObjects(TaskType.class, query, result, pageBase);

if (taskList.size() != 1) {
pageBase.error(pageBase.createStringResource("pageResource.message.invalidTaskSearch"));
pageBase.error(pageBase.createStringResource("pageResource.message.invalidTaskSearch").getString());
} else {
task = taskList.get(0);
PrismProperty<?> property = task.findProperty(ItemPath.create(TaskType.F_EXTENSION, SchemaConstants.SYNC_TOKEN));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

import com.evolveum.midpoint.model.api.authentication.GuiProfiledPrincipal;

import com.evolveum.midpoint.web.page.admin.resources.PageResourceTemplates;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -404,8 +406,14 @@ private MainMenuItem createServicesItems() {
}

private MainMenuItem createResourcesItems() {
MainMenuItem resourceMenu = createMainMenuItem("PageAdmin.menu.top.resources", GuiStyleConstants.CLASS_OBJECT_RESOURCE_ICON_COLORED);
MainMenuItem resourceMenu = createMainMenuItem(
"PageAdmin.menu.top.resources", GuiStyleConstants.CLASS_OBJECT_RESOURCE_ICON_COLORED);

resourceMenu.addMenuItem(new MenuItem("PageAdmin.menu.top.resource.templates.list",
GuiStyleConstants.CLASS_OBJECT_RESOURCE_ICON, PageResourceTemplates.class));

createBasicAssignmentHolderMenuItems(resourceMenu, PageTypes.RESOURCE);

resourceMenu.addMenuItem(new MenuItem("PageAdmin.menu.top.resources.import", PageImportResource.class));
resourceMenu.addMenuItem(new MenuItem("PageAdmin.menu.top.connectorHosts.list", PageConnectorHosts.class));
return resourceMenu;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class ProcessedObjectTypeSearchItemWrapper extends ChoicesSearchItemWrapp
public ProcessedObjectTypeSearchItemWrapper() {
super(SimulationResultProcessedObjectType.F_TYPE,
WebComponentUtil.createObjectTypesList().stream()
.map(o -> new DisplayableValueImpl<QName>(o.getTypeQName(), WebComponentUtil.createEnumResourceKey(o)))
.map(o -> new DisplayableValueImpl<>(o.getTypeQName(), WebComponentUtil.createEnumResourceKey(o)))
.collect(Collectors.toList()));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,15 @@ public boolean isEnabled() {
}

protected void newAssignmentClickPerformed(AjaxRequestTarget target) {
if (hasTargetObject()) {
selectNewAssignmentTargetObjectPerformed(target);
} else {
List<PrismContainerValueWrapper<AssignmentType>> newAssignmentList = addSelectedAssignmentsPerformed(target);
itemDetailsPerformed(target, newAssignmentList);
}
}

private void selectNewAssignmentTargetObjectPerformed(AjaxRequestTarget target) {
AssignmentPopup popupPanel = new AssignmentPopup(getPageBase().getMainPopupBodyId(), createAssignmentPopupModel()) {

private static final long serialVersionUID = 1L;
Expand All @@ -393,6 +402,8 @@ protected void newAssignmentClickPerformed(AjaxRequestTarget target) {
protected void addPerformed(AjaxRequestTarget target, List<AssignmentType> newAssignmentsList) {
super.addPerformed(target, newAssignmentsList);
addSelectedAssignmentsPerformed(target, newAssignmentsList);
AbstractAssignmentTypePanel.this.refreshTable(target);
getPageBase().hideMainPopup(target);
}

@Override
Expand Down Expand Up @@ -425,6 +436,10 @@ protected <F extends AssignmentHolderType> PrismObject<F> getFocusObject() {
getPageBase().showMainPopup(popupPanel, target);
}

protected boolean hasTargetObject() {
return true;
}

protected List<ObjectTypes> getObjectTypesList() {
QName assignmentType = getAssignmentType();
if (assignmentType == null) {
Expand Down Expand Up @@ -457,34 +472,49 @@ protected ObjectFilter getSubtypeFilter() {

protected abstract QName getAssignmentType();

protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<AssignmentType> newAssignmentsList) {
private List<PrismContainerValueWrapper<AssignmentType>> addSelectedAssignmentsPerformed(AjaxRequestTarget target) {
return addSelectedAssignmentsPerformed(target, Collections.singletonList(new AssignmentType()));
}

private List<PrismContainerValueWrapper<AssignmentType>> addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<AssignmentType> newAssignmentsList) {
if (CollectionUtils.isEmpty(newAssignmentsList)) {
warn(getPageBase().getString("AssignmentTablePanel.message.noAssignmentSelected"));
target.add(getPageBase().getFeedbackPanel());
return;
return new ArrayList<>();
}
boolean isAssignmentsLimitReached = isAssignmentsLimitReached(newAssignmentsList.size(), true);
if (isAssignmentsLimitReached) {
warn(getPageBase().getString("AssignmentPanel.assignmentsLimitReachedWarning", assignmentsRequestsLimit));
target.add(getPageBase().getFeedbackPanel());
return;
return new ArrayList<>();
}

List<PrismContainerValueWrapper<AssignmentType>> newAssignmentList = new ArrayList<>();
newAssignmentsList.forEach(assignment -> {

PrismContainerValue<AssignmentType> newAssignment = getContainerModel().getObject().getItem().createNewValue();
AssignmentType assignmentType = newAssignment.asContainerable();

if (assignment.getConstruction() != null && assignment.getConstruction().getResourceRef() != null) {
assignmentType.setConstruction(assignment.getConstruction());
} else if (!hasTargetObject()) {
initializeNewAssignmentData(newAssignment, assignmentType, target);
} else {
assignmentType.setTargetRef(assignment.getTargetRef());
}
AbstractAssignmentTypePanel.this.createNewItemContainerValueWrapper(newAssignment, getContainerModel().getObject(),
target);
newAssignmentList.add(AbstractAssignmentTypePanel.this.createNewItemContainerValueWrapper(newAssignment,
getContainerModel().getObject(), target));
});
AbstractAssignmentTypePanel.this.refreshTable(target);
getPageBase().hideMainPopup(target);
return newAssignmentList;
}

/**
* should be used for such cases as creation of the assignment/inducement without any target reference object
* (e.g. focus mapping or policy rule)
* @return
*/
protected void initializeNewAssignmentData(PrismContainerValue<AssignmentType> newAssignmentValue,
AssignmentType assignmentObject, AjaxRequestTarget target) {
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@
import com.evolveum.midpoint.gui.impl.component.search.wrapper.FilterableSearchItemWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.component.AssignmentHolderAssignmentPanel;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
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 org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;

import javax.xml.namespace.QName;
Expand Down Expand Up @@ -71,4 +74,22 @@ protected List<PrismContainerValueWrapper<AssignmentType>> customPostSearch(
}
return super.customPostSearch(list);
}

@Override
protected boolean hasTargetObject() {
return false;
}

@Override
protected void initializeNewAssignmentData(PrismContainerValue<AssignmentType> newAssignmentValue,
AssignmentType assignmentObject, AjaxRequestTarget target) {
try {
newAssignmentValue.findOrCreateContainer(AssignmentType.F_FOCUS_MAPPINGS);
assignmentObject.setFocusMappings(new MappingsType());
} catch (SchemaException e) {
LOGGER.error("Cannot create focus mappings assignment: {}", e.getMessage(), e);
getSession().error("Cannot create focus mappings assignment");
target.add(getPageBase().getFeedbackPanel());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,23 +74,23 @@ protected UserProfileStorage.TableId getTableId() {
}

@Override
protected void newAssignmentClickPerformed(AjaxRequestTarget target) {
PrismContainerValue<AssignmentType> newAssignment = getContainerModel().getObject().getItem().createNewValue();
AssignmentType assignmentType = newAssignment.asContainerable();
protected boolean hasTargetObject() {
return false;
}

@Override
protected void initializeNewAssignmentData(PrismContainerValue<AssignmentType> newAssignmentValue,
AssignmentType assignmentObject, AjaxRequestTarget target) {
try {
newAssignment.findOrCreateContainer(AssignmentType.F_POLICY_RULE);
assignmentType.setPolicyRule(new PolicyRuleType());
newAssignmentValue.findOrCreateContainer(AssignmentType.F_POLICY_RULE);
assignmentObject.setPolicyRule(new PolicyRuleType());
} catch (SchemaException e) {
LOGGER.error("Cannot create policy rule assignment: {}", e.getMessage(), e);
getSession().error("Cannot create policyRule assignment.");
target.add(getPageBase().getFeedbackPanel());
return;
}
PrismContainerValueWrapper<AssignmentType> newAssignmentWrapper = createNewItemContainerValueWrapper(newAssignment, getContainerModel().getObject(), target);
itemDetailsPerformed(target, Collections.singletonList(newAssignmentWrapper));
}


protected ObjectQuery createCustomizeQuery() {
return getPageBase().getPrismContext().queryFor(AssignmentType.class)
.exists(AssignmentType.F_POLICY_RULE).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,17 @@
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component.AbstractRoleInducementPanel;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
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 org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;

import java.util.List;
Expand All @@ -25,6 +30,7 @@
childOf = AbstractRoleInducementPanel.class,
display = @PanelDisplay(label = "AssignmentType.focusMappings", order = 80))
public class FocusMappingsInducementsPanel<AR extends AbstractRoleType> extends AbstractInducementPanel<AR> {
private static final Trace LOGGER = TraceManager.getTrace(FocusMappingsInducementsPanel.class);

public FocusMappingsInducementsPanel(String id, IModel<PrismObjectWrapper<AR>> model, ContainerPanelConfigurationType config) {
super(id, model, config);
Expand Down Expand Up @@ -53,4 +59,22 @@ protected List<PrismContainerValueWrapper<AssignmentType>> customPostSearch(
}
return super.customPostSearch(list);
}

@Override
protected boolean hasTargetObject() {
return false;
}

@Override
protected void initializeNewAssignmentData(PrismContainerValue<AssignmentType> newAssignmentValue,
AssignmentType assignmentObject, AjaxRequestTarget target) {
try {
newAssignmentValue.findOrCreateContainer(AssignmentType.F_FOCUS_MAPPINGS);
assignmentObject.setFocusMappings(new MappingsType());
} catch (SchemaException e) {
LOGGER.error("Cannot create focus mappings inducement: {}", e.getMessage(), e);
getSession().error("Cannot create focus mappings inducement");
target.add(getPageBase().getFeedbackPanel());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component.AbstractRoleInducementPanel;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
Expand All @@ -20,6 +24,9 @@

import java.util.List;

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

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;

@PanelType(name = "policyRuleInducements")
Expand All @@ -29,6 +36,8 @@
display = @PanelDisplay(label = "AssignmentType.policyRule", icon = GuiStyleConstants.CLASS_POLICY_RULES_ICON, order = 60))
public class PolicyRuleInducementsPanel<AR extends AbstractRoleType> extends AbstractInducementPanel<AR> {

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

public PolicyRuleInducementsPanel(String id, IModel<PrismObjectWrapper<AR>> model, ContainerPanelConfigurationType config) {
super(id, model, config);
}
Expand Down Expand Up @@ -57,4 +66,22 @@ protected List<PrismContainerValueWrapper<AssignmentType>> customPostSearch(
return super.customPostSearch(list);
}

@Override
protected boolean hasTargetObject() {
return false;
}

@Override
protected void initializeNewAssignmentData(PrismContainerValue<AssignmentType> newAssignmentValue,
AssignmentType assignmentObject, AjaxRequestTarget target) {
try {
newAssignmentValue.findOrCreateContainer(AssignmentType.F_POLICY_RULE);
assignmentObject.setPolicyRule(new PolicyRuleType());
} catch (SchemaException e) {
LOGGER.error("Cannot create policy rule inducement: {}", e.getMessage(), e);
getSession().error("Cannot create policyRule inducement.");
target.add(getPageBase().getFeedbackPanel());
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<wicket:extend>
<fieldset class="objectButtons">
<legend><wicket:message key="CaseOperationalButtonsPanel.buttons.case" /></legend>
<a class="mr-2 btn" wicket:id="caseButtons"/>
</fieldset>
<wicket:enclosure child="stopProcess">
<fieldset class="objectButtons gap-2">
<legend>
<wicket:message key="CaseOperationalButtonsPanel.buttons.case"/>
</legend>
<a class="btn btn-default btn-sm" wicket:id="stopProcess"/>
</fieldset>
</wicket:enclosure>
</wicket:extend>
</wicket:panel>
</html>

0 comments on commit 07de580

Please sign in to comment.