use of com.evolveum.midpoint.util.exception.CommonException in project midpoint by Evolveum.
the class ResourceCredentialsEditor method createPasswordPolicyList.
private List<ObjectReferenceType> createPasswordPolicyList() {
passPolicyMap.clear();
OperationResult result = new OperationResult(OPERATION_LOAD_PASSWORD_POLICIES);
Task task = getPageBase().createSimpleTask(OPERATION_LOAD_PASSWORD_POLICIES);
List<PrismObject<ValuePolicyType>> policies = null;
List<ObjectReferenceType> references = new ArrayList<>();
try {
policies = getPageBase().getModelService().searchObjects(ValuePolicyType.class, new ObjectQuery(), null, task, result);
result.recomputeStatus();
} catch (CommonException | RuntimeException e) {
result.recordFatalError("Couldn't load password policies.", e);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load password policies", e);
}
if (policies != null) {
ObjectReferenceType ref;
for (PrismObject<ValuePolicyType> policy : policies) {
passPolicyMap.put(policy.getOid(), WebComponentUtil.getName(policy));
ref = new ObjectReferenceType();
ref.setType(ValuePolicyType.COMPLEX_TYPE);
ref.setOid(policy.getOid());
references.add(ref);
}
}
return references;
}
use of com.evolveum.midpoint.util.exception.CommonException in project midpoint by Evolveum.
the class PageProcessInstances method deleteProcessInstancesPerformed.
private void deleteProcessInstancesPerformed(AjaxRequestTarget target) {
List<ProcessInstanceDto> processInstanceDtoList = WebComponentUtil.getSelectedData(getTable());
if (!isSomeItemSelected(processInstanceDtoList, false, target)) {
return;
}
Task opTask = createSimpleTask(OPERATION_DELETE_PROCESS_INSTANCES);
OperationResult result = opTask.getResult();
ModelService modelService = getModelService();
for (ProcessInstanceDto processInstanceDto : processInstanceDtoList) {
String taskOid = processInstanceDto.getTaskOid();
try {
ObjectDelta<? extends ObjectType> deleteDelta = ObjectDelta.createDeleteDelta(TaskType.class, taskOid, getPrismContext());
modelService.executeChanges(Collections.<ObjectDelta<? extends ObjectType>>singletonList(deleteDelta), null, opTask, result);
} catch (CommonException | RuntimeException e) {
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete task (process instance) {}", e, taskOid);
}
}
if (result.isUnknown()) {
result.recomputeStatus();
}
if (result.isSuccess()) {
result.recordStatus(OperationResultStatus.SUCCESS, "Selected process instance(s) have been successfully deleted.");
}
showResult(result);
ProcessInstanceDtoProvider provider = (ProcessInstanceDtoProvider) getTable().getDataTable().getDataProvider();
provider.clearCache();
//refresh feedback and table
target.add(getFeedbackPanel());
target.add(getTable());
}
use of com.evolveum.midpoint.util.exception.CommonException in project midpoint by Evolveum.
the class AbstractSearchIterativeResultHandler method processRequest.
private void processRequest(ProcessingRequest request, Task workerTask, OperationResult parentResult) {
PrismObject<O> object = request.object;
String objectName = PolyString.getOrig(object.getName());
String objectDisplayName = getDisplayName(object);
OperationResult result = parentResult.createSubresult(taskOperationPrefix + ".handle");
result.addParam("object", object);
boolean cont;
long startTime = System.currentTimeMillis();
try {
RepositoryCache.enter();
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("{} starting for {} {}", getProcessShortNameCapitalized(), object, getContextDesc());
}
if (isRecordIterationStatistics()) {
workerTask.recordIterativeOperationStart(objectName, objectDisplayName, null, /* TODO */
object.getOid());
}
// The meat
cont = handleObject(object, workerTask, result);
// We do not want to override the result set by handler. This is just a fallback case
if (result.isUnknown() || result.isInProgress()) {
result.computeStatus();
}
if (result.isError()) {
// Alternative way how to indicate an error.
if (isRecordIterationStatistics()) {
workerTask.recordIterativeOperationEnd(objectName, objectDisplayName, null, /* TODO */
object.getOid(), startTime, getException(result));
}
cont = processError(object, null, result);
} else {
if (isRecordIterationStatistics()) {
workerTask.recordIterativeOperationEnd(objectName, objectDisplayName, null, /* TODO */
object.getOid(), startTime, null);
}
if (result.isSuccess()) {
// FIXME: hack. Hardcoded ugly summarization of successes. something like
// AbstractSummarizingResultHandler [lazyman]
result.getSubresults().clear();
}
}
} catch (CommonException | RuntimeException e) {
if (isRecordIterationStatistics()) {
workerTask.recordIterativeOperationEnd(objectName, objectDisplayName, null, /* TODO */
object.getOid(), startTime, e);
}
cont = processError(object, e, result);
} finally {
RepositoryCache.exit();
long duration = System.currentTimeMillis() - startTime;
long total = totalTimeProcessing.addAndGet(duration);
int progress = objectsProcessed.incrementAndGet();
result.addContext(OperationResult.CONTEXT_PROGRESS, progress);
// parentResult is worker-thread-specific result (because of concurrency issues)
// or parentResult as obtained in handle(..) method in single-thread scenario
parentResult.summarize();
synchronized (coordinatorTask) {
coordinatorTask.setProgress(progress);
if (requestQueue != null) {
workerTask.setProgress(workerTask.getProgress() + 1);
}
// todo report current op result?
if (shouldReportProgress()) {
coordinatorTask.storeOperationStats();
// includes savePendingModifications - this is necessary for the progress to be immediately available in GUI
}
}
if (logObjectProgress) {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("{} object {} {} done with status {} (this one: {} ms, avg: {} ms) (total progress: {}, wall clock avg: {} ms)", getProcessShortNameCapitalized(), object, getContextDesc(), result.getStatus(), duration, total / progress, progress, (System.currentTimeMillis() - this.startTime) / progress);
}
}
}
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("{} finished for {} {}, result:\n{}", getProcessShortNameCapitalized(), object, getContextDesc(), result.debugDump());
}
if (!cont) {
stopRequestedByAnyWorker.set(true);
}
}
use of com.evolveum.midpoint.util.exception.CommonException in project midpoint by Evolveum.
the class ShadowIntegrityCheckResultHandler method checkShadow.
private void checkShadow(ShadowCheckResult checkResult, PrismObject<ShadowType> shadow, Task workerTask, OperationResult result) throws SchemaException {
ShadowType shadowType = shadow.asObjectable();
ObjectReferenceType resourceRef = shadowType.getResourceRef();
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Checking shadow {} (resource {})", ObjectTypeUtil.toShortString(shadowType), resourceRef != null ? resourceRef.getOid() : "(null)");
}
statistics.incrementShadows();
if (resourceRef == null) {
checkResult.recordError(Statistics.NO_RESOURCE_OID, new SchemaException("No resourceRef"));
fixNoResourceIfRequested(checkResult, Statistics.NO_RESOURCE_OID);
applyFixes(checkResult, shadow, workerTask, result);
return;
}
String resourceOid = resourceRef.getOid();
if (resourceOid == null) {
checkResult.recordError(Statistics.NO_RESOURCE_OID, new SchemaException("Null resource OID"));
fixNoResourceIfRequested(checkResult, Statistics.NO_RESOURCE_OID);
applyFixes(checkResult, shadow, workerTask, result);
return;
}
PrismObject<ResourceType> resource = resources.get(resourceOid);
if (resource == null) {
statistics.incrementResources();
try {
resource = provisioningService.getObject(ResourceType.class, resourceOid, null, workerTask, result);
} catch (ObjectNotFoundException e) {
checkResult.recordError(Statistics.NO_RESOURCE, new ObjectNotFoundException("Resource object does not exist: " + e.getMessage(), e));
fixNoResourceIfRequested(checkResult, Statistics.NO_RESOURCE);
applyFixes(checkResult, shadow, workerTask, result);
return;
} catch (SchemaException e) {
checkResult.recordError(Statistics.CANNOT_GET_RESOURCE, new SchemaException("Resource object has schema problems: " + e.getMessage(), e));
return;
} catch (CommonException | RuntimeException e) {
checkResult.recordError(Statistics.CANNOT_GET_RESOURCE, new SystemException("Resource object cannot be fetched for some reason: " + e.getMessage(), e));
return;
}
resources.put(resourceOid, resource);
}
checkResult.setResource(resource);
ShadowKindType kind = shadowType.getKind();
if (kind == null) {
// TODO or simply assume account?
checkResult.recordError(Statistics.NO_KIND_SPECIFIED, new SchemaException("No kind specified"));
return;
}
if (checkExtraData) {
checkOrFixShadowActivationConsistency(checkResult, shadow, fixExtraData);
}
PrismObject<ShadowType> fetchedShadow = null;
if (checkFetch) {
fetchedShadow = fetchShadow(checkResult, shadow, resource, workerTask, result);
if (fetchedShadow != null) {
shadow.setUserData(KEY_EXISTS_ON_RESOURCE, "true");
}
}
if (checkOwners) {
List<PrismObject<FocusType>> owners = searchOwners(shadow, result);
if (owners != null) {
shadow.setUserData(KEY_OWNERS, owners);
if (owners.size() > 1) {
checkResult.recordError(Statistics.MULTIPLE_OWNERS, new SchemaException("Multiple owners: " + owners));
}
}
if (shadowType.getSynchronizationSituation() == SynchronizationSituationType.LINKED && (owners == null || owners.isEmpty())) {
checkResult.recordError(Statistics.LINKED_WITH_NO_OWNER, new SchemaException("Linked shadow with no owner"));
}
if (shadowType.getSynchronizationSituation() != SynchronizationSituationType.LINKED && owners != null && !owners.isEmpty()) {
checkResult.recordError(Statistics.NOT_LINKED_WITH_OWNER, new SchemaException("Shadow with an owner but not marked as linked (marked as " + shadowType.getSynchronizationSituation() + ")"));
}
}
String intent = shadowType.getIntent();
if (checkIntents && (intent == null || intent.isEmpty())) {
checkResult.recordWarning(Statistics.NO_INTENT_SPECIFIED, "None or empty intent");
}
if (fixIntents && (intent == null || intent.isEmpty())) {
doFixIntent(checkResult, fetchedShadow, shadow, resource, workerTask, result);
}
Pair<String, ShadowKindType> key = new ImmutablePair<>(resourceOid, kind);
ObjectTypeContext context = contextMap.get(key);
if (context == null) {
context = new ObjectTypeContext();
context.setResource(resource);
RefinedResourceSchema resourceSchema;
try {
resourceSchema = RefinedResourceSchemaImpl.getRefinedSchema(context.getResource(), LayerType.MODEL, prismContext);
} catch (SchemaException e) {
checkResult.recordError(Statistics.CANNOT_GET_REFINED_SCHEMA, new SchemaException("Couldn't derive resource schema: " + e.getMessage(), e));
return;
}
if (resourceSchema == null) {
checkResult.recordError(Statistics.NO_RESOURCE_REFINED_SCHEMA, new SchemaException("No resource schema"));
return;
}
context.setObjectClassDefinition(resourceSchema.getRefinedDefinition(kind, shadowType));
if (context.getObjectClassDefinition() == null) {
// TODO or warning only?
checkResult.recordError(Statistics.NO_OBJECT_CLASS_REFINED_SCHEMA, new SchemaException("No refined object class definition for kind=" + kind + ", intent=" + intent));
return;
}
contextMap.put(key, context);
}
try {
provisioningService.applyDefinition(shadow, workerTask, result);
} catch (SchemaException | ObjectNotFoundException | CommunicationException | ConfigurationException | ExpressionEvaluationException e) {
checkResult.recordError(Statistics.OTHER_FAILURE, new SystemException("Couldn't apply definition to shadow from repo", e));
return;
}
Set<RefinedAttributeDefinition<?>> identifiers = new HashSet<>();
Collection<? extends RefinedAttributeDefinition<?>> primaryIdentifiers = context.getObjectClassDefinition().getPrimaryIdentifiers();
identifiers.addAll(primaryIdentifiers);
identifiers.addAll(context.getObjectClassDefinition().getSecondaryIdentifiers());
PrismContainer<ShadowAttributesType> attributesContainer = shadow.findContainer(ShadowType.F_ATTRIBUTES);
if (attributesContainer == null) {
// might happen on unfinished shadows?
checkResult.recordError(Statistics.OTHER_FAILURE, new SchemaException("No attributes container"));
return;
}
for (RefinedAttributeDefinition<?> identifier : identifiers) {
PrismProperty property = attributesContainer.getValue().findProperty(identifier.getName());
if (property == null || property.size() == 0) {
checkResult.recordWarning(Statistics.OTHER_FAILURE, "No value for identifier " + identifier.getName());
continue;
}
if (property.size() > 1) {
// we don't expect multi-valued identifiers
checkResult.recordError(Statistics.OTHER_FAILURE, new SchemaException("Multi-valued identifier " + identifier.getName() + " with values " + property.getValues()));
continue;
}
// size == 1
String value = (String) property.getValue().getValue();
if (value == null) {
checkResult.recordWarning(Statistics.OTHER_FAILURE, "Null value for identifier " + identifier.getName());
continue;
}
if (checkUniqueness) {
if (!checkDuplicatesOnPrimaryIdentifiersOnly || primaryIdentifiers.contains(identifier)) {
addIdentifierValue(checkResult, context, identifier.getName(), value, shadow);
}
}
if (checkNormalization) {
doCheckNormalization(checkResult, identifier, value, context);
}
}
applyFixes(checkResult, shadow, workerTask, result);
}
use of com.evolveum.midpoint.util.exception.CommonException in project midpoint by Evolveum.
the class ShadowIntegrityCheckResultHandler method handleObject.
@Override
protected boolean handleObject(PrismObject<ShadowType> shadow, Task workerTask, OperationResult parentResult) throws CommonException {
OperationResult result = parentResult.createMinorSubresult(CLASS_DOT + "handleObject");
ShadowCheckResult checkResult = new ShadowCheckResult(shadow);
try {
checkShadow(checkResult, shadow, workerTask, result);
for (Exception e : checkResult.getErrors()) {
result.createSubresult(CLASS_DOT + "handleObject.result").recordPartialError(e.getMessage(), e);
}
for (String message : checkResult.getWarnings()) {
result.createSubresult(CLASS_DOT + "handleObject.result").recordWarning(message);
}
if (!checkResult.getErrors().isEmpty()) {
statistics.incrementShadowsWithErrors();
} else if (!checkResult.getWarnings().isEmpty()) {
statistics.incrementShadowsWithWarnings();
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Checking shadow {} (resource {}) finished - errors: {}, warnings: {}", ObjectTypeUtil.toShortString(checkResult.getShadow()), ObjectTypeUtil.toShortString(checkResult.getResource()), checkResult.getErrors().size(), checkResult.getWarnings().size());
}
} catch (RuntimeException e) {
LoggingUtils.logUnexpectedException(LOGGER, "Unexpected error while checking shadow {} integrity", e, ObjectTypeUtil.toShortString(shadow));
result.recordPartialError("Unexpected error while checking shadow integrity", e);
statistics.incrementShadowsWithErrors();
} finally {
workerTask.markObjectActionExecutedBoundary();
}
statistics.registerProblemCodeOccurrences(checkResult.getProblemCodes());
if (checkResult.isFixApplied()) {
statistics.registerProblemsFixes(checkResult.getFixForProblems());
}
result.computeStatusIfUnknown();
return true;
}
Aggregations