Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Oct 17, 2022
2 parents ae7408f + 2c03e5a commit 64787cb
Show file tree
Hide file tree
Showing 7 changed files with 165 additions and 19 deletions.
22 changes: 22 additions & 0 deletions gui/admin-gui/src/frontend/js/midpoint-theme.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,28 @@ export default class MidPointTheme {
});
});

jQuery(function ($) {
$(".word-break-longer-text").css("word-break", function(index, origValue){

var textOfColumn = $(".word-break-longer-text")[index].innerText;
if (textOfColumn != '' && textOfColumn != ' ') {
var numberOfChars = 15;
var controlValue = numberOfChars;
var indexOfSpace = textOfColumn.indexOf(' ');

while (indexOfSpace == (controlValue - numberOfChars)) {
controlValue = controlValue + 1 + indexOfSpace;
indexOfSpace = textOfColumn.indexOf(' ', (indexOfSpace + 1));
}

if (indexOfSpace + 1 != textOfColumn.length && textOfColumn.length > controlValue) {
return "break-word";
}
}
return "inherit";
});
});

jQuery(function ($) {
$(document).on("click", ".compositedButton[data-toggle='tooltip']", function (e, t) {
var parent = $(this).closest('.modal-dialog-content');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTypeSearchItemConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxModeType;

import org.apache.commons.lang3.StringUtils;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -28,6 +30,9 @@ public class ObjectTypeSearchItemWrapper<C extends Containerable> extends Abstra
private boolean allowAllTypesSearch;

private List<Class<C>> supportedTypeList = new ArrayList<>();
private String name;
private String help;
private boolean visible = true;

private QName defaultObjectType;
public ObjectTypeSearchItemWrapper(ObjectTypeSearchItemConfigurationType config) {
Expand Down Expand Up @@ -88,18 +93,20 @@ public void setDefaultObjectType(QName defaultObjectType) {

@Override
public String getName() {
// if (config != null && config.getDisplay() != null && config.getDisplay().getLabel() != null){
// return WebComponentUtil.getTranslatedPolyString(config.getDisplay().getLabel());
// }
return PageBase.createStringResourceStatic("ContainerTypeSearchItem.name").getString();
return StringUtils.isNotEmpty(name) ? name : PageBase.createStringResourceStatic("ContainerTypeSearchItem.name").getString();
}

public void setName(String name) {
this.name = name;
}

@Override
public String getHelp() {
// if (config != null && config.getDisplay() != null && config.getDisplay().getHelp() != null){
// return WebComponentUtil.getTranslatedPolyString(config.getDisplay().getHelp());
// }
return "";
return StringUtils.isNotEmpty(help) ? help : "";
}

public void setHelp(String help) {
this.help = help;
}

@Override
Expand All @@ -119,7 +126,11 @@ public boolean isApplyFilter(SearchBoxModeType searchBoxMode) {

@Override
public boolean isVisible() {
return true;
return visible;
}

public void setVisible(boolean visible) {
this.visible = visible;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -630,14 +630,25 @@ private static boolean objectTypeSearchItemWrapperExists(List<AbstractSearchItem
}
public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWrapper searchConfigWrapper, SearchBoxConfigurationType config) {
if (config.getObjectTypeConfiguration() != null) {
searchConfigWrapper.getItemsList().add(new ObjectTypeSearchItemWrapper(config.getObjectTypeConfiguration()));
ObjectTypeSearchItemWrapper objectTypeSearchItemWrapper = new ObjectTypeSearchItemWrapper(config.getObjectTypeConfiguration());
if (config.getObjectTypeConfiguration().getDisplay() != null) {
objectTypeSearchItemWrapper.setName(WebComponentUtil.getTranslatedPolyString(config.getObjectTypeConfiguration().getDisplay().getLabel()));
objectTypeSearchItemWrapper.setHelp(WebComponentUtil.getTranslatedPolyString(config.getObjectTypeConfiguration().getDisplay().getHelp()));
}
if (config.getObjectTypeConfiguration().getVisibility() != null) {
objectTypeSearchItemWrapper.setVisible(WebComponentUtil.getElementVisibility(config.getObjectTypeConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(objectTypeSearchItemWrapper);
}
if (config.getRelationConfiguration() != null) {
RelationSearchItemWrapper relation = new RelationSearchItemWrapper(searchConfigWrapper);
if (config.getRelationConfiguration().getDisplay() != null) {
relation.setName(WebComponentUtil.getTranslatedPolyString(config.getRelationConfiguration().getDisplay().getLabel()));
relation.setHelp(WebComponentUtil.getTranslatedPolyString(config.getRelationConfiguration().getDisplay().getHelp()));
}
if (config.getRelationConfiguration().getVisibility() != null) {
relation.setVisible(WebComponentUtil.getElementVisibility(config.getRelationConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(relation);
}

Expand All @@ -647,6 +658,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
indirect.setName(WebComponentUtil.getTranslatedPolyString(config.getIndirectConfiguration().getDisplay().getLabel()));
indirect.setHelp(WebComponentUtil.getTranslatedPolyString(config.getIndirectConfiguration().getDisplay().getHelp()));
}
if (config.getIndirectConfiguration().getVisibility() != null) {
indirect.setVisible(WebComponentUtil.getElementVisibility(config.getIndirectConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(indirect);
}

Expand All @@ -656,6 +670,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
scope.setName(WebComponentUtil.getTranslatedPolyString(config.getScopeConfiguration().getDisplay().getLabel()));
scope.setHelp(WebComponentUtil.getTranslatedPolyString(config.getScopeConfiguration().getDisplay().getHelp()));
}
if (config.getScopeConfiguration().getVisibility() != null) {
scope.setVisible(WebComponentUtil.getElementVisibility(config.getScopeConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(scope);
}
if (config.getProjectConfiguration() != null) {
Expand All @@ -664,6 +681,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
project.setName(WebComponentUtil.getTranslatedPolyString(config.getProjectConfiguration().getDisplay().getLabel()));
project.setHelp(WebComponentUtil.getTranslatedPolyString(config.getProjectConfiguration().getDisplay().getHelp()));
}
if (config.getProjectConfiguration().getVisibility() != null) {
project.setVisible(WebComponentUtil.getElementVisibility(config.getProjectConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(project);
}
if (config.getTenantConfiguration() != null) {
Expand All @@ -672,6 +692,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
tenant.setName(WebComponentUtil.getTranslatedPolyString(config.getTenantConfiguration().getDisplay().getLabel()));
tenant.setHelp(WebComponentUtil.getTranslatedPolyString(config.getTenantConfiguration().getDisplay().getHelp()));
}
if (config.getTenantConfiguration().getVisibility() != null) {
tenant.setVisible(WebComponentUtil.getElementVisibility(config.getTenantConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(tenant);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.repeater.Item;
Expand Down Expand Up @@ -48,7 +49,9 @@ public SelectableRowItem(String id, int index, IModel<T> model) {
@Override
protected Item<IColumn<T, String>> newCellItem(String id, int index, IModel<IColumn<T, String>> model) {
Item item = super.newCellItem(id, index, model);
item.add(new AttributeModifier("style", "word-wrap: break-word;"));
item.add(AttributeAppender.append("class", "word-break-longer-text"));
item.add(AttributeAppender.append("style", "word-wrap: break-word !important;"));

return item;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public void createOrUpdateCase(
createCase(resourceObject, resource, preFocus, now, task, result);
recordCaseCreationInShadow(resourceObject, now, result);
} else {
updateCase(aCase, preFocus, result);
updateCase(aCase, resourceObject, preFocus, result);
}
}

Expand Down Expand Up @@ -184,20 +184,24 @@ private void recordCaseCreationInShadow(ShadowType shadow, XMLGregorianCalendar
}

private void updateCase(
CaseType aCase, FocusType preFocus, OperationResult result)
CaseType aCase, @NotNull ShadowType resourceObject, FocusType preFocus, OperationResult result)
throws SchemaException {
CaseCorrelationContextType ctx = aCase.getCorrelationContext();
ObjectReferenceType preFocusRef = createObjectRefWithFullObject(preFocus);
if (ctx != null
&& java.util.Objects.equals(ctx.getPreFocusRef(), preFocusRef)) { // TODO is this comparison correct?
LOGGER.trace("No need to update the case {}", aCase);
return;
}
List<ItemDelta<?, ?>> itemDeltas = prismContext.deltaFor(CaseType.class)
.item(CaseType.F_CORRELATION_CONTEXT, CaseCorrelationContextType.F_PRE_FOCUS_REF)
.replace(preFocusRef)
.item(CaseType.F_TARGET_REF)
.replace() // The replacement of embedded object does not work right now ... so delete + add is used
.asItemDeltas();
modifyCase(aCase, itemDeltas, result);

List<ItemDelta<?, ?>> itemDeltas2 = prismContext.deltaFor(CaseType.class)
.item(CaseType.F_TARGET_REF)
.replace(createObjectRefWithFullObject(resourceObject))
.asItemDeltas();
modifyCase(aCase, itemDeltas2, result);

// TODO what about e.g. the correlation schema and other aspects?
}

private void modifyCase(CaseType aCase, List<ItemDelta<?, ?>> itemDeltas, OperationResult result) throws SchemaException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.evolveum.midpoint.provisioning.api.ProvisioningService;
import com.evolveum.midpoint.provisioning.api.Resource;
import com.evolveum.midpoint.repo.api.PreconditionViolationException;
import com.evolveum.midpoint.schema.constants.MidPointConstants;
import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceObjectTypeIdentification;

Expand Down Expand Up @@ -136,6 +137,10 @@ public ImportSingleAccountRequestBuilder withTypeIdentification(ResourceObjectTy
return this;
}

public ImportSingleAccountRequestBuilder withNamingAttribute(String localName) {
return withNamingAttribute(new QName(MidPointConstants.NS_RI, localName));
}

public ImportSingleAccountRequestBuilder withNamingAttribute(QName namingAttribute) {
this.namingAttribute = namingAttribute;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
package com.evolveum.midpoint.testing.story.correlation;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.repo.api.PreconditionViolationException;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.test.CsvResource;
Expand All @@ -20,9 +21,15 @@
import org.jetbrains.annotations.NotNull;
import org.testng.annotations.Test;

import javax.xml.namespace.QName;
import java.io.File;
import java.io.IOException;
import java.util.Objects;

import static com.evolveum.midpoint.schema.constants.MidPointConstants.NS_RI;

import static org.assertj.core.api.Assertions.assertThat;

/**
* Tests internal correlation in the most basic case:
*
Expand Down Expand Up @@ -325,4 +332,75 @@ public void test230ResolveNobody() throws CommonException {
.assertCorrelationSituation(CorrelationSituationType.NO_OWNER)
.assertSynchronizationSituation(SynchronizationSituationType.UNMATCHED);
}

/**
* Check that the case is updated when import is repeated.
*/
@Test
public void test240ReimportingAccount() throws CommonException, IOException, PreconditionViolationException {
Task task = getTestTask();
OperationResult result = task.getResult();

given("new account is added and imported");
getTargetResource().append("mx1,Martin,Black,,,,");
importSingleAccountRequest()
.withResourceOid(getTargetResource().oid)
.withNamingAttribute("login")
.withNameValue("mx1")
.execute(result);

PrismObject<ShadowType> firstShadow = findShadowByPrismName("mx1", getTargetResource().getObject(), result);
assertShadow(firstShadow, "first")
.display()
.assertCorrelationSituation(CorrelationSituationType.UNCERTAIN)
.assertPotentialOwnerOptions(3); // 2 existing ones (surname black) + 1 new

CaseType firstCase = getOpenCaseForAccount("mx1", result);
assertCase(firstCase, "first")
.display()
.assertTargetRef(firstShadow.getOid(), ShadowType.COMPLEX_TYPE);

//noinspection unchecked
PrismObject<ShadowType> embeddedFirstShadow =
(PrismObject<ShadowType>) firstCase.getTargetRef().asReferenceValue().getObject();
assertThat(embeddedFirstShadow).as("embedded shadow").isNotNull();
assertShadow(embeddedFirstShadow, "first (embedded)")
.display()
.assertCorrelationSituation(CorrelationSituationType.UNCERTAIN)
.assertPotentialOwnerOptions(3) // 2 existing ones (surname black) + 1 new
.attributes()
.assertValueRaw(new QName(NS_RI, "sn"), "Black");

when("account is updated and re-imported");
getTargetResource().replaceLine("mx1,.*", "mx1,Martin,Green,,,,");
importSingleAccountRequest()
.withResourceOid(getTargetResource().oid)
.withNamingAttribute("login")
.withNameValue("mx1")
.execute(result);

then("case is updated");

PrismObject<ShadowType> secondShadow = findShadowByPrismName("mx1", getTargetResource().getObject(), result);
assertShadow(secondShadow, "second")
.display()
.assertCorrelationSituation(CorrelationSituationType.UNCERTAIN)
.assertPotentialOwnerOptions(2); // 1 existing one (surname green) + 1 new

CaseType secondCase = getOpenCaseForAccount("mx1", result);
assertCase(secondCase, "second")
.display()
.assertTargetRef(secondShadow.getOid(), ShadowType.COMPLEX_TYPE); // most probably the same OID as the 1st one

//noinspection unchecked
PrismObject<ShadowType> embeddedSecondShadow =
(PrismObject<ShadowType>) secondCase.getTargetRef().asReferenceValue().getObject();
assertThat(embeddedSecondShadow).as("embedded shadow").isNotNull();
assertShadow(embeddedSecondShadow, "second (embedded)")
.display()
.assertCorrelationSituation(CorrelationSituationType.UNCERTAIN)
.assertPotentialOwnerOptions(2) // 1 existing ones (surname green) + 1 new
.attributes()
.assertValueRaw(new QName(NS_RI, "sn"), "Green");
}
}

0 comments on commit 64787cb

Please sign in to comment.