/******************************************************************************* * Copyright (c) 2007, 2014 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 final static char[][] UNINIT_PATTERNS = new char[][] { "Non-initialized yet".toCharArray() }; //$NON-NLS-1$ private final IPath[] exclusionPatterns; /** Calculated value, does not have to be final */ 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]; } /** * @since 5.4 */ @Override public final boolean isFile() { return false; } /** * Returns the exclusion patterns * @return IPath[] */ @Override public IPath[] getExclusionPatterns() { return exclusionPatterns.length != 0 ? (IPath[]) exclusionPatterns.clone() : exclusionPatterns; } /** * Returns a char based representation of the exclusions patterns full path. */ @Override 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 obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; ACExclusionFilterEntry other = (ACExclusionFilterEntry) obj; if (!Arrays.equals(exclusionPatterns, other.exclusionPatterns)) return false; return true; } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + Arrays.hashCode(exclusionPatterns); return result; } @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) { StringBuilder buf = new StringBuilder(); 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; } }