/*******************************************************************************
* 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$
}
}