/******************************************************************************* * Copyright (c) 2015 Red Hat. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.vagrant.ui.propertytesters; import org.eclipse.core.expressions.PropertyTester; import org.eclipse.linuxtools.vagrant.core.EnumVMStatus; import org.eclipse.linuxtools.vagrant.core.IVagrantVM; public class VMPropertyTester extends PropertyTester { public static final String IS_RUNNING = "isRunning"; //$NON-NLS-1$ public static final String IS_SHUTOFF = "isShutoff"; //$NON-NLS-1$ public static final String IS_PAUSED = "isPaused"; //$NON-NLS-1$ public static final String IS_REMOVABLE = "isRemovable"; //$NON-NLS-1$ public static final String IS_UNKNOWN = "isUnknown"; //$NON-NLS-1$ @Override public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) { if (receiver instanceof IVagrantVM) { final IVagrantVM vm = (IVagrantVM) receiver; switch (property) { case IS_RUNNING: return checkIfStateMatchesExpectation(vm, EnumVMStatus.RUNNING, expectedValue); case IS_SHUTOFF: return checkIfStateMatchesExpectation(vm, EnumVMStatus.SHUTOFF, expectedValue); case IS_UNKNOWN: return checkIfStateMatchesExpectation(vm, EnumVMStatus.UNKNOWN, expectedValue); case IS_PAUSED: return checkIfStateMatchesExpectation(vm, EnumVMStatus.PAUSED, expectedValue); case IS_REMOVABLE: return checkIfStateMatchesExpectation(vm, EnumVMStatus.SHUTOFF, expectedValue) || checkIfStateMatchesExpectation(vm, EnumVMStatus.UNKNOWN, expectedValue); } } return false; } /** * Checks if the status of the given {@link IDockerContainer} * * @param container the given {@link IDockerContainer} * @param expectedStatus the {@link IDockerContainer} status to check * @param expectedMatch the container status result to check * @return {@code true} if the current status matches the expectation, {@code false} otherwise. */ private boolean checkIfStateMatchesExpectation(final IVagrantVM vm, final EnumVMStatus expectedStatus, final Object expectedMatch) { if(expectedMatch == null) { return false; } final EnumVMStatus containerStatus = EnumVMStatus.fromStatusMessage(vm.state()); return expectedMatch.equals((containerStatus == expectedStatus)); } }