/******************************************************************************* * Copyright (c) 2011 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.resources; import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; /** * Represents a particular instance of an exclusion. E.g., if an exclusion allowed for the exclusion of a list * individual resources, there would be one exclusion instance per resource. Each exclusion instance is * presented in the user interface as a child of the exclusion. * * Clients may extend this class to provide custom implementations for their exclusion type. * * <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in progress. There * is no guarantee that this API will work or that it will remain the same. Please do not use this API without * consulting with the CDT team. * * @author crecoskie * @since 5.3 * */ public class ExclusionInstance { public static final String CLASS_ATTRIBUTE_NAME = "class"; //$NON-NLS-1$ public static final String CONTRIBUTOR_ID_ATTRIBUTE_NAME = "contributorId"; //$NON-NLS-1$ public static final String DISPLAY_STRING_ATTRIBUTE_NAME = "displayString"; //$NON-NLS-1$ public static final String EXCLUSION_ELEMENT_NAME = "exclusion"; //$NON-NLS-1$ public static final String EXCLUSION_TYPE_ATTRIBUTE_NAME = "exclusionType"; //$NON-NLS-1$ public static final String EXTENSION_DATA_ELEMENT_NAME = "extensionData"; //$NON-NLS-1$ public static final String FILE_VALUE = "FILE"; //$NON-NLS-1$ public static final String FOLDER_VALUE = "FOLDER"; //$NON-NLS-1$ public static final String INSTANCE_ELEMENT_NAME = "instance"; //$NON-NLS-1$ public static final String RESOURCE_VALUE = "RESOURCE"; //$NON-NLS-1$ public static final String WORKSPACE_PATH_ATTRIBUTE_NAME = "workspacePath"; //$NON-NLS-1$ public synchronized static ExclusionInstance loadInstanceData(ICStorageElement instanceElement, RefreshScopeManager manager) { String className = instanceElement.getAttribute(CLASS_ATTRIBUTE_NAME); ExclusionInstance newInstance = null; // see if there is a custom instance class newInstance = manager.getInstanceForClassName(className); if (newInstance == null) { newInstance = new ExclusionInstance(); } // load the exclusion type String exclusionTypeString = instanceElement.getAttribute(EXCLUSION_TYPE_ATTRIBUTE_NAME); if (exclusionTypeString != null) { if (exclusionTypeString.equals(FILE_VALUE)) { newInstance.fInstanceExclusionType = org.eclipse.cdt.core.resources.ExclusionType.FILE; } else if (exclusionTypeString.equals(FOLDER_VALUE)) { newInstance.fInstanceExclusionType = org.eclipse.cdt.core.resources.ExclusionType.FOLDER; } else if (exclusionTypeString.equals(RESOURCE_VALUE)) { newInstance.fInstanceExclusionType = org.eclipse.cdt.core.resources.ExclusionType.RESOURCE; } else { // error return null; } } // load resource path, use it to get the corresponding resource String resourcePath = instanceElement.getAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME); if (resourcePath != null) { newInstance.fResource = ResourcesPlugin.getWorkspace().getRoot() .findMember(resourcePath); } // load display string newInstance.fDisplayString = instanceElement.getAttribute(DISPLAY_STRING_ATTRIBUTE_NAME); // load any data from extenders newInstance.loadExtendedInstanceData(instanceElement); return newInstance; } protected String fDisplayString; protected ExclusionType fInstanceExclusionType; protected RefreshExclusion fParent; protected IResource fResource; /** * @return a String corresponding to the human-readable name for this exclusion instance. Examples of this * would be the resource name for a resource based exclusion, or the file extension excluded by a * file extension exclusion. */ public synchronized String getDisplayString() { return fDisplayString; } public synchronized ExclusionType getExclusionType() { return fInstanceExclusionType; } /** * Returns the parent exclusion of this exclusion instance. * * @return RefreshExclusion */ public synchronized RefreshExclusion getParentExclusion() { return fParent; } /** * If there is a resource directly associated with this exclusion instance, returns the resource. * * @return IResource */ public synchronized IResource getResource() { return fResource; } protected synchronized void loadExtendedInstanceData(ICStorageElement child) { // override to provide extension specific behaviour if desired } protected synchronized void persistExtendedInstanceData(ICStorageElement instanceElement) { // override to provide extension specific behaviour if desired } public synchronized void persistInstanceData(ICStorageElement exclusionElement) { ICStorageElement instanceElement = exclusionElement.createChild(INSTANCE_ELEMENT_NAME); // persist the type of the object we are instanceElement.setAttribute(CLASS_ATTRIBUTE_NAME, this.getClass().getName()); // persist the exclusion type String exclusionType = null; switch (getExclusionType()) { case FILE: exclusionType = FILE_VALUE; break; case FOLDER: exclusionType = FOLDER_VALUE; break; case RESOURCE: exclusionType = RESOURCE_VALUE; break; } if (exclusionType != null) { instanceElement.setAttribute(EXCLUSION_TYPE_ATTRIBUTE_NAME, exclusionType); } // persist resource path if (fResource != null) { instanceElement.setAttribute(WORKSPACE_PATH_ATTRIBUTE_NAME, fResource.getFullPath() .toString()); } // persist display string if (fDisplayString != null) { instanceElement.setAttribute(DISPLAY_STRING_ATTRIBUTE_NAME, fDisplayString); } // persist any data from extenders persistExtendedInstanceData(instanceElement); } public synchronized void setDisplayString(String displayString) { fDisplayString = displayString; } public synchronized void setExclusionType(ExclusionType type) { fInstanceExclusionType = type; } /** * @param parent * the RefreshExclusion to set as the parent. */ public synchronized void setParentExclusion(RefreshExclusion parent) { fParent = parent; } public synchronized void setResource(IResource resource) { fResource = resource; } }