Copyright (c) 2005, 2008 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2005, 2008 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ltk.core.refactoring.model;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.mapping.ModelProvider;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceMappingContext;
import org.eclipse.core.resources.mapping.ResourceTraversal;
import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;
import org.eclipse.ltk.core.refactoring.history.RefactoringHistory;
import org.eclipse.ltk.internal.core.refactoring.RefactoringCorePlugin;
import org.eclipse.ltk.internal.core.refactoring.history.RefactoringHistoryService;
Partial implementation of a resource mapping for a refactoring history
object.
Note: this class is intended to be implemented by clients which need to
enhance a model provider with a refactoring model.
See Also: - ResourceMapping
- ModelProvider
Since: 3.2
/**
* Partial implementation of a resource mapping for a refactoring history
* object.
* <p>
* Note: this class is intended to be implemented by clients which need to
* enhance a model provider with a refactoring model.
* </p>
*
* @see ResourceMapping
* @see ModelProvider
*
* @since 3.2
*/
public abstract class AbstractRefactoringHistoryResourceMapping extends ResourceMapping {
The refactoring history /** The refactoring history */
private final RefactoringHistory fRefactoringHistory;
The resource traversals /** The resource traversals */
private ResourceTraversal[] fResourceTraversals= null;
Creates a new abstract refactoring history resource mapping.
Params: - history –
the refactoring history
/**
* Creates a new abstract refactoring history resource mapping.
*
* @param history
* the refactoring history
*/
protected AbstractRefactoringHistoryResourceMapping(final RefactoringHistory history) {
Assert.isNotNull(history);
fRefactoringHistory= history;
}
@Override
public boolean equals(final Object object) {
if (object instanceof AbstractRefactoringHistoryResourceMapping) {
final AbstractRefactoringHistoryResourceMapping mapping= (AbstractRefactoringHistoryResourceMapping) object;
return mapping.fRefactoringHistory.equals(fRefactoringHistory);
}
return false;
}
@Override
public final Object getModelObject() {
return fRefactoringHistory;
}
@Override
public final IProject[] getProjects() {
final Set<IProject> set= new HashSet<>();
final IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
final RefactoringDescriptorProxy[] proxies= fRefactoringHistory.getDescriptors();
for (RefactoringDescriptorProxy proxie : proxies) {
final String name= proxie.getProject();
if (name != null && !"".equals(name)) //$NON-NLS-1$
set.add(root.getProject(name));
}
return set.toArray(new IProject[set.size()]);
}
Returns the associated resource.
This method only returns a meaningful result if the history contains
refactorings of a single project.
Returns: the associated resource, or null
if the
refactoring history contains workspace refactoring descriptors
only, or if it contains refactoring descriptors from multiple
projects.
/**
* Returns the associated resource.
* <p>
* This method only returns a meaningful result if the history contains
* refactorings of a single project.
* </p>
*
* @return the associated resource, or <code>null</code> if the
* refactoring history contains workspace refactoring descriptors
* only, or if it contains refactoring descriptors from multiple
* projects.
*/
public final IResource getResource() {
try {
final ResourceTraversal[] traversals= getTraversals(null, null);
if (traversals.length > 0) {
final IResource[] resources= traversals[0].getResources();
if (resources.length > 0)
return resources[0];
}
} catch (CoreException exception) {
RefactoringCorePlugin.log(exception);
}
return null;
}
@Override
public final ResourceTraversal[] getTraversals(final ResourceMappingContext context, final IProgressMonitor monitor) throws CoreException {
if (fResourceTraversals == null) {
final IProject[] projects= getProjects();
final ResourceTraversal[] traversals= new ResourceTraversal[projects.length];
for (int index= 0; index < projects.length; index++)
traversals[index]= new ResourceTraversal(new IResource[] { projects[index].getFolder(RefactoringHistoryService.NAME_HISTORY_FOLDER)}, IResource.DEPTH_INFINITE, IResource.NONE);
fResourceTraversals= traversals;
}
final ResourceTraversal[] traversals= new ResourceTraversal[fResourceTraversals.length];
System.arraycopy(fResourceTraversals, 0, traversals, 0, fResourceTraversals.length);
return traversals;
}
@Override
public int hashCode() {
return fRefactoringHistory.hashCode();
}
}