/** * Copyright (c) 2009 Mia-Software. * 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: * Fabien GIQUEL (Mia-Software) - initial API and implementation * Romain DERVAUX (Mia-Software) * Nicolas Bros (Mia-Software) - Bug 335003 - [Discoverer] : Existing Discoverers Refactoring based on new framework *******************************************************************************/ package org.eclipse.modisco.java.discoverer; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; /** * Java discovery : bean for storing elements to analyze and their associated * options. * <p> * Note: having a separate class allows to define graphical elements (e.g cell * editor) for this specific type. */ public class ElementsToAnalyze { /** The context project */ private IJavaProject fJavaProject; public void setJavaProject(final IJavaProject javaProject) { this.fJavaProject = javaProject; } public IJavaProject getJavaProject() { return this.fJavaProject; } /** * The artifacts to analyze. Keys may be {@link IJavaProject} or * {@link IPackageFragment}. Values are option maps for the discoverer. */ private final Map<Object, Map<String, Object>> elementsAndOptions; public ElementsToAnalyze(final IJavaProject javaProject) { this.elementsAndOptions = new LinkedHashMap<Object, Map<String, Object>>(); this.fJavaProject = javaProject; } /** @return artifacts to be analyzed. The returned Set is unmodifiable. */ public Set<Object> getElementsToDiscover() { return Collections.unmodifiableSet(this.elementsAndOptions.keySet()); } /** * @return options for analyzing the given artifact. The returned * {@link Map} can be modified. */ public Map<String, Object> getDiscoveryOptions(final Object element) { return this.elementsAndOptions.get(element); } /** * Adds an artifact to analyze. * * @param element * a {@link IJavaProject} or a {@link IPackageFragment} */ public void addElementToDiscover(final Object element) { if (!this.elementsAndOptions.containsKey(element)) { this.elementsAndOptions.put(element, new HashMap<String, Object>()); } } /** Removes an artifact to analyze. */ public void removeElementToDiscover(final Object element) { this.elementsAndOptions.remove(element); } /** Clear the list of artifacts to analyze. */ public void cleanElementsToDiscover() { if (this.elementsAndOptions != null) { this.elementsAndOptions.clear(); } } @Override protected ElementsToAnalyze clone() throws CloneNotSupportedException { ElementsToAnalyze elementsToAnalyze = new ElementsToAnalyze(this.fJavaProject); elementsToAnalyze.elementsAndOptions.putAll(this.elementsAndOptions); return elementsToAnalyze; } @Override public String toString() { StringBuilder builder = new StringBuilder(); boolean first = true; for (Object object : getElementsToDiscover()) { if (!first) { builder.append(", "); //$NON-NLS-1$ } first = false; if (object instanceof IJavaProject) { IJavaProject javaProject = (IJavaProject) object; builder.append(javaProject.getElementName()); } else if (object instanceof IPackageFragmentRoot) { IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) object; builder.append(packageFragmentRoot.getElementName()); } else { builder.append(object.toString()); } } return builder.toString(); } }