/*******************************************************************************
* Copyright (c) 2005, 2007 Symbian Ltd and others.
* 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:
* Symbian Ltd - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.core;
import java.util.Arrays;
import java.util.List;
/**
* This class implements the default managed option value handler for MBS.
* It is also be intended to be used as a base class for other value handlers.
*/
public class ManagedOptionValueHandler implements
IManagedOptionValueHandler {
/*
* E N A B L E U S E A S B A S E C L A S S A N D
* D E F A U L T I M P L E M E N T A T I O N
*/
private static ManagedOptionValueHandler mbsValueHandler;
protected ManagedOptionValueHandler() {
mbsValueHandler = null;
}
public static ManagedOptionValueHandler getManagedOptionValueHandler() {
if( mbsValueHandler == null ) {
mbsValueHandler = new ManagedOptionValueHandler();
}
return mbsValueHandler;
}
/*
* D E F A U L T I M P L E M E N T A T I O N S O F I N T E R F A C E
*/
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedOptionValueHandler#handleValue(IConfiguration,IToolChain,IOption,String,int)
*/
public boolean handleValue(IBuildObject configuration,
IHoldsOptions holder,
IOption option,
String extraArgument, int event)
{
/*
// The following is for debug purposes and thus normally commented out
String configLabel = "???"; //$NON-NLS-1$
String holderLabel = "???"; //$NON-NLS-1$
String eventLabel = "???"; //$NON-NLS-1$
if (configuration instanceof IConfiguration) {
configLabel = "IConfiguration"; //$NON-NLS-1$
} else if (configuration instanceof IResourceConfiguration) {
configLabel = "IResourceConfiguration"; //$NON-NLS-1$
}
if (holder instanceof IToolChain) {
holderLabel = "IToolChain"; //$NON-NLS-1$
} else if (holder instanceof ITool) {
holderLabel = "ITool"; //$NON-NLS-1$
}
switch (event) {
case EVENT_OPEN: eventLabel = "EVENT_OPEN"; break; //$NON-NLS-1$
case EVENT_APPLY: eventLabel = "EVENT_APPLY"; break; //$NON-NLS-1$
case EVENT_SETDEFAULT: eventLabel = "EVENT_SETDEFAULT"; break; //$NON-NLS-1$
case EVENT_CLOSE: eventLabel = "EVENT_CLOSE"; break; //$NON-NLS-1$
}
// Print the event
System.out.println(eventLabel + "(" + //$NON-NLS-1$
configLabel + " = " + //$NON-NLS-1$
configuration.getId() + ", " + //$NON-NLS-1$
holderLabel + " = " + //$NON-NLS-1$
holder.getId() + ", " + //$NON-NLS-1$
"IOption = " + //$NON-NLS-1$
option.getId() + ", " + //$NON-NLS-1$
"String = " + //$NON-NLS-1$
extraArgument + ")"); //$NON-NLS-1$
*/
// The event was not handled, thus return false
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedOptionValueHandler#isDefaultValue(IConfiguration,IToolChain,IOption,String)
*/
public boolean isDefaultValue(IBuildObject configuration, IHoldsOptions holder, IOption option, String extraArgument) {
// Get the default Value
Object defaultValue = option.getDefaultValue();
if (defaultValue instanceof List) {
@SuppressWarnings("unchecked")
List<String> list = (List<String>) defaultValue;
defaultValue = list.toArray(new String[list.size()]);
}
try {
// Figure out which type the option is and implement default behaviour for it.
switch (option.getValueType()) {
case IOption.STRING:
if (option.getStringValue().equals(defaultValue)) {
return true;
}
break;
case IOption.BOOLEAN:
if (option.getBooleanValue() == ((Boolean)defaultValue).booleanValue()) {
return true;
}
break;
case IOption.ENUMERATED:
if (option.getValue().toString().equals(defaultValue.toString())) {
return true;
}
break;
case IOption.INCLUDE_PATH:
case IOption.UNDEF_INCLUDE_PATH:
if (Arrays.equals(option.getBasicStringListValue(), (String[])defaultValue)) {
return true;
}
break;
case IOption.STRING_LIST:
if (Arrays.equals(option.getStringListValue(), (String[])defaultValue)) {
return true;
}
break;
case IOption.PREPROCESSOR_SYMBOLS:
case IOption.UNDEF_PREPROCESSOR_SYMBOLS:
if (Arrays.equals(option.getBasicStringListValue(), (String[])defaultValue)) {
return true;
}
break;
case IOption.LIBRARIES:
if (Arrays.equals(option.getLibraries(), (String[])defaultValue)) {
return true;
}
break;
case IOption.OBJECTS:
if (Arrays.equals(option.getUserObjects(), (String[])defaultValue)) {
return true;
}
break;
case IOption.INCLUDE_FILES:
case IOption.LIBRARY_PATHS:
case IOption.LIBRARY_FILES:
case IOption.MACRO_FILES:
case IOption.UNDEF_INCLUDE_FILES:
case IOption.UNDEF_LIBRARY_PATHS:
case IOption.UNDEF_LIBRARY_FILES:
case IOption.UNDEF_MACRO_FILES:
default:
if (Arrays.equals(option.getBasicStringListValue(), (String[])defaultValue)) {
return true;
}
break;
}
} catch (BuildException e) {
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedOptionValueHandler#isEnumValueAppropriate(IConfiguration,IToolChain,IOption,String,String)
*/
public boolean isEnumValueAppropriate(IBuildObject configuration,
IHoldsOptions holder,
IOption option,
String extraArgument, String enumValue)
{
// By default return true for all the enum values.
return true;
}
}