Skip to content

Commit

Permalink
MID-8842 ninja - boundary processor
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jul 24, 2023
1 parent 9149974 commit 38c40e1
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright (C) 2010-2023 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.schema.validator.processor;

import java.util.List;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.validator.UpgradeObjectProcessor;
import com.evolveum.midpoint.schema.validator.UpgradePhase;
import com.evolveum.midpoint.schema.validator.UpgradePriority;
import com.evolveum.midpoint.schema.validator.UpgradeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.BoundarySpecificationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.StringWorkSegmentationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;

@SuppressWarnings("unused")
public class BoundaryProcessor implements UpgradeObjectProcessor<TaskType> {

@Override
public UpgradePhase getPhase() {
return UpgradePhase.BEFORE;
}

@Override
public UpgradePriority getPriority() {
return UpgradePriority.NECESSARY;
}

@Override
public UpgradeType getType() {
return UpgradeType.SEAMLESS;
}

@Override
public boolean isApplicable(PrismObject<?> object, ItemPath path) {
return matchParentType(object, path, StringWorkSegmentationType.class);
}

@Override
public boolean process(PrismObject<TaskType> object, ItemPath path) throws Exception {
StringWorkSegmentationType segmentation = getItemParent(object, path);
if (segmentation == null) {
return false;
}

List<BoundarySpecificationType> boundaries = segmentation.getBoundary();
List<String> chars = segmentation.getBoundaryCharacters();
int i = 1;
for (String c : chars) {
BoundarySpecificationType boundary = new BoundarySpecificationType()
.characters(c)
.position(i++);
boundaries.add(boundary);
}

chars.clear();

return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
Expand Down Expand Up @@ -70,4 +72,28 @@ default <O extends ObjectType> boolean matchObjectTypeAndPathTemplate(

return true;
}

default <O extends Containerable> boolean matchParentType(PrismObject<?> object, ItemPath path, Class<O> type) {
Item item = object.findItem(path);
if (item == null) {
return false;
}

PrismContainerValue value = item.getParent();
return type.isAssignableFrom(value.getRealValue().getClass());
}

default <C extends Containerable> C getItemParent(PrismObject<?> object, ItemPath path) {
Item item = object.findItem(path);
if (item == null) {
return null;
}

PrismContainerValue<C> value = item.getParent();
if (value == null) {
return null;
}

return value.asContainerable();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ public void test70Archetype() throws Exception {
public void test80TaskRecomputation() throws Exception {
testUpgradeValidator("task-recomputation.xml", result -> {
Assertions.assertThat(result.getItems())
.hasSize(1);
.hasSize(2);

Assertions.assertThat(result.hasChanges()).isTrue();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,23 @@
</objects>
</recomputation>
</work>
<distribution>
<buckets>
<stringSegmentation>
<boundary>
<position>1</position>
<characters>a</characters>
</boundary>
<boundary>
<position>2</position>
<characters>\0-\1\a-\c</characters>
</boundary>
<boundary>
<position>3</position>
<characters>01abc</characters>
</boundary>
</stringSegmentation>
</buckets>
</distribution>
</activity>
</task>
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,14 @@
</executionOptions>
</recomputation>
</work>
<distribution>
<buckets>
<stringSegmentation>
<boundaryCharacters>a</boundaryCharacters>
<boundaryCharacters>\0-\1\a-\c</boundaryCharacters>
<boundaryCharacters>01abc</boundaryCharacters>
</stringSegmentation>
</buckets>
</distribution>
</activity>
</task>

0 comments on commit 38c40e1

Please sign in to comment.