Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Feb 7, 2019
2 parents e2c8f79 + 56250ee commit f30aa00
Show file tree
Hide file tree
Showing 17 changed files with 1,239 additions and 35 deletions.
2 changes: 1 addition & 1 deletion build-system/pom.xml
Expand Up @@ -83,7 +83,7 @@
<activiti-spring.version>5.22.0</activiti-spring.version>
<commons-email.version>1.3</commons-email.version>
<xmlsec.version>2.0.6</xmlsec.version>
<connid.version>1.5.0.0</connid.version>
<connid.version>1.5.0.8</connid.version>
<jasper.version>6.5.0</jasper.version>
<derby.version>10.11.1.1</derby.version>
<wro4j.version>1.8.0</wro4j.version>
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010-2017 Evolveum
* Copyright (c) 2010-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -583,6 +583,15 @@ public static <T> T getExtensionItemRealValue(@Nullable ExtensionType extension,
Item item = extension.asPrismContainerValue().findItem(ItemName.fromQName(itemName));
return item != null ? (T) item.getRealValue() : null;
}

public static <T> T getExtensionItemRealValue(@NotNull PrismObject<? extends ObjectType> object, @NotNull QName itemName) {
PrismContainer<?> extension = object.getExtension();
if (extension == null) {
return null;
}
Item item = extension.findItem(ItemName.fromQName(itemName));
return item != null ? (T) item.getRealValue() : null;
}

