Skip to content

Commit

Permalink
implemented count command for ninja
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Mar 14, 2018
1 parent abb6866 commit 93cd957
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 6 deletions.
Expand Up @@ -16,15 +16,76 @@

package com.evolveum.midpoint.ninja.action;

import com.evolveum.midpoint.ninja.impl.NinjaException;
import com.evolveum.midpoint.ninja.opts.CountOptions;
import com.evolveum.midpoint.ninja.util.FileReference;
import com.evolveum.midpoint.ninja.util.NinjaUtils;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
* Created by Viliam Repan (lazyman).
*/
public class CountRepositoryAction extends RepositoryAction<CountOptions> {

private static final String DOT_CLASS = CountRepositoryAction.class.getName() + ".";

private static final String OPERATION_COUNT = DOT_CLASS + "count";

@Override
public void execute() throws Exception {
// todo implement
RepositoryService repository = context.getRepository();

FileReference fileReference = options.getFilter();
if (fileReference != null && options.getFilter() == null) {
throw new NinjaException("Type must be defined");
}

ObjectQuery query = NinjaUtils.createObjectQuery(options.getFilter(), context);

List<ObjectTypes> types = getTypes();

int total = 0;
OperationResult result = new OperationResult(OPERATION_COUNT);
for (ObjectTypes type : types) {
Class<? extends ObjectType> clazz = type.getClassDefinition();
if (Modifier.isAbstract(clazz.getModifiers())) {
continue;
}

int count = repository.countObjects(clazz, query, new ArrayList<>(), result);
if (count == 0 && options.getType() == null) {
continue;
}
log.info("{}:\t{}", type.name(), count);

total += count;
}

log.info("===\nTotal:\t{}", total);
}

private List<ObjectTypes> getTypes() {
List<ObjectTypes> types = new ArrayList<>();

ObjectTypes type = options.getType();
if (type != null) {
types.add(type);
} else {
types.addAll(Arrays.asList(ObjectTypes.values()));
}

Collections.sort(types);

return types;
}
}
Expand Up @@ -14,7 +14,7 @@ public enum Command {

DELETE("delete", DeleteOptions.class, DeleteRepositoryAction.class, null),

// COUNT("count", CountOptions.class, CountRepositoryAction.class, null),
COUNT("count", CountOptions.class, CountRepositoryAction.class, null),

// PASSWORD_RESET("password", PasswordResetOptions.class, PasswordResetRepositoryAction.class, null),
//
Expand Down
Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.ninja.opts;

import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.evolveum.midpoint.ninja.util.FileReference;
import com.evolveum.midpoint.ninja.util.FileReferenceConverter;
import com.evolveum.midpoint.ninja.util.ObjectTypesConverter;
Expand All @@ -25,6 +26,7 @@
/**
* Created by Viliam Repan (lazyman).
*/
@Parameters(resourceBundle = "messages", commandDescriptionKey = "count")
public class CountOptions {

public static final String P_TYPE = "-t";
Expand All @@ -33,11 +35,11 @@ public class CountOptions {
public static final String P_FILTER = "-f";
public static final String P_FILTER_LONG = "--filter";

@Parameter(names = {P_TYPE, P_TYPE_LONG}, descriptionKey = "countOptions.type",
@Parameter(names = {P_TYPE, P_TYPE_LONG}, descriptionKey = "count.type",
validateWith = ObjectTypesConverter.class, converter = ObjectTypesConverter.class)
private ObjectTypes type;

@Parameter(names = {P_FILTER, P_FILTER_LONG}, descriptionKey = "countOptions.filter",
@Parameter(names = {P_FILTER, P_FILTER_LONG}, descriptionKey = "count.filter",
converter = FileReferenceConverter.class, validateWith = FileReferenceConverter.class)
private FileReference filter;

Expand Down
5 changes: 3 additions & 2 deletions tools/ninja/src/main/resources/messages.properties
Expand Up @@ -60,5 +60,6 @@ listKeys.askKeyPassword=Please write key password
schema=DB schema operations
schema.test=Validate DB schema
schema.init=Initialize DB schema
countOptions.type=
countOptions.filter=
count=
count.type=
count.filter=

0 comments on commit 93cd957

Please sign in to comment.