/******************************************************************************* * Copyright (c) 2007, 2011 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 * IBM Corporation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.core; import org.eclipse.cdt.core.settings.model.ICLibraryFileEntry; import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.internal.core.SafeStringInterner; import org.eclipse.cdt.managedbuilder.internal.core.Option; public final class OptionStringValue { private static final String ATTR_SRC_PATH = "srcPath"; //$NON-NLS-1$ private static final String ATTR_SRC_ROOT_PATH = "srcRootPath"; //$NON-NLS-1$ private static final String ATTR_SRC_PREFIX_MAPPING = "srcPrefixMapping"; //$NON-NLS-1$ private String value; private String srcPath; private String srcRootPath; private String srcPrefixMapping; private boolean isBuiltIn; public OptionStringValue(ICStorageElement el){ if (el.getAttribute(Option.LIST_ITEM_BUILTIN) != null) { isBuiltIn = Boolean.valueOf(el.getAttribute(Option.LIST_ITEM_BUILTIN)).booleanValue(); } else { isBuiltIn = false; } value = el.getAttribute(Option.LIST_ITEM_VALUE); srcPath = el.getAttribute(ATTR_SRC_PATH); srcRootPath = el.getAttribute(ATTR_SRC_ROOT_PATH); srcPrefixMapping = el.getAttribute(ATTR_SRC_PREFIX_MAPPING); if(value == null) value = Option.EMPTY_STRING; } public OptionStringValue(IManagedConfigElement el){ if (el.getAttribute(Option.LIST_ITEM_BUILTIN) != null) { isBuiltIn = Boolean.valueOf(el.getAttribute(Option.LIST_ITEM_BUILTIN)).booleanValue(); } else { isBuiltIn = false; } value = SafeStringInterner.safeIntern(el.getAttribute(Option.LIST_ITEM_VALUE)); srcPath = SafeStringInterner.safeIntern(el.getAttribute(ATTR_SRC_PATH)); srcRootPath = SafeStringInterner.safeIntern(el.getAttribute(ATTR_SRC_ROOT_PATH)); srcPrefixMapping = SafeStringInterner.safeIntern(el.getAttribute(ATTR_SRC_PREFIX_MAPPING)); if(value == null) value = Option.EMPTY_STRING; } public OptionStringValue(OptionStringValue base){ isBuiltIn = base.isBuiltIn; value = base.value; srcPath = base.srcPath; srcRootPath = base.srcRootPath; srcPrefixMapping = base.srcPrefixMapping; } public OptionStringValue(String value){ this(value, false); } public OptionStringValue(String value, boolean isBuiltIn){ this(value, isBuiltIn, null, null, null); } /** * source path settings are applicable for the {@link IOption#LIBRARY_FILES} only */ public OptionStringValue(String value, boolean isBuiltIn, String srcPath, String srcRootPath, String srcPrefixMapping){ if(value == null) value = Option.EMPTY_STRING; this.isBuiltIn = isBuiltIn; this.value = value; this.srcPath = srcPath; this.srcRootPath = srcRootPath; this.srcPrefixMapping = srcPrefixMapping; } public void serialize(ICStorageElement el){ el.setAttribute(Option.LIST_ITEM_VALUE, value); el.setAttribute(Option.LIST_ITEM_BUILTIN, Boolean.toString(isBuiltIn)); if(srcPath != null) el.setAttribute(ATTR_SRC_PATH, srcPath); if(srcRootPath != null) el.setAttribute(ATTR_SRC_ROOT_PATH, srcRootPath); if(srcPrefixMapping != null) el.setAttribute(ATTR_SRC_PREFIX_MAPPING, srcPrefixMapping); } public boolean isBuiltIn(){ return isBuiltIn; } public String getValue(){ return value; } /** * source attachment settings are applicable for the {@link IOption#LIBRARY_FILES} only * added to fully support the {@link ICLibraryFileEntry} settings * * @see ICLibraryFileEntry * @see ICLibraryFileEntry#getSourceAttachmentPath() * @see ICLibraryFileEntry#getSourceAttachmentRootPath() * @see ICLibraryFileEntry#getSourceAttachmentPrefixMapping() * */ public String getSourceAttachmentPath(){ return srcPath; } /** * source attachment settings are applicable for the {@link IOption#LIBRARY_FILES} only * added to fully support the {@link ICLibraryFileEntry} settings * * @see ICLibraryFileEntry * @see ICLibraryFileEntry#getSourceAttachmentPath() * @see ICLibraryFileEntry#getSourceAttachmentRootPath() * @see ICLibraryFileEntry#getSourceAttachmentPrefixMapping() * */ public String getSourceAttachmentRootPath(){ return srcRootPath; } /** * source attachment settings are applicable for the {@link IOption#LIBRARY_FILES} only * added to fully support the {@link ICLibraryFileEntry} settings * * @see ICLibraryFileEntry * @see ICLibraryFileEntry#getSourceAttachmentPath() * @see ICLibraryFileEntry#getSourceAttachmentRootPath() * @see ICLibraryFileEntry#getSourceAttachmentPrefixMapping() * */ public String getSourceAttachmentPrefixMapping(){ return srcPrefixMapping; } @Override public boolean equals(Object obj) { if(obj == this) return true; if(!(obj instanceof OptionStringValue)) return false; OptionStringValue other = (OptionStringValue)obj; if(isBuiltIn != other.isBuiltIn) return false; if(!CDataUtil.objectsEqual(value, other.value)) return false; if(!CDataUtil.objectsEqual(srcPath, other.srcPath)) return false; if(!CDataUtil.objectsEqual(srcRootPath, other.srcRootPath)) return false; if(!CDataUtil.objectsEqual(srcPrefixMapping, other.srcPrefixMapping)) return false; return true; } @Override public int hashCode() { return code(value); } private static int code(String str){ return str != null ? str.hashCode() : 0; } @Override public String toString() { return new StringBuffer().append("ov:").append(value.toString()).toString(); //$NON-NLS-1$ } }