/******************************************************************************* * Copyright (c) 2009,2010 QNX Software Systems * 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: * QNX Software Systems (Alena Laskavaia) - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.codan.core.param; import java.io.IOException; import java.io.StreamTokenizer; import org.eclipse.cdt.codan.core.model.CheckerLaunchMode; /** * Problem preference for launch type of the checker * * @since 2.0 */ public class LaunchModeProblemPreference extends MapProblemPreference { /** * Propery key */ public static final String KEY = "launchModes"; //$NON-NLS-1$ @Override public String getKey() { return KEY; } /** * constructor */ public LaunchModeProblemPreference() { } /** * @return true if values has not been set */ @Override public boolean isDefault() { CheckerLaunchMode[] values = CheckerLaunchMode.values(); for (int i = 0; i < values.length; i++) { CheckerLaunchMode checkerLaunchMode = values[i]; if (getChildDescriptor(checkerLaunchMode.name()) != null) return false; } return true; } /** * @param checkerLaunchMode - launch mode * @param value - value to set for the mode * @return preference */ public IProblemPreference addLaunchMode(CheckerLaunchMode checkerLaunchMode, boolean value) { BasicProblemPreference desc = new BasicProblemPreference(checkerLaunchMode.name(), checkerLaunchMode.name(), PreferenceType.TYPE_BOOLEAN); IProblemPreference desc1 = addChildDescriptor(desc); desc1.setValue(value); return desc1; } /** * @param mode * @return true if this mode enabled for this preference */ public boolean isRunningInMode(CheckerLaunchMode mode) { if (getChildDescriptor(mode.name()) == null) { if (mode == CheckerLaunchMode.RUN_ON_INC_BUILD) return isRunningInMode(CheckerLaunchMode.RUN_ON_FULL_BUILD); return true; // default is true } Object value = getChildValue(mode.name()); if (value instanceof Boolean) { return (Boolean) value; } return false; } /** * Set a single running mode to a value (if mode is not defined it value assumed to be true!) * @param mode * @param value */ public void setRunningMode(CheckerLaunchMode mode, boolean value) { if (getChildDescriptor(mode.name()) == null) { addLaunchMode(mode, value); } else { setChildValue(mode.name(), value); } } /** * Set modes in the argument list to true, and the rest to false * @param modes */ public void enableInLaunchModes(CheckerLaunchMode... modes) { CheckerLaunchMode[] all = CheckerLaunchMode.values(); for (int i = 0; i < all.length; i++) { CheckerLaunchMode mode = all[i]; if (getChildDescriptor(mode.name()) == null) { addLaunchMode(mode, false); } } for (int i = 0; i < modes.length; i++) { CheckerLaunchMode mode = modes[i]; setChildValue(mode.name(), true); } } /** * @return true if all modes are enabled (or this is parent mode) */ public boolean isAllEnabled() { return isRunningInMode(CheckerLaunchMode.RUN_AS_YOU_TYPE) && isRunningInMode(CheckerLaunchMode.RUN_ON_DEMAND) && isRunningInMode(CheckerLaunchMode.RUN_ON_FULL_BUILD); } /** * @return true if all modes are disabled */ public boolean isAllDisabled() { return !isRunningInMode(CheckerLaunchMode.RUN_AS_YOU_TYPE) && !isRunningInMode(CheckerLaunchMode.RUN_ON_DEMAND) && !isRunningInMode(CheckerLaunchMode.RUN_ON_FULL_BUILD); } @Override protected IProblemPreference importChildValue(String key, StreamTokenizer tokenizer) throws IOException { IProblemPreference desc = getChildDescriptor(key); if (desc == null) { CheckerLaunchMode mode = CheckerLaunchMode.valueOf(key); if (mode == null) throw new IllegalArgumentException(key); desc = addLaunchMode(mode, true); } if (desc != null && desc instanceof AbstractProblemPreference) { ((AbstractProblemPreference) desc).importValue(tokenizer); setChildValue(key, desc.getValue()); } return desc; } }