blob: 969d8ceca8978f172cc5ec6fcc7a8ec44b85955c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/*****************************************************************************
* Copyright (c) 2013 CEA LIST 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:
* CEA LIST - Initial API and implementation
* Christian W. Damus (CEA LIST) - Extracted some of the ScopeCollector implementation.
*
*****************************************************************************/
package org.eclipse.papyrus.views.search.scope;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.papyrus.infra.core.resource.ModelMultiException;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.resource.NotFoundException;
import org.eclipse.papyrus.infra.core.resource.sasheditor.SashModel;
import org.eclipse.papyrus.infra.emf.utils.BusinessModelResolver;
import org.eclipse.papyrus.infra.onefile.model.IPapyrusFile;
import org.eclipse.papyrus.views.search.Activator;
import org.eclipse.papyrus.views.search.Messages;
import org.eclipse.papyrus.views.search.utils.ModelUtils;
/**
* The most basic scope-provider implementation, getting scopes for workspace resources.
*/
public class WorkspaceScopeProvider implements IScopeProvider {
public WorkspaceScopeProvider() {
super();
}
public Collection<URI> getScope() {
//Go through the workspace root
IResource root = ResourcesPlugin.getWorkspace().getRoot();
return findPapyrusModels(root);
}
public Collection<URI> getScope(Object object) {
Collection<URI> results;
if(object instanceof IPapyrusFile) {
results = findPapyrusModels(((IPapyrusFile)object).getMainFile());
} else if(object instanceof IResource) {
results = findPapyrusModels((IResource)object);
} else {
Object element = BusinessModelResolver.getInstance().getBusinessModel(object);
if(element instanceof EObject) {
// CDO resource *are* EObjects
Resource eResource = (element instanceof Resource) ? (Resource) element : ((EObject)element).eResource();
if(eResource != null) {
ModelSet modelSet = null;
try {
modelSet = ModelUtils.openResource(eResource.getURI());
SashModel sashModel = (SashModel)modelSet.getModelChecked(SashModel.MODEL_ID);
Resource diResource = sashModel.getResource();
if (diResource != null) {
results = Collections.singletonList(diResource.getURI());
} else {
results = Collections.emptyList();
}
} catch (ModelMultiException e) {
results = Collections.emptyList();
} catch (NotFoundException e) {
results = Collections.emptyList();
} finally {
if (modelSet != null) {
try {
modelSet.unload();
} catch (Exception e) {
Activator.log.error(e);
}
}
}
} else {
results = Collections.emptyList();
}
} else {
results = Collections.emptyList();
}
}
return results;
}
/**
* Find all Papyrus models from a specific root
*
* @param res
* the root
* @return
* the found Papyrus models
*/
static Collection<URI> findPapyrusModels(IResource res) {
ResourceVisitor visitor = new ResourceVisitor();
try {
res.accept(visitor, IResource.DEPTH_INFINITE);
} catch (CoreException e) {
Activator.log.warn(Messages.ScopeCollector_0 + res);
}
return visitor.getParticipantURIs();
}
}
|