package rocks.inspectit.ui.rcp.ci.testers;
import org.apache.commons.lang.ArrayUtils;
import org.eclipse.core.expressions.PropertyTester;
import rocks.inspectit.shared.cs.ci.business.impl.ApplicationDefinition;
import rocks.inspectit.shared.cs.ci.business.impl.BusinessTransactionDefinition;
import rocks.inspectit.ui.rcp.provider.IApplicationProvider;
/**
* Property tester for the business context.
*
* @author Alexander Wert
*
*/
public class BusinessContextTester extends PropertyTester {
/**
* Tester property for the default application.
*/
public static final String IS_DEFAULT_APP_PROPERTY = "isDefaultApplication";
/**
* Tester property for the default business transaction.
*/
public static final String IS_DEFAULT_BTX_PROPERTY = "isDefaultBusinessTransaction";
/**
* Tester property for the moving up capability.
*/
public static final String CAN_MOVE_UP_PROPERTY = "canMoveUp";
/**
* Tester property for the moving down capability.
*/
public static final String CAN_MOVE_DOWN_PROPERTY = "canMoveDown";
/**
* {@inheritDoc}
*/
@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (receiver instanceof IApplicationProvider) {
IApplicationProvider applicationProvider = (IApplicationProvider) receiver;
if (IS_DEFAULT_APP_PROPERTY.equals(property)) {
return applicationProvider.getApplication().getId() == ApplicationDefinition.DEFAULT_ID;
} else if (CAN_MOVE_UP_PROPERTY.equals(property)) {
return applicationProvider.getIndexInParentList() > 0;
} else if (CAN_MOVE_DOWN_PROPERTY.equals(property)) {
int listSize = applicationProvider.getParentList().size();
return applicationProvider.getIndexInParentList() < listSize - 2;
}
}
if (receiver instanceof BusinessTransactionDefinition) {
BusinessTransactionDefinition businessTransactionDef = (BusinessTransactionDefinition) receiver;
if (IS_DEFAULT_BTX_PROPERTY.equals(property)) {
return businessTransactionDef.getId() == BusinessTransactionDefinition.DEFAULT_ID;
} else if (CAN_MOVE_UP_PROPERTY.equals(property) && ArrayUtils.isNotEmpty(args) && args[0] instanceof ApplicationDefinition) {
return ((ApplicationDefinition) args[0]).getBusinessTransactionDefinitions().indexOf(businessTransactionDef) > 0;
} else if (CAN_MOVE_DOWN_PROPERTY.equals(property) && ArrayUtils.isNotEmpty(args) && args[0] instanceof ApplicationDefinition) {
int index = ((ApplicationDefinition) args[0]).getBusinessTransactionDefinitions().indexOf(businessTransactionDef);
return index >= 0 && index < ((ApplicationDefinition) args[0]).getBusinessTransactionDefinitions().size() - 2;
}
}
return false;
}
}