/** | |
* 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(); | |
} | |
} |