blob: 1a3fa01d8e5d6156be3937c54dc2448e7b7eb056 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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.jdt.internal.ui.model;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.mapping.IModelProviderDescriptor;
import org.eclipse.core.resources.mapping.ModelProvider;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.compare.structuremergeviewer.ICompareInput;
import org.eclipse.team.core.mapping.ISynchronizationContext;
import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;
import org.eclipse.ltk.ui.refactoring.model.AbstractSynchronizationCompareAdapter;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.internal.ui.JavaPlugin;
/**
* Java-aware synchronization compare adapter.
*
* @since 3.2
*/
public final class JavaSynchronizationCompareAdapter extends AbstractSynchronizationCompareAdapter {
/** The modelProviderId name */
private static final String MODEL_PROVIDER_ID= "modelProviderId"; //$NON-NLS-1$
/** The modelProviders name */
private static final String MODEL_PROVIDERS= "modelProviders"; //$NON-NLS-1$
/** The resourcePath name */
private static final String RESOURCE_PATH= "resourcePath"; //$NON-NLS-1$
/** The resourceType name */
private static final String RESOURCE_TYPE= "resourceType"; //$NON-NLS-1$
/** The resources name */
private static final String RESOURCES= "resources"; //$NON-NLS-1$
/** The workingSetName name */
private static final String WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$
/** The workingSets name */
private static final String WORKING_SETS= "workingSets"; //$NON-NLS-1$
/**
* {@inheritDoc}
*/
public ICompareInput asCompareInput(final ISynchronizationContext context, final Object element) {
if (element instanceof RefactoringDescriptorProxy)
return super.asCompareInput(context, element);
final IResource resource= JavaModelProvider.getResource(element);
if (resource != null)
return super.asCompareInput(context, resource);
return null;
}
/**
* {@inheritDoc}
*/
public ResourceMapping[] restore(final IMemento memento) {
IMemento[] children= memento.getChildren(RESOURCES);
final List result= new ArrayList();
for (int index= 0; index < children.length; index++) {
final Integer typeInt= children[index].getInteger(RESOURCE_TYPE);
if (typeInt == null)
continue;
final String pathString= children[index].getString(RESOURCE_PATH);
if (pathString == null)
continue;
IResource resource= null;
final IPath path= new Path(pathString);
final IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
switch (typeInt.intValue()) {
case IResource.ROOT:
resource= root;
break;
case IResource.PROJECT:
resource= root.getProject(path.lastSegment());
break;
case IResource.FILE:
resource= root.getFile(path);
break;
case IResource.FOLDER:
resource= root.getFolder(path);
break;
}
if (resource != null) {
final ResourceMapping mapping= JavaSynchronizationContentProvider.getResourceMapping(resource);
if (mapping != null)
result.add(mapping);
}
}
children= memento.getChildren(WORKING_SETS);
for (int index= 0; index < children.length; index++) {
final String name= children[index].getString(WORKING_SET_NAME);
if (name == null)
continue;
final IWorkingSet set= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(name);
if (set != null) {
final ResourceMapping mapping= JavaSynchronizationContentProvider.getResourceMapping(set);
if (mapping != null)
result.add(mapping);
}
}
children= memento.getChildren(MODEL_PROVIDERS);
for (int index= 0; index < children.length; index++) {
final String id= children[index].getString(MODEL_PROVIDER_ID);
if (id == null)
continue;
final IModelProviderDescriptor descriptor= ModelProvider.getModelProviderDescriptor(id);
if (descriptor == null)
continue;
try {
final ModelProvider provider= descriptor.getModelProvider();
if (provider != null) {
final ResourceMapping mapping= JavaSynchronizationContentProvider.getResourceMapping(provider);
if (mapping != null)
result.add(mapping);
}
} catch (CoreException event) {
JavaPlugin.log(event);
}
}
return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
}
/**
* {@inheritDoc}
*/
public void save(final ResourceMapping[] mappings, final IMemento memento) {
for (int index= 0; index < mappings.length; index++) {
final Object object= mappings[index].getModelObject();
if (object instanceof IJavaElement) {
final IJavaElement element= (IJavaElement) object;
final IResource resource= (IResource) element.getAdapter(IResource.class);
if (resource != null) {
final IMemento child= memento.createChild(RESOURCES);
child.putInteger(RESOURCE_TYPE, resource.getType());
child.putString(RESOURCE_PATH, resource.getFullPath().toString());
}
}
if (object instanceof IResource) {
final IResource resource= (IResource) object;
final IMemento child= memento.createChild(RESOURCES);
child.putInteger(RESOURCE_TYPE, resource.getType());
child.putString(RESOURCE_PATH, resource.getFullPath().toString());
} else if (object instanceof IWorkingSet)
memento.createChild(WORKING_SETS).putString(WORKING_SET_NAME, ((IWorkingSet) object).getName());
else if (object instanceof ModelProvider)
memento.createChild(MODEL_PROVIDERS).putString(MODEL_PROVIDER_ID, ((ModelProvider) object).getId());
}
}
}