/*******************************************************************************
* Copyright (c) 2007, 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.core.settings.model;
import java.util.Arrays;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.IPath;
public abstract class ACExclusionFilterEntry extends ACPathEntry implements ICExclusionPatternPathEntry {
private IPath[] exclusionPatterns;
private final static char[][] UNINIT_PATTERNS = new char[][] { "Non-initialized yet".toCharArray() }; //$NON-NLS-1$
char[][]fullCharExclusionPatterns = UNINIT_PATTERNS;
ACExclusionFilterEntry(IPath path, IPath exclusionPatterns[] , int flags) {
super(path, flags);
this.exclusionPatterns = exclusionPatterns != null ? (IPath[])exclusionPatterns.clone() : new IPath[0];
}
ACExclusionFilterEntry(IFolder rc, IPath exclusionPatterns[], int flags) {
super(rc, flags);
this.exclusionPatterns = exclusionPatterns != null ? (IPath[])exclusionPatterns.clone() : new IPath[0];
}
ACExclusionFilterEntry(String value, IPath exclusionPatterns[], int flags) {
super(value, flags);
this.exclusionPatterns = exclusionPatterns != null ? (IPath[])exclusionPatterns.clone() : new IPath[0];
}
@Override
protected final boolean isFile() {
return false;
}
/**
* Returns the exclusion patterns
* @return IPath[]
*/
public IPath[] getExclusionPatterns() {
return exclusionPatterns.length != 0 ? (IPath[])exclusionPatterns.clone() : exclusionPatterns;
}
/**
* Returns a char based representation of the exclusions patterns full path.
*/
public char[][] fullExclusionPatternChars() {
if (this.fullCharExclusionPatterns == UNINIT_PATTERNS) {
int length = this.exclusionPatterns.length;
this.fullCharExclusionPatterns = new char[length][];
IPath path = getFullPath();
if(path == null)
path = getLocation();
IPath prefixPath = path.removeTrailingSeparator();
for (int i = 0; i < length; i++) {
this.fullCharExclusionPatterns[i] =
prefixPath.append(this.exclusionPatterns[i]).toString().toCharArray();
}
}
return this.fullCharExclusionPatterns;
}
@Override
public boolean equals(Object other) {
if(!super.equals(other))
return false;
ACExclusionFilterEntry otherEntry = (ACExclusionFilterEntry)other;
return Arrays.equals(exclusionPatterns, otherEntry.exclusionPatterns);
}
@Override
public int hashCode() {
return super.hashCode() + exclusionPatterns.hashCode();
}
@Override
public boolean equalsByContents(ICSettingEntry entry) {
if(!super.equalsByContents(entry))
return false;
ACExclusionFilterEntry otherEntry = (ACExclusionFilterEntry)entry;
return Arrays.equals(exclusionPatterns, otherEntry.exclusionPatterns);
}
@Override
protected String contentsToString() {
String result = super.contentsToString();
if(exclusionPatterns.length != 0){
StringBuffer buf = new StringBuffer();
buf.append(result);
buf.append(" ; exclude: "); //$NON-NLS-1$
for(int i = 0; i < exclusionPatterns.length; i++){
if(i != 0)
buf.append(", "); //$NON-NLS-1$
buf.append(exclusionPatterns[i].toString());
}
result = buf.toString();
}
return result;
}
}