1 /*******************************************************************************
2 * Copyright (c) 2005, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.model;
13 import java.util.ArrayList;
14 import java.util.List;
16 import org.eclipse.team.core.mapping.ISynchronizationContext;
18 import org.eclipse.core.runtime.CoreException;
19 import org.eclipse.core.runtime.IPath;
20 import org.eclipse.core.runtime.Path;
22 import org.eclipse.core.resources.IResource;
23 import org.eclipse.core.resources.IWorkspaceRoot;
24 import org.eclipse.core.resources.ResourcesPlugin;
25 import org.eclipse.core.resources.mapping.IModelProviderDescriptor;
26 import org.eclipse.core.resources.mapping.ModelProvider;
27 import org.eclipse.core.resources.mapping.ResourceMapping;
29 import org.eclipse.ui.IMemento;
30 import org.eclipse.ui.IWorkingSet;
31 import org.eclipse.ui.PlatformUI;
33 import org.eclipse.compare.structuremergeviewer.ICompareInput;
35 import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;
36 import org.eclipse.ltk.ui.refactoring.model.AbstractSynchronizationCompareAdapter;
38 import org.eclipse.jdt.core.IJavaElement;
40 import org.eclipse.jdt.internal.ui.JavaPlugin;
43 * Java-aware synchronization compare adapter.
47 public final class JavaSynchronizationCompareAdapter extends AbstractSynchronizationCompareAdapter {
49 /** The modelProviderId name */
50 private static final String MODEL_PROVIDER_ID= "modelProviderId"; //$NON-NLS-1$
52 /** The modelProviders name */
53 private static final String MODEL_PROVIDERS= "modelProviders"; //$NON-NLS-1$
55 /** The resourcePath name */
56 private static final String RESOURCE_PATH= "resourcePath"; //$NON-NLS-1$
58 /** The resourceType name */
59 private static final String RESOURCE_TYPE= "resourceType"; //$NON-NLS-1$
61 /** The resources name */
62 private static final String RESOURCES= "resources"; //$NON-NLS-1$
64 /** The workingSetName name */
65 private static final String WORKING_SET_NAME= "workingSetName"; //$NON-NLS-1$
67 /** The workingSets name */
68 private static final String WORKING_SETS= "workingSets"; //$NON-NLS-1$
74 public ICompareInput asCompareInput(final ISynchronizationContext context, final Object element) {
75 if (element instanceof RefactoringDescriptorProxy)
76 return super.asCompareInput(context, element);
77 final IResource resource= JavaModelProvider.getResource(element);
79 return super.asCompareInput(context, resource);
86 public ResourceMapping[] restore(final IMemento memento) {
87 IMemento[] children= memento.getChildren(RESOURCES);
88 final List<ResourceMapping> result= new ArrayList<ResourceMapping>();
89 for (int index= 0; index < children.length; index++) {
90 final Integer typeInt= children[index].getInteger(RESOURCE_TYPE);
93 final String pathString= children[index].getString(RESOURCE_PATH);
94 if (pathString == null)
96 IResource resource= null;
97 final IPath path= new Path(pathString);
98 final IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
99 switch (typeInt.intValue()) {
103 case IResource.PROJECT:
104 resource= root.getProject(path.lastSegment());
107 resource= root.getFile(path);
109 case IResource.FOLDER:
110 resource= root.getFolder(path);
113 if (resource != null) {
114 final ResourceMapping mapping= JavaSynchronizationContentProvider.getResourceMapping(resource);
119 children= memento.getChildren(WORKING_SETS);
120 for (int index= 0; index < children.length; index++) {
121 final String name= children[index].getString(WORKING_SET_NAME);
124 final IWorkingSet set= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(name);
126 final ResourceMapping mapping= JavaSynchronizationContentProvider.getResourceMapping(set);
131 children= memento.getChildren(MODEL_PROVIDERS);
132 for (int index= 0; index < children.length; index++) {
133 final String id= children[index].getString(MODEL_PROVIDER_ID);
136 final IModelProviderDescriptor descriptor= ModelProvider.getModelProviderDescriptor(id);
137 if (descriptor == null)
140 final ModelProvider provider= descriptor.getModelProvider();
141 if (provider != null) {
142 final ResourceMapping mapping= JavaSynchronizationContentProvider.getResourceMapping(provider);
146 } catch (CoreException event) {
147 JavaPlugin.log(event);
150 return result.toArray(new ResourceMapping[result.size()]);
156 public void save(final ResourceMapping[] mappings, final IMemento memento) {
157 for (int index= 0; index < mappings.length; index++) {
158 final Object object= mappings[index].getModelObject();
159 if (object instanceof IJavaElement) {
160 final IJavaElement element= (IJavaElement) object;
161 final IResource resource= (IResource) element.getAdapter(IResource.class);
162 if (resource != null) {
163 final IMemento child= memento.createChild(RESOURCES);
164 child.putInteger(RESOURCE_TYPE, resource.getType());
165 child.putString(RESOURCE_PATH, resource.getFullPath().toString());
168 if (object instanceof IResource) {
169 final IResource resource= (IResource) object;
170 final IMemento child= memento.createChild(RESOURCES);
171 child.putInteger(RESOURCE_TYPE, resource.getType());
172 child.putString(RESOURCE_PATH, resource.getFullPath().toString());
173 } else if (object instanceof IWorkingSet)
174 memento.createChild(WORKING_SETS).putString(WORKING_SET_NAME, ((IWorkingSet) object).getName());
175 else if (object instanceof ModelProvider)
176 memento.createChild(MODEL_PROVIDERS).putString(MODEL_PROVIDER_ID, ((ModelProvider) object).getId());