Skip to content

Commit

Permalink
MID-8842 ninja, moving upgrade actions to separate package
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jun 28, 2023
1 parent 88efe04 commit 834e3f6
Show file tree
Hide file tree
Showing 13 changed files with 188 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;
import java.io.FileInputStream;
Expand All @@ -7,6 +7,10 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import com.evolveum.midpoint.ninja.action.upgrade.ConsoleProgressListener;
import com.evolveum.midpoint.ninja.action.upgrade.DistributionManager;
import com.evolveum.midpoint.ninja.action.upgrade.ProgressListener;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeConstants;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.fusesource.jansi.Ansi;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;

import com.beust.jcommander.Parameter;

import com.evolveum.midpoint.ninja.action.upgrade.UpgradeCommonOptions;

// todo options
public class DownloadDistributionOptions extends UpgradeCommonOptions {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.util.*;

import com.evolveum.midpoint.ninja.action.Action;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeConstants;
import com.evolveum.midpoint.ninja.util.ConsoleFormat;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.repo.api.RepositoryService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import com.beust.jcommander.Parameters;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;
import java.util.stream.Collectors;

import com.evolveum.midpoint.ninja.action.upgrade.UpgradeConstants;
import org.apache.commons.io.FileUtils;
import org.fusesource.jansi.Ansi;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;
import java.io.IOException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.BlockingQueue;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import com.evolveum.midpoint.ninja.action.AbstractRepositorySearchAction;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeObjectsConsumerWorker;
import com.evolveum.midpoint.ninja.action.verify.VerificationReporter;
import com.evolveum.midpoint.ninja.util.OperationStatus;
import com.evolveum.midpoint.prism.ParsingContext;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismParser;
import com.evolveum.midpoint.prism.PrismSerializer;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

// todo handle initial objects somehow
// compare vanilla previous with vanilla new ones and also vanilla previous with current in MP repository,
// apply only non conflicting delta items, report it to user
public class UpgradeObjectsAction extends AbstractRepositorySearchAction<UpgradeObjectsOptions, Void> {

private Map<UUID, Set<String>> skipUpgradeForOids;

@Override
public Void execute() throws Exception {
skipUpgradeForOids = loadVerificationFile();

log.info("Upgrade will skip {} objects", skipUpgradeForOids.size());
if (!options.getFiles().isEmpty()) {
return upgradeObjectsInFiles();
}

return super.execute();
}

private Void upgradeObjectsInFiles() {
for (File file : options.getFiles()) {
if (!file.isDirectory()) {
upgradeFile(file);
} else {
Collection<File> children = FileUtils.listFiles(file, new String[] { "xml" }, true);
for (File child : children) {
if (child.isDirectory()) {
continue;
}

upgradeFile(child);
}
}
}
// todo implement
return null;
}

private void upgradeFile(File file) {
PrismContext prismContext = context.getPrismContext();
ParsingContext parsingContext = prismContext.createParsingContextForCompatibilityMode();
PrismParser parser = prismContext.parserFor(file).language(PrismContext.LANG_XML).context(parsingContext);

PrismSerializer<String> serializer = prismContext.xmlSerializer();
// serializer.serializeAnyData()
// try (Writer writer = new FileWriter(file)) {
// List<PrismObject<?>> objects = parser.parseObjects();
// for (PrismObject<?> object : objects) {
// UpgradeObjectsHandler upgradeHandler = new UpgradeObjectsHandler();
// UpgradeObjectResult result = upgradeHandler.handle(prismObject);
//
// if (result.isChanged()) {
// ObjectDelta<?> delta = result.getDelta();
// if (delta != null && !delta.isEmpty()) {
// delta.applyTo(object);
// }
// }
//
// }
// } catch (Exception ex) {
// // todo handle error
// ex.printStackTrace();
// }
// todo implement
}

@Override
public String getOperationName() {
return "upgrade objects";
}

private Map<UUID, Set<String>> loadVerificationFile() throws IOException {
File verification = options.getVerification();
if (verification == null || !verification.exists() || !verification.isFile()) {
return Collections.emptyMap();
}

log.info("Loading verification file");

Map<UUID, Set<String>> map = new HashMap<>();

CSVFormat format = VerificationReporter.CSV_FORMAT;
try (CSVParser parser = format.parse(new FileReader(verification, context.getCharset()))) {
Iterator<CSVRecord> iterator = parser.iterator();
while (iterator.hasNext()) {
CSVRecord record = iterator.next();
if (record.getRecordNumber() == 1 || isRecordEmpty(record)) {
// csv header or empty record
continue;
}

if (VerificationReporter.skipUpgradeForRecord(record)) {
UUID uuid = VerificationReporter.getUuidFromRecord(record);
String identifier = VerificationReporter.getIdentifierFromRecord(record);
if (uuid != null) {
Set<String> identifiers = map.get(uuid);
if (identifiers == null) {
identifiers = new HashSet<>();
map.put(uuid, identifiers);
}
identifiers.add(identifier);
}
}
}
}

return Collections.unmodifiableMap(map);
}

private boolean isRecordEmpty(CSVRecord record) {
for (int i = 0; i < record.size(); i++) {
String value = record.get(i);
if (StringUtils.isNotBlank(value)) {
return false;
}
}

return true;
}

@Override
protected Runnable createConsumer(BlockingQueue<ObjectType> queue, OperationStatus operation) {
return new UpgradeObjectsConsumerWorker(skipUpgradeForOids, context, options, queue, operation);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.evolveum.midpoint.ninja.action.upgrade;
package com.evolveum.midpoint.ninja.action.upgrade.action;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.beust.jcommander.ParametersDelegate;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.ninja.action.ExportOptions;
import com.evolveum.midpoint.ninja.action.OutputOptions;
import com.evolveum.midpoint.ninja.action.SearchOptions;

/**
* todo cleanup options, use OutputOptions, SearchOptions etc. Get rid of inheritance, replace with composition
Expand All @@ -17,6 +17,7 @@
public class UpgradeObjectsOptions extends ExportOptions {

public static final String P_VERIFICATION_LONG = "--verification-file";
public static final String P_FILES = "--files";

// @ParametersDelegate
// private OutputOptions outputOptions = new OutputOptions();
Expand All @@ -27,6 +28,9 @@ public class UpgradeObjectsOptions extends ExportOptions {
@Parameter(names = { P_VERIFICATION_LONG }, descriptionKey = "upgradeObjects.verification")
private File verification;

@Parameter(names = { P_FILES }, descriptionKey = "upgradeObjects.files", variableArity = true)
private List<File> files = new ArrayList<>();

public File getVerification() {
return verification;
}
Expand All @@ -50,4 +54,16 @@ public void setVerification(File verification) {
// public void setSearchOptions(SearchOptions searchOptions) {
// this.searchOptions = searchOptions;
// }

@NotNull
public List<File> getFiles() {
if (files == null) {
files = new ArrayList<>();
}
return files;
}

public void setFiles(List<File> files) {
this.files = files;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import com.evolveum.midpoint.ninja.action.mining.ExportMiningRepositoryAction;
import com.evolveum.midpoint.ninja.action.trace.EditTraceAction;
import com.evolveum.midpoint.ninja.action.trace.EditTraceOptions;
import com.evolveum.midpoint.ninja.action.upgrade.*;
import com.evolveum.midpoint.ninja.action.upgrade.action.*;

/**
* Enumeration of Ninja commands (or actions).
Expand Down
1 change: 1 addition & 0 deletions tools/ninja/src/main/resources/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,4 @@ preUpgradeCheck=Pre-upgrade check
verify.continueVerificationOnError=Continue verification when error is found.
verify.files=Files/Directories for verification.
upgradeDistribution.skipPreCheck=Skip pre-upgrade checks.
upgradeObjects.files=Files/Directories marked for upgrade.

0 comments on commit 834e3f6

Please sign in to comment.