/******************************************************************************* * Copyright (c) 2005, 2008 Intel Corporation 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: * Intel Corporation - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.cdtvariables; import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.core.cdtvariables.CdtVariable; import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver; /** * This class represents the Build Macro that could be loaded * and stored in XML * * @since 3.0 * */ public class StorableCdtVariable extends CdtVariable { public static final String STRING_MACRO_ELEMENT_NAME = "stringMacro"; //$NON-NLS-1$ public static final String STRINGLIST_MACRO_ELEMENT_NAME = "stringListMacro"; //$NON-NLS-1$ public static final String NAME = "name"; //$NON-NLS-1$ public static final String VALUE = "value"; //$NON-NLS-1$ public static final String TYPE = "type"; //$NON-NLS-1$ public static final String VALUE_ELEMENT_NAME = "value"; //$NON-NLS-1$ public static final String VALUE_ELEMENT_VALUE = "name"; //$NON-NLS-1$ public static final String TYPE_TEXT = "VALUE_TEXT"; //$NON-NLS-1$ public static final String TYPE_TEXT_LIST = "VALUE_TEXT_LIST"; //$NON-NLS-1$ public static final String TYPE_PATH_FILE = "VALUE_PATH_FILE"; //$NON-NLS-1$ public static final String TYPE_PATH_FILE_LIST = "VALUE_PATH_FILE_LIST"; //$NON-NLS-1$ public static final String TYPE_PATH_DIR = "VALUE_PATH_DIR"; //$NON-NLS-1$ public static final String TYPE_PATH_DIR_LIST = "VALUE_PATH_DIR_LIST"; //$NON-NLS-1$ public static final String TYPE_PATH_ANY = "VALUE_PATH_ANY"; //$NON-NLS-1$ public static final String TYPE_PATH_ANY_LIST = "VALUE_PATH_ANY_LIST"; //$NON-NLS-1$ public StorableCdtVariable(String name, int type, String value){ super(name,type,value); } public StorableCdtVariable(String name, int type, String value[]){ super(name,type,value); } public StorableCdtVariable(ICStorageElement element){ load(element); } private void load(ICStorageElement element){ fName = element.getAttribute(NAME); fType = typeStringToInt(element.getAttribute(TYPE)); if(!CdtVariableResolver.isStringListVariable(fType)) fStringValue = element.getAttribute(VALUE); else { ICStorageElement nodeList[] = element.getChildren(); List<String> values = new ArrayList<String>(); for (int i = 0; i < nodeList.length; ++i) { ICStorageElement node = nodeList[i]; if (node.getName().equals(VALUE_ELEMENT_NAME)) { values.add(node.getAttribute(VALUE_ELEMENT_VALUE)); } } fStringListValue = values.toArray(new String[values.size()]); } } private int typeStringToInt(String typeString){ int type; if(TYPE_TEXT_LIST.equals(typeString)) type = VALUE_TEXT_LIST; else if(TYPE_PATH_FILE.equals(typeString)) type = VALUE_PATH_FILE; else if(TYPE_PATH_FILE_LIST.equals(typeString)) type = VALUE_PATH_FILE_LIST; else if(TYPE_PATH_DIR.equals(typeString)) type = VALUE_PATH_DIR; else if(TYPE_PATH_DIR_LIST.equals(typeString)) type = VALUE_PATH_DIR_LIST; else if(TYPE_PATH_ANY.equals(typeString)) type = VALUE_PATH_ANY; else if(TYPE_PATH_ANY_LIST.equals(typeString)) type = VALUE_PATH_ANY_LIST; else type = VALUE_TEXT; return type; } private String typeIntToString(int type){ String stringType; switch(type){ case VALUE_TEXT_LIST: stringType = TYPE_TEXT_LIST; break; case VALUE_PATH_FILE: stringType = TYPE_PATH_FILE; break; case VALUE_PATH_FILE_LIST: stringType = TYPE_PATH_FILE_LIST; break; case VALUE_PATH_DIR: stringType = TYPE_PATH_DIR; break; case VALUE_PATH_DIR_LIST: stringType = TYPE_PATH_DIR_LIST; break; case VALUE_PATH_ANY: stringType = TYPE_PATH_ANY; break; case VALUE_PATH_ANY_LIST: stringType = TYPE_PATH_ANY_LIST; break; case VALUE_TEXT: default: stringType = TYPE_TEXT; break; } return stringType; } public void serialize(ICStorageElement element){ if(fName != null) element.setAttribute(NAME,fName); element.setAttribute(TYPE,typeIntToString(fType)); if(!CdtVariableResolver.isStringListVariable(fType)){ if(fStringValue != null) element.setAttribute(VALUE,fStringValue); } else { if(fStringListValue != null && fStringListValue.length > 0){ for(int i = 0; i < fStringListValue.length; i++){ ICStorageElement valEl = element.createChild(VALUE_ELEMENT_NAME); if(fStringListValue[i] != null) valEl.setAttribute(VALUE_ELEMENT_VALUE, fStringListValue[i]); } } } } }