/******************************************************************************* * Copyright (c) 2007, 2009 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.core.settings.model; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; public final class CLibraryFileEntry extends ACPathEntry implements ICLibraryFileEntry { private IPath fSourceAttachmentPath; private IPath fSourceAttachmentRootPath; private IPath fSourceAttachmentPrefixMapping; public CLibraryFileEntry(String value, int flags) { this(value, flags, null, null, null); } public CLibraryFileEntry(IPath location, int flags) { this(location, flags, null, null, null); } public CLibraryFileEntry(IFile rc, int flags) { this(rc, flags, null, null, null); } public CLibraryFileEntry(String value, int flags, IPath sourceAttachmentPath, IPath sourceAttachmentRootPath, IPath sourceAttachmentPrefixMapping) { super(value, flags); setSourceAttachmentSettings(sourceAttachmentPath, sourceAttachmentRootPath, sourceAttachmentPrefixMapping); } public CLibraryFileEntry(IPath location, int flags, IPath sourceAttachmentPath, IPath sourceAttachmentRootPath, IPath sourceAttachmentPrefixMapping) { super(location, flags); setSourceAttachmentSettings(sourceAttachmentPath, sourceAttachmentRootPath, sourceAttachmentPrefixMapping); } public CLibraryFileEntry(IFile rc, int flags, IPath sourceAttachmentPath, IPath sourceAttachmentRootPath, IPath sourceAttachmentPrefixMapping) { super(rc, flags); setSourceAttachmentSettings(sourceAttachmentPath, sourceAttachmentRootPath, sourceAttachmentPrefixMapping); } private void setSourceAttachmentSettings(IPath sourceAttachmentPath, IPath sourceAttachmentRootPath, IPath sourceAttachmentPrefixMapping){ if(sourceAttachmentPath == null) return; fSourceAttachmentPath = sourceAttachmentPath; fSourceAttachmentRootPath = sourceAttachmentRootPath != null ? sourceAttachmentRootPath : Path.EMPTY; fSourceAttachmentPrefixMapping = sourceAttachmentPrefixMapping != null ? sourceAttachmentPrefixMapping : Path.EMPTY; } public final int getKind() { return LIBRARY_FILE; } @Override public final boolean isFile() { return true; } public IPath getSourceAttachmentPath() { return fSourceAttachmentPath; } public IPath getSourceAttachmentPrefixMapping() { return fSourceAttachmentPrefixMapping; } public IPath getSourceAttachmentRootPath() { return fSourceAttachmentRootPath; } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((fSourceAttachmentPath == null) ? 0 : fSourceAttachmentPath.hashCode()); result = prime * result + ((fSourceAttachmentPrefixMapping == null) ? 0 : fSourceAttachmentPrefixMapping.hashCode()); result = prime * result + ((fSourceAttachmentRootPath == null) ? 0 : fSourceAttachmentRootPath.hashCode()); return result; } @Override public boolean equals(Object other) { if(other == this) return true; if(!super.equals(other)) return false; return sourceAttachmentSettingsEqual((CLibraryFileEntry)other); } @Override public boolean equalsByContents(ICSettingEntry entry) { if(entry == this) return true; if(!super.equalsByContents(entry)) return false; return sourceAttachmentSettingsEqual((CLibraryFileEntry)entry); } private boolean sourceAttachmentSettingsEqual(CLibraryFileEntry otherEntry){ if(!CDataUtil.objectsEqual(fSourceAttachmentPath, otherEntry.fSourceAttachmentPath)) return false; if(!CDataUtil.objectsEqual(fSourceAttachmentRootPath, otherEntry.fSourceAttachmentRootPath)) return false; if(!CDataUtil.objectsEqual(fSourceAttachmentPrefixMapping, otherEntry.fSourceAttachmentPrefixMapping)) return false; return true; } @Override protected String contentsToString() { String result = super.contentsToString(); if(fSourceAttachmentPath != null){ StringBuffer buf = new StringBuffer(); buf.append(result); buf.append(" ; srcPath=").append(fSourceAttachmentPath); //$NON-NLS-1$ buf.append("; srcRoot=").append(fSourceAttachmentRootPath); //$NON-NLS-1$ buf.append("; srcMapping=").append(fSourceAttachmentPrefixMapping); //$NON-NLS-1$ result = buf.toString(); } return result; } }