Skip to content

Commit

Permalink
MID-8842 ninja - new column added to verification csv (upgrade descri…
Browse files Browse the repository at this point in the history
…ption) so processors can add more info
  • Loading branch information
1azyman committed Jul 24, 2023
1 parent 1fff5dc commit 26da59b
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@

package com.evolveum.midpoint.schema.validator;

import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.validator.processor.ProcessorMixin;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

public interface UpgradeObjectProcessor<T extends Objectable> extends ProcessorMixin {

Expand Down Expand Up @@ -40,4 +38,14 @@ default String getIdentifier() {
*/
boolean process(PrismObject<T> object, ItemPath path) throws Exception;

/**
* @param object before processing
* @param path
* @return Returns description of the upgrade if not done automatically.
* Should be single line (might end up in CSV) without any special characters.
* Best approach is to put in short description and link to documentation.
*/
default String upgradeDescription(PrismObject<T> object, ItemPath path) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package com.evolveum.midpoint.schema.validator;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.ClassPathUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import java.lang.reflect.Modifier;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.ClassPathUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

public class UpgradeProcessor {

public static final List<UpgradeObjectProcessor<?>> PROCESSORS;
Expand Down Expand Up @@ -66,6 +66,8 @@ private <T extends ObjectType> UpgradeValidationItem process(PrismObject<T> obje
return null;
}

String description = processor.upgradeDescription((PrismObject) cloned, path);

boolean changed = processor.process((PrismObject) cloned, item.getItemPath());

UpgradeValidationItem result = new UpgradeValidationItem(item);
Expand All @@ -74,6 +76,7 @@ private <T extends ObjectType> UpgradeValidationItem process(PrismObject<T> obje
result.setPhase(processor.getPhase());
result.setType(processor.getType());
result.setPriority(processor.getPriority());
result.setDescription(description);

ObjectDelta<?> delta = object.diff(cloned);
result.setDelta(delta);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public class UpgradeValidationItem implements DebugDumpable {

private UpgradeType type;

private String description;

private ObjectDelta<?> delta;

public UpgradeValidationItem(ValidationItem item) {
Expand Down Expand Up @@ -76,6 +78,14 @@ public ValidationItem getItem() {
return item;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public String debugDump(int indent) {
StringBuilder sb = DebugUtil.createTitleStringBuilderLn(UpgradeValidationResult.class, indent);
Expand All @@ -85,6 +95,7 @@ public String debugDump(int indent) {
DebugUtil.debugDumpWithLabelLn(sb, "phase", phase, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "priority", priority, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "type", type, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "description", description, indent + 1);
DebugUtil.debugDumpWithLabel(sb, "delta", delta, indent + 1);
return sb.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,15 @@ public class VerificationReporter {
"Phase",
"Priority",
"Type",
"Upgrade description",
"Skip upgrade [yes/no] Default: no"
);

private static final int COLUMN_INDEX_OID = 0;
private static final int COLUMN_INDEX_PATH = 4;
private static final int COLUMN_INDEX_IDENTIFIER = 6;
private static final int COLUMN_INDEX_SKIP_UPGRADE = REPORT_HEADER.size() - 1;

public static final CSVFormat CSV_FORMAT;

static {
Expand Down Expand Up @@ -238,7 +244,7 @@ public static String getItemPathFromRecord(CSVRecord record) {
return "";
}

String path = record.get(4);
String path = record.get(COLUMN_INDEX_PATH);
if (StringUtils.isBlank(path)) {
return "";
}
Expand All @@ -251,24 +257,24 @@ public static String getIdentifierFromRecord(CSVRecord record) {
return null;
}

return record.get(6);
return record.get(COLUMN_INDEX_IDENTIFIER);
}

public static UUID getUuidFromRecord(CSVRecord record) {
if (record == null || record.size() != REPORT_HEADER.size()) {
return null;
}

String uuid = record.get(0);
return StringUtils.isNotEmpty(uuid) ? UUID.fromString(uuid) : null;
String oid = record.get(COLUMN_INDEX_OID);
return StringUtils.isNotEmpty(oid) ? UUID.fromString(oid) : null;
}

public static boolean skipUpgradeForRecord(CSVRecord record) {
if (record == null || record.size() != REPORT_HEADER.size()) {
return true;
}

String value = record.get(REPORT_HEADER.size() - 1);
String value = record.get(COLUMN_INDEX_SKIP_UPGRADE);

return value.equalsIgnoreCase("true")
|| value.equalsIgnoreCase("yes")
Expand Down Expand Up @@ -296,6 +302,7 @@ private List<String> createReportRecord(UpgradeValidationItem item, PrismObject<
UpgradePhase phase = item.getPhase();
UpgradePriority priority = item.getPriority();
UpgradeType type = item.getType();
String upgradeDescription = item.getDescription();

// this array has to match {@link VerifyConsumerWorker#REPORT_HEADER}
return Arrays.asList(object.getOid(),
Expand All @@ -308,6 +315,7 @@ private List<String> createReportRecord(UpgradeValidationItem item, PrismObject<
phase != null ? phase.name() : null,
priority != null ? priority.name() : null,
type != null ? type.name() : null,
upgradeDescription,
null // todo last column should have YES (skip upgrade for all non-auto changes by default)
);
}
Expand Down

0 comments on commit 26da59b

Please sign in to comment.