Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Aug 17, 2023
2 parents e4b63de + 44d2544 commit 082ea87
Show file tree
Hide file tree
Showing 45 changed files with 775 additions and 271 deletions.
6 changes: 3 additions & 3 deletions gui/admin-gui/src/frontend/scss/midpoint.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1752,8 +1752,8 @@ th.debug-list-buttons {

.request-access-wizard {
& .simple-tile {
width: 250px;
height: 250px;
width: 220px;
height: 220px;
}

& .role-catalog-tiles-table .catalog-tile-panel {
Expand Down Expand Up @@ -1847,7 +1847,7 @@ th.debug-list-buttons {

.colored-form-#{$color}, .colored-form-#{$color}:hover, .colored-form-#{$color}:active, .colored-form-#{$color}:focus {
color: $value;
background-color: mix(#ffffff00, $value, 85%);
background-color: mix(#ffffff, $value, 85%);
border-color: $value;

option {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,6 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.impl.page.admin.org.PageOrgHistory;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRoleHistory;
import com.evolveum.midpoint.gui.impl.page.admin.service.PageServiceHistory;

import com.evolveum.midpoint.gui.impl.page.admin.user.PageUserHistory;

import com.evolveum.midpoint.gui.impl.page.login.PageLogin;
import com.evolveum.midpoint.model.api.ActivityCustomization;
import com.evolveum.midpoint.prism.delta.*;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.security.MidPointAuthWebSession;
import com.evolveum.midpoint.web.component.dialog.Popupable;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -99,6 +85,7 @@
import com.evolveum.midpoint.gui.api.model.ReadOnlyModel;
import com.evolveum.midpoint.gui.api.page.PageAdminLTE;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.*;
import com.evolveum.midpoint.gui.impl.GuiChannel;
import com.evolveum.midpoint.gui.impl.component.data.provider.BaseSortableDataProvider;
Expand All @@ -120,14 +107,19 @@
import com.evolveum.midpoint.gui.impl.page.admin.objectcollection.PageObjectCollection;
import com.evolveum.midpoint.gui.impl.page.admin.objecttemplate.PageObjectTemplate;
import com.evolveum.midpoint.gui.impl.page.admin.org.PageOrg;
import com.evolveum.midpoint.gui.impl.page.admin.org.PageOrgHistory;
import com.evolveum.midpoint.gui.impl.page.admin.report.PageReport;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageResource;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageShadow;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRole;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRoleHistory;
import com.evolveum.midpoint.gui.impl.page.admin.service.PageService;
import com.evolveum.midpoint.gui.impl.page.admin.service.PageServiceHistory;
import com.evolveum.midpoint.gui.impl.page.admin.simulation.PageSimulationResult;
import com.evolveum.midpoint.gui.impl.page.admin.task.PageTask;
import com.evolveum.midpoint.gui.impl.page.admin.user.PageUser;
import com.evolveum.midpoint.gui.impl.page.admin.user.PageUserHistory;
import com.evolveum.midpoint.gui.impl.page.login.PageLogin;
import com.evolveum.midpoint.gui.impl.page.self.PageOrgSelfProfile;
import com.evolveum.midpoint.gui.impl.page.self.PageRoleSelfProfile;
import com.evolveum.midpoint.gui.impl.page.self.PageServiceSelfProfile;
Expand All @@ -143,6 +135,10 @@
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.crypto.EncryptionException;
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.prism.delta.ChangeType;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.delta.PropertyDelta;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ItemPathCollectionsUtil;
Expand Down Expand Up @@ -186,6 +182,7 @@
import com.evolveum.midpoint.web.component.data.SelectableDataTable;
import com.evolveum.midpoint.web.component.data.Table;
import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.dialog.Popupable;
import com.evolveum.midpoint.web.component.input.DisplayableValueChoiceRenderer;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
Expand All @@ -208,6 +205,7 @@
import com.evolveum.midpoint.web.page.admin.users.PageUsers;
import com.evolveum.midpoint.web.page.admin.workflow.dto.EvaluatedTriggerGroupDto;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.security.MidPointAuthWebSession;
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.web.util.DateValidator;
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
Expand All @@ -231,6 +229,8 @@ public final class WebComponentUtil {

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

private static final String DEFAULT_RELATION_ICON = "fa-solid fa-user";

private static final String KEY_BOOLEAN_NULL = "Boolean.NULL";
private static final String KEY_BOOLEAN_TRUE = "Boolean.TRUE";
private static final String KEY_BOOLEAN_FALSE = "Boolean.FALSE";
Expand Down Expand Up @@ -2106,6 +2106,68 @@ private static PolyStringType getRelationLabel(RelationDefinitionType definition
return displayType.getLabel();
}

public static RelationDefinitionType getRelationDefinition(QName relation, List<RelationDefinitionType> relations) {
if (relations == null) {
return null;
}

for (RelationDefinitionType rel : relations) {
if (relation.equals(rel.getRef())) {
return rel;
}
}

return null;
}

public static String getRelationIcon(QName relation, List<RelationDefinitionType> relations) {
final String defaultIcon = getDefaultRelationIcon(relation);

RelationDefinitionType rel = getRelationDefinition(relation, relations);
if (rel == null || rel.getDisplay() == null) {
return defaultIcon;
}

DisplayType display = rel.getDisplay();

IconType it = display.getIcon();
if (it == null || it.getCssClass() == null) {
return defaultIcon;
}

return it.getCssClass();
}

public static PolyString getRelationLabel(QName relation, List<RelationDefinitionType> relations) {
final PolyString defaultLabel = new PolyString(relation.getLocalPart());

RelationDefinitionType rel = getRelationDefinition(relation, relations);
if (rel == null) {
return defaultLabel;
}

DisplayType display = rel.getDisplay();
if (display == null || display.getLabel() == null) {
return defaultLabel;
}

return display.getLabel().toPolyString();
}

public static String getDefaultRelationIcon(QName name) {
if (SchemaConstants.ORG_DEFAULT.equals(name)) {
return "fa-solid fa-user";
} else if (SchemaConstants.ORG_MANAGER.equals(name)) {
return "fa-solid fa-user-tie";
} else if (SchemaConstants.ORG_APPROVER.equals(name)) {
return "fa-solid fa-clipboard-check";
} else if (SchemaConstants.ORG_OWNER.equals(name)) {
return "fa-solid fa-crown";
}

return DEFAULT_RELATION_ICON;
}

public static String createUserIcon(PrismObject<UserType> object) {
UserType user = object.asObjectable();

Expand Down Expand Up @@ -2661,6 +2723,7 @@ public static Class<? extends PageBase> getNewlyCreatedObjectPage(Class<? extend
public static Class<? extends PageBase> getObjectListPage(Class<? extends ObjectType> type) {
return OBJECT_LIST_PAGE_MAP.get(type);
}

public static Class<? extends PageBase> getPageHistoryDetailsPage(Class<?> page) {
return OBJECT_HISTORY_PAGE_MAP.get(page);
}
Expand Down Expand Up @@ -5674,7 +5737,7 @@ public static String createMappingIcon(PrismContainerValueWrapper<? extends Cont

if (object.getParentContainerValue(ResourceActivationDefinitionType.class) != null
|| object.getParentContainerValue(ResourcePasswordDefinitionType.class) != null) {
if (QNameUtil.match(def.getTypeName(), MappingType.COMPLEX_TYPE)){
if (QNameUtil.match(def.getTypeName(), MappingType.COMPLEX_TYPE)) {

PrismContainerValueWrapper parent =
object.getParentContainerValue(ResourceBidirectionalMappingType.class);
Expand Down Expand Up @@ -5730,7 +5793,7 @@ public static LookupTableType loadLookupTable(String lookupTableOid, PageBase pa
PrismObject<LookupTableType> prismLookupTable =
WebModelServiceUtils.loadObject(LookupTableType.class, lookupTableOid, options, pageBase, task, result);
if (prismLookupTable != null) {
return prismLookupTable.asObjectable();
return prismLookupTable.asObjectable();
}
return null;
}
Expand All @@ -5755,4 +5818,13 @@ public static <O extends AssignmentHolderType> List<String> getArchetypeOidsList
}
return oidsList;
}

public static <C extends Containerable> LoadableModel<PrismContainerDefinition<C>> getContainerDefinitionModel(Class<C> clazz) {
return new LoadableModel<>() {
@Override
protected PrismContainerDefinition<C> load() {
return PrismContext.get().getSchemaRegistry().findContainerDefinitionByCompileTimeClass(clazz);
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,20 @@ protected void populateItem(ListItem<Breadcrumb> item) {

RepeatingView buttons = new RepeatingView(ID_BUTTONS);

AjaxIconButton back = new AjaxIconButton(
buttons.newChildId(),
Model.of("fa fa-right-from-bracket"),
getExitLabel()) {
@Override
public void onClick(AjaxRequestTarget target) {
onExitPerformed(target);
}
};
back.showTitleAsLabel(true);
back.add(new VisibleBehaviour(() -> isBackButtonVisible()));
back.add(AttributeAppender.append("class", "btn text-primary"));
buttons.add(back);

AjaxIconButton exit = new AjaxIconButton(
buttons.newChildId(),
Model.of("fa fa-right-from-bracket"),
Expand Down Expand Up @@ -167,6 +181,10 @@ public void onClick(AjaxRequestTarget target) {
buttons.add(saveButton);
}

protected boolean isBackButtonVisible() {
return false;
}

protected String getCssForWidthOfFeedbackPanel() {
return "col-12";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,13 @@ protected List<Tile<T>> load() {
}

protected void addDefaultTile(List<Tile<T>> list) {
list.add(createDefaultTile(getObjectType()));
if (addDefaultTile()) {
list.add(createDefaultTile(getObjectType()));
}
}

protected boolean addDefaultTile() {
return true;
}

@Override
Expand Down Expand Up @@ -106,7 +112,7 @@ private Tile<T> createDefaultTile(QName type) {
).getString());
}

private void goToObjectPerformed(QName type) {
protected void goToObjectPerformed(QName type) {
Class<? extends ObjectType> typeClass = WebComponentUtil.qnameToClass(PrismContext.get(), type, ObjectType.class);
if (typeClass == null) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ protected boolean hasUnsavedChanges(AjaxRequestTarget target) {
};
}

protected boolean hasUnsavedChanges(AjaxRequestTarget target) {
public boolean hasUnsavedChanges(AjaxRequestTarget target) {
OperationResult result = new OperationResult(OPERATION_SAVE);

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,12 @@ protected PrismObject<O> getPrismObject() {
return getObjectWrapper().getObject();
}

public void reloadPrismObjectModel() {
PrismObject<O> oldObject = getObjectWrapper().getObjectOld();
reset();
reloadPrismObjectModel(oldObject);
}

public void reloadPrismObjectModel(@NotNull PrismObject<O> newObject) {
prismObjectModel.detach();
if (!savedDeltas.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;

import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
Expand Down Expand Up @@ -89,7 +91,7 @@ protected WebMarkupContainer createIconPanel(String idIcon) {
}

protected VisibleEnableBehaviour getDescriptionBehaviour() {
return VisibleEnableBehaviour.ALWAYS_VISIBLE_ENABLED;
return new VisibleBehaviour(() -> StringUtils.isNotEmpty(tileModel.getObject().getDescription()));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -272,9 +272,7 @@ protected <C extends Containerable, P extends AbstractWizardPanel<C, AHDM>> P sh

setShowedByWizard(true);
getObjectDetailsModels().saveDeltas();
PrismObject<AH> oldObject = getObjectDetailsModels().getObjectWrapper().getObjectOld();
getObjectDetailsModels().reset();
getObjectDetailsModels().reloadPrismObjectModel(oldObject);
getObjectDetailsModels().reloadPrismObjectModel();

IModel<PrismContainerValueWrapper<C>> valueModel = null;

Expand Down Expand Up @@ -399,7 +397,7 @@ public OperationResult onSaveObjectPerformed(AjaxRequestTarget target) {
};
}

private void checkDeltasExitPerformed(SerializableConsumer<AjaxRequestTarget> consumer, AjaxRequestTarget target) {
protected void checkDeltasExitPerformed(SerializableConsumer<AjaxRequestTarget> consumer, AjaxRequestTarget target) {

if (!hasUnsavedChanges(target)) {
consumer.accept(target);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -398,21 +398,28 @@ protected void refresh(AjaxRequestTarget target) {

@Override
protected ActivityDefinitionType createActivityDefinition() throws SchemaException {
SelectExpressionType selectAction = new SelectExpressionType()
.path(new ItemPathType(ItemPath.create(ShadowType.F_NAME)));
ExecuteScriptType script = new ExecuteScriptType()
.scriptingExpression(
new JAXBElement<>(
SchemaConstantsGenerated.SC_SELECT,
SelectExpressionType.class,
selectAction));
return ActivityDefinitionBuilder.create(new IterativeScriptingWorkDefinitionType()
.objects(new ObjectSetType()
.type(ShadowType.COMPLEX_TYPE)
.query(PrismContext.get().getQueryConverter()
.createQueryType(getResourceContentQuery())))
.scriptExecutionRequest(script))
.build();

ResourceObjectTypeDefinition objectType = getSelectedObjectTypeDefinition();
ShadowKindType kind;
String resourceOid;
String intent = null;
if (objectType == null) {
resourceOid = getObjectDetailsModels().getObjectType().getOid();
kind = getKind();
} else {
resourceOid = objectType.getResourceOid();
kind = objectType.getKind();
intent = objectType.getIntent();
}

return ActivityDefinitionBuilder.create(new WorkDefinitionsType()
._import(new ImportWorkDefinitionType()
.resourceObjects(new ResourceObjectSetType()
.resourceRef(resourceOid, ResourceType.COMPLEX_TYPE)
.kind(kind)
.intent(intent))))
.withExecutionMode(ExecutionModeType.NONE)
.build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ private void onTemplateSelectionPerformed(TemplateTile<ResourceTemplate> tile, A
@Nullable PrismObject<ResourceType> resource =
WebModelServiceUtils.loadObject(ResourceType.class, resourceTemplate.getOid(), getPageBase(), task, result);
PrismObject<ResourceType> obj = resource.cloneComplex(CloneStrategy.REUSE);
obj.setOid(null);
obj.asObjectable().template(null);
obj.asObjectable().setName(null);
obj.findOrCreateProperty(ResourceType.F_LIFECYCLE_STATE).addRealValue(SchemaConstants.LIFECYCLE_PROPOSED);
onTemplateSelectionPerformed(obj, target);
return;
Expand Down

0 comments on commit 082ea87

Please sign in to comment.