/******************************************************************************* * Copyright (c) 2008, 2010 IBM 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: * Serge Beauchamp (Freescale Semiconductor) - initial API and implementation * IBM Corporation - ongoing implementation *******************************************************************************/ package org.eclipse.core.internal.resources; import java.util.Iterator; import java.util.LinkedList; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; /** * Class for describing the characteristics of filters that are stored in the project description. */ public class FilterDescription implements IResourceFilterDescription, Comparable { private long id; /** * The resource type (IResourceFilter.INCLUDE_ONLY or IResourceFilter.EXCLUDE_ALL) and/or * IResourceFilter.INHERITABLE */ private int type; private FileInfoMatcherDescription matcherDescription; /** * The resource that this filter is applied to */ private IResource resource; public FilterDescription() { this.type= -1; } public FilterDescription(IResource resource, int type, FileInfoMatcherDescription matcherDescription) { super(); Assert.isNotNull(resource); this.type= type; this.matcherDescription= matcherDescription; this.resource= resource; } public boolean isInheritable() { return (getType() & IResourceFilterDescription.INHERITABLE) != 0; } public static LinkedList copy(LinkedList originalDescriptions, IResource resource) { LinkedList copy= new LinkedList(); Iterator it= originalDescriptions.iterator(); while (it.hasNext()) { FilterDescription desc= (FilterDescription)it.next(); FilterDescription newDesc= new FilterDescription(resource, desc.getType(), desc.getFileInfoMatcherDescription()); copy.add(newDesc); } return copy; } public long getId() { return id; } public void setId(long id) { this.id= id; } public int getType() { return type; } public void setType(int type) { this.type= type; } public void setResource(IResource resource) { this.resource= resource; } public IResource getResource() { return resource; } public FileInfoMatcherDescription getFileInfoMatcherDescription() { return matcherDescription; } public void setFileInfoMatcherDescription(FileInfoMatcherDescription matcherDescription) { this.matcherDescription= matcherDescription; } public int hashCode() { final int prime= 31; int result= 1; result= prime * result + (int)(id ^ (id >>> 32)); return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; FilterDescription other= (FilterDescription)obj; if (id != other.id) return false; return true; } /** * Compare filter descriptions in a way that sorts them topologically by path. */ public int compareTo(Object o) { FilterDescription that= (FilterDescription)o; IPath path1= this.getResource().getProjectRelativePath(); IPath path2= that.getResource().getProjectRelativePath(); int count1= path1.segmentCount(); int compare= count1 - path2.segmentCount(); if (compare != 0) return compare; for (int i= 0; i < count1; i++) { compare= path1.segment(i).compareTo(path2.segment(i)); if (compare != 0) return compare; } return 0; } public void delete(int updateFlags, IProgressMonitor monitor) throws CoreException { ((Container)getResource()).removeFilter(this, updateFlags, monitor); } }