/*
* Copyright (c) 2010-2013 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.web.page.admin.resources.dto;
import java.util.List;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import org.apache.commons.lang.Validate;
import com.evolveum.midpoint.schema.constants.ConnectorTestOperation;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AvailabilityStatusType;
/**
* @author mserbak
*/
public class ResourceController {
public static void updateResourceState(ResourceState state, OperationResult result) {
Validate.notNull(result, "Operation result must not be null.");
List<OperationResult> subResults = result.getSubresults();
state.setConConnection(getStatusFromResultType(ConnectorTestOperation.CONNECTOR_CONNECTION,
subResults));
state.setConfValidation(getStatusFromResultType(ConnectorTestOperation.CONNECTOR_CONFIGURATION,
subResults));
state.setConInitialization(getStatusFromResultType(ConnectorTestOperation.CONNECTOR_INITIALIZATION,
subResults));
state.setConSanity(getStatusFromResultType(ConnectorTestOperation.RESOURCE_SANITY, subResults));
state.setConSchema(getStatusFromResultType(ConnectorTestOperation.RESOURCE_SCHEMA, subResults));
}
private static OperationResultStatus getStatusFromResultType(ConnectorTestOperation operation,
List<OperationResult> results) {
OperationResultStatus status = OperationResultStatus.UNKNOWN;
OperationResult resultFound = null;
for (OperationResult result : results) {
try {
if (operation.getOperation().equals(result.getOperation())) {
resultFound = result;
break;
}
} catch (IllegalArgumentException ex) {
//result.recordFatalError("Result operation name " + result.getOperation() + " returned from test connection is not type of " + ConnectorTestOperation.class + ".", ex);
}
}
if (resultFound == null) {
return status;
}
switch (resultFound.getStatus()) {
case UNKNOWN:
status = OperationResultStatus.UNKNOWN;
break;
case SUCCESS:
status = OperationResultStatus.SUCCESS;
break;
case WARNING:
status = OperationResultStatus.WARNING;
break;
case FATAL_ERROR:
status = OperationResultStatus.FATAL_ERROR;
break;
case PARTIAL_ERROR:
status = OperationResultStatus.PARTIAL_ERROR;
break;
case HANDLED_ERROR:
status = OperationResultStatus.HANDLED_ERROR;
break;
case IN_PROGRESS:
status = OperationResultStatus.IN_PROGRESS;
break;
default:
status = OperationResultStatus.UNKNOWN;
}
return status;
}
public static void updateLastAvailabilityState(ResourceState state, AvailabilityStatusType lastAvailabilityStatus) {
OperationResultStatus lastAvailability = OperationResultStatus.UNKNOWN;
if (lastAvailabilityStatus == null) {
if (state.getOverall().equals(OperationResultStatus.SUCCESS)) {
lastAvailability = OperationResultStatus.SUCCESS;
} else if ((state.getOverall().equals(OperationResultStatus.PARTIAL_ERROR)
|| state.getOverall().equals(OperationResultStatus.FATAL_ERROR)
|| state.getOverall().equals(OperationResultStatus.HANDLED_ERROR))) {
lastAvailability = OperationResultStatus.PARTIAL_ERROR;
}
state.setLastAvailability(lastAvailability);
return;
}
if (state.getOverall().equals(OperationResultStatus.SUCCESS)
&& !lastAvailabilityStatus.equals(AvailabilityStatusType.UP)) {
lastAvailability = OperationResultStatus.SUCCESS;
} else if ((state.getOverall().equals(OperationResultStatus.PARTIAL_ERROR)
|| state.getOverall().equals(OperationResultStatus.FATAL_ERROR)
|| state.getOverall().equals(OperationResultStatus.HANDLED_ERROR))
&& !lastAvailabilityStatus.equals(AvailabilityStatusType.DOWN)) {
lastAvailability = OperationResultStatus.PARTIAL_ERROR;
}
if (!lastAvailability.equals(OperationResultStatus.UNKNOWN)) {
state.setLastAvailability(lastAvailability);
return;
}
switch (lastAvailabilityStatus) {
case UP:
lastAvailability = OperationResultStatus.SUCCESS;
break;
case DOWN:
lastAvailability = OperationResultStatus.PARTIAL_ERROR;
break;
}
state.setLastAvailability(lastAvailability);
}
}