public static void normalizeRelation(ObjectReferenceType reference, RelationRegistry relationRegistry) {
if (reference != null) {
Expand Down
Expand Up @@ -754,11 +754,12 @@ public void addEntry(Entry ldapEntry) {
}
}

public void addEntry(String ldif) throws IOException, LDIFException {
public Entry addEntry(String ldif) throws IOException, LDIFException {
LDIFImportConfig importConfig = new LDIFImportConfig(IOUtils.toInputStream(ldif, "utf-8"));
LDIFReader ldifReader = new LDIFReader(importConfig);
Entry ldifEntry = ldifReader.readEntry();
addEntry(ldifEntry);
return ldifEntry;
}

public ChangeRecordEntry executeRenameChange(File file) throws LDIFException, IOException{
Expand Down
Expand Up @@ -189,23 +189,25 @@ private <O extends ObjectType> TaskRunResult runInternal(Task task) {
}

SearchResultList<PrismObject<O>> objects;
while (true) {
while (task.canRun()) {
objects = modelService.searchObjects(objectType, query, searchOptions, task, opResult);
if (objects.isEmpty()) {
break;
}

int skipped = 0;
for (PrismObject<O> object: objects) {
if (!task.canRun()) {
break;
}
if (!optionRaw && ShadowType.class.isAssignableFrom(objectType)
&& isTrue(((ShadowType)(object.asObjectable())).isProtectedObject())) {
LOGGER.debug("Skipping delete of protected object {}", object);
skipped++;
continue;
}

ObjectDelta<?> delta = prismContext.deltaFactory().object().createDeleteDelta(objectType, object.getOid()
);
ObjectDelta<?> delta = prismContext.deltaFactory().object().createDeleteDelta(objectType, object.getOid());

String objectName = PolyString.getOrig(object.getName());
String objectDisplayName = StatisticsUtil.getDisplayName(object);
Expand All @@ -225,14 +227,13 @@ && isTrue(((ShadowType)(object.asObjectable())).isProtectedObject())) {

opResult.summarize();
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Search returned {} objects, {} skipped, progress: {}, result:\n{}",
objects.size(), skipped, task.getProgress(), opResult.debugDump());
LOGGER.trace("Search returned {} objects, {} skipped, progress: {} (interrupted: {}), result:\n{}",
objects.size(), skipped, task.getProgress(), !task.canRun(), opResult.debugDump());
}

if (objects.size() == skipped) {
break;
}

}

} catch (ObjectAlreadyExistsException | ObjectNotFoundException | SchemaException
Expand Down Expand Up @@ -260,11 +261,14 @@ && isTrue(((ShadowType)(object.asObjectable())).isProtectedObject())) {
if (task.getProgress() > 0) {
statistics += " Wall clock time average: " + ((float) wallTime / (float) task.getProgress()) + " milliseconds";
}
if (!task.canRun()) {
statistics += " (task run was interrupted)";
}

opResult.createSubresult(DeleteTaskHandler.class.getName() + ".statistics").recordStatus(OperationResultStatus.SUCCESS, statistics);

LOGGER.info(finishMessage + statistics);
LOGGER.trace("Run finished (task {}, run result {})", task, runResult);
LOGGER.trace("Run finished (task {}, run result {}); interrupted = {}", task, runResult, !task.canRun());

return runResult;
}
Expand Down
Expand Up @@ -3134,6 +3134,10 @@ protected OperationResult waitForTaskNextRunAssertSuccess(Task origTask, final b
return taskResult;
}

protected OperationResult waitForTaskNextRun(final String taskOid) throws Exception {
return waitForTaskNextRun(taskOid, false, DEFAULT_TASK_WAIT_TIMEOUT, false);
}

protected OperationResult waitForTaskNextRun(final String taskOid, final boolean checkSubresult, final int timeout) throws Exception {
return waitForTaskNextRun(taskOid, checkSubresult, timeout, false);
}
Expand Down
Expand Up @@ -18,6 +18,7 @@
import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.xml.namespace.QName;
Expand Down Expand Up @@ -245,9 +246,11 @@ private void transformConnectorTimeoutsConfiguration(APIConfiguration apiConfig,

if (SchemaConstants.NS_ICF_CONFIGURATION.equals(propertQName.getNamespaceURI())) {
String opName = propertQName.getLocalPart();
Class<? extends APIOperation> apiOpClass = ConnectorFactoryConnIdImpl.resolveApiOpClass(opName);
if (apiOpClass != null) {
apiConfig.setTimeout(apiOpClass, parseInt(prismProperty));
Collection<Class<? extends APIOperation>> apiOpClasses = ConnectorFactoryConnIdImpl.resolveApiOpClass(opName);
if (apiOpClasses != null) {
for (Class<? extends APIOperation> apiOpClass : apiOpClasses) {
apiConfig.setTimeout(apiOpClass, parseInt(prismProperty));
}
} else {
throw new SchemaException("Unknown operation name " + opName + " in "
+ ConnectorFactoryConnIdImpl.CONNECTOR_SCHEMA_TIMEOUTS_XML_ELEMENT_NAME);
Expand Down
Expand Up @@ -26,6 +26,7 @@
import java.net.URL;
import java.security.Key;
import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -69,6 +70,7 @@
import org.identityconnectors.framework.api.operations.SyncApiOp;
import org.identityconnectors.framework.api.operations.TestApiOp;
import org.identityconnectors.framework.api.operations.UpdateApiOp;
import org.identityconnectors.framework.api.operations.UpdateDeltaApiOp;
import org.identityconnectors.framework.api.operations.ValidateApiOp;
import org.identityconnectors.framework.common.FrameworkUtil;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -153,7 +155,7 @@ public class ConnectorFactoryConnIdImpl implements ConnectorFactory {
public static final String CONNECTOR_SCHEMA_RESULTS_HANDLER_CONFIGURATION_ENABLE_CASE_INSENSITIVE_HANDLER = "enableCaseInsensitiveFilter";
public static final String CONNECTOR_SCHEMA_RESULTS_HANDLER_CONFIGURATION_ENABLE_ATTRIBUTES_TO_GET_SEARCH_RESULTS_HANDLER = "enableAttributesToGetSearchResultsHandler";

static final Map<String, Class<? extends APIOperation>> apiOpMap = new HashMap<>();
static final Map<String, Collection<Class<? extends APIOperation>>> apiOpMap = new HashMap<>();

private static final String ICF_CONFIGURATION_NAMESPACE_PREFIX = SchemaConstants.ICF_FRAMEWORK_URI + "/bundle/";
private static final String CONNECTOR_IDENTIFIER_SEPARATOR = "/";
Expand Down Expand Up @@ -892,23 +894,23 @@ public void access(char[] decryptedChars) {
result.computeStatus();
}

static Class<? extends APIOperation> resolveApiOpClass(String opName) {
static Collection<Class<? extends APIOperation>> resolveApiOpClass(String opName) {
return apiOpMap.get(opName);
}

static {
apiOpMap.put("create", CreateApiOp.class);
apiOpMap.put("get", GetApiOp.class);
apiOpMap.put("update", UpdateApiOp.class);
apiOpMap.put("delete", DeleteApiOp.class);
apiOpMap.put("test", TestApiOp.class);
apiOpMap.put("scriptOnConnector", ScriptOnConnectorApiOp.class);
apiOpMap.put("scriptOnResource", ScriptOnResourceApiOp.class);
apiOpMap.put("authentication", AuthenticationApiOp.class);
apiOpMap.put("search", SearchApiOp.class);
apiOpMap.put("validate", ValidateApiOp.class);
apiOpMap.put("sync", SyncApiOp.class);
apiOpMap.put("schema", SchemaApiOp.class);
apiOpMap.put("create", Arrays.asList(CreateApiOp.class));
apiOpMap.put("get", Arrays.asList(GetApiOp.class));
apiOpMap.put("update", Arrays.asList(UpdateApiOp.class, UpdateDeltaApiOp.class));
apiOpMap.put("delete", Arrays.asList(DeleteApiOp.class));
apiOpMap.put("test", Arrays.asList(TestApiOp.class));
apiOpMap.put("scriptOnConnector", Arrays.asList(ScriptOnConnectorApiOp.class));
apiOpMap.put("scriptOnResource", Arrays.asList(ScriptOnResourceApiOp.class));
apiOpMap.put("authentication", Arrays.asList(AuthenticationApiOp.class));
apiOpMap.put("search", Arrays.asList(SearchApiOp.class));
apiOpMap.put("validate", Arrays.asList(ValidateApiOp.class));
apiOpMap.put("sync", Arrays.asList(SyncApiOp.class));
apiOpMap.put("schema", Arrays.asList(SchemaApiOp.class));
}

@Override
Expand Down
Expand Up @@ -2151,7 +2151,8 @@ public void cleanupTasks(CleanupPolicyType policy, Task executionTask, Operation
List<PrismObject<TaskType>> obsoleteTasks;
try {
ObjectQuery obsoleteTasksQuery = prismContext.queryFor(TaskType.class)
.item(TaskType.F_COMPLETION_TIMESTAMP).le(timeXml)
.item(TaskType.F_EXECUTION_STATUS).eq(TaskExecutionStatusType.CLOSED)
.and().item(TaskType.F_COMPLETION_TIMESTAMP).le(timeXml)
.and().item(TaskType.F_PARENT).isNull()
.build();
obsoleteTasks = repositoryService.searchObjects(TaskType.class, obsoleteTasksQuery, null, result);
Expand Down

0 comments on commit f30aa00

Please sign in to comment.