Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 148568 Details for
Bug 282269
Extension point for allowing extension points to interpret reference handles in component.xml
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Addition of an extension point plus 2 NPE fixes
bug282269.patch3 (text/plain), 28.99 KB, created by
Carl Anderson
on 2009-10-01 14:49:15 EDT
(
hide
)
Description:
Addition of an extension point plus 2 NPE fixes
Filename:
MIME Type:
Creator:
Carl Anderson
Created:
2009-10-01 14:49:15 EDT
Size:
28.99 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.wst.common.modulecore >Index: modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java,v >retrieving revision 1.62 >diff -u -r1.62 VirtualComponent.java >--- modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java 4 Sep 2008 05:47:27 -0000 1.62 >+++ modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java 1 Oct 2009 18:49:30 -0000 >@@ -16,6 +16,7 @@ > import java.util.List; > import java.util.Map; > import java.util.Properties; >+import java.util.Set; > > import org.eclipse.core.resources.IProject; > import org.eclipse.core.runtime.CoreException; >@@ -24,18 +25,19 @@ > import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Path; > import org.eclipse.core.runtime.Platform; >+import org.eclipse.emf.common.util.URI; > import org.eclipse.wst.common.componentcore.ComponentCore; > import org.eclipse.wst.common.componentcore.ModuleCoreNature; > import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory; > import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage; >-import org.eclipse.wst.common.componentcore.internal.DependencyType; > import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin; > import org.eclipse.wst.common.componentcore.internal.Property; > import org.eclipse.wst.common.componentcore.internal.ReferencedComponent; > import org.eclipse.wst.common.componentcore.internal.StructureEdit; > import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent; >-import org.eclipse.wst.common.componentcore.internal.builder.DependencyGraphManager; >-import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil; >+import org.eclipse.wst.common.componentcore.internal.builder.IDependencyGraph; >+import org.eclipse.wst.common.componentcore.resolvers.IReferenceResolver; >+import org.eclipse.wst.common.componentcore.resolvers.ReferenceResolverUtil; > import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; > import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; > import org.eclipse.wst.common.componentcore.resources.IVirtualReference; >@@ -286,9 +288,6 @@ > if (referencedComponent==null) > continue; > IVirtualReference vReference = StructureEdit.createVirtualReference(this, referencedComponent); >- if( vReference != null ){ >- vReference.setArchiveName( referencedComponent.getArchiveName() ); >- } > if (vReference != null && vReference.getReferencedComponent() != null && vReference.getReferencedComponent().exists()) > references.add(vReference); > } >@@ -312,21 +311,14 @@ > WorkbenchComponent component = core.getComponent(); > ReferencedComponent referencedComponent = null; > ComponentcoreFactory factory = ComponentcorePackage.eINSTANCE.getComponentcoreFactory(); >+ IReferenceResolver resolver = null; > for (int i=0; i<references.length; i++) { > if (references[i] == null) > continue; >- referencedComponent = factory.createReferencedComponent(); >- referencedComponent.setDependencyType(DependencyType.get(references[i].getDependencyType())); >- referencedComponent.setRuntimePath(references[i].getRuntimePath()); >- >- IVirtualComponent comp = references[i].getReferencedComponent(); >- if(comp!=null && !comp.isBinary()) >- referencedComponent.setHandle(ModuleURIUtil.fullyQualifyURI(comp.getProject())); >- else if (comp!=null) >- referencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(comp.getName())); >+ resolver = ReferenceResolverUtil.getDefault().getResolver(references[i]); >+ referencedComponent = resolver.resolve(references[i]); > if (component != null) > component.getReferencedComponents().add(referencedComponent); >- referencedComponent.setArchiveName(references[i].getArchiveName()); > } > //clean up any old obsolete references > if (component != null){ >@@ -362,19 +354,12 @@ > > component.getReferencedComponents().clear(); > ComponentcoreFactory factory = ComponentcorePackage.eINSTANCE.getComponentcoreFactory(); >+ IReferenceResolver resolver = null; > for (int i=0; i<references.length; i++) { >- referencedComponent = factory.createReferencedComponent(); >- referencedComponent.setDependencyType(DependencyType.get(references[i].getDependencyType())); >- referencedComponent.setRuntimePath(references[i].getRuntimePath()); >- >- IVirtualComponent comp = references[i].getReferencedComponent(); >- if( !comp.isBinary()) >- referencedComponent.setHandle(ModuleURIUtil.fullyQualifyURI(references[i].getReferencedComponent().getProject())); >- else >- referencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(references[i].getReferencedComponent().getName())); >- >- referencedComponent.setArchiveName(references[i].getArchiveName()); >- component.getReferencedComponents().add(referencedComponent); >+ resolver = ReferenceResolverUtil.getDefault().getResolver(references[i]); >+ referencedComponent = resolver.resolve(references[i]); >+ if( referencedComponent != null) >+ component.getReferencedComponents().add(referencedComponent); > } > > } finally { >@@ -434,10 +419,11 @@ > * @return array of components > */ > public IVirtualComponent[] getReferencingComponents() { >- IProject[] handles = DependencyGraphManager.getInstance().getDependencyGraph().getReferencingComponents(getProject()); >- IVirtualComponent[] result = new IVirtualComponent[handles.length]; >- for (int i=0; i<handles.length; i++) >- result[i] = ComponentCore.createComponent(handles[i]); >+ Set<IProject> projects = IDependencyGraph.INSTANCE.getReferencingComponents(getProject()); >+ IVirtualComponent[] result = new IVirtualComponent[projects.size()]; >+ Iterator<IProject> i = projects.iterator(); >+ for (int j=0; j<projects.size(); j++) >+ result[j] = ComponentCore.createComponent(i.next()); > return result; > } > >@@ -477,16 +463,11 @@ > if (aReference == null || aReference.getReferencedComponent() == null || component == null) > return null; > List referencedComponents = component.getReferencedComponents(); >+ URI uri = ReferenceResolverUtil.getDefault().getResolver(aReference).resolve(aReference).getHandle(); > for (int i=0; i<referencedComponents.size(); i++) { > ReferencedComponent ref = (ReferencedComponent) referencedComponents.get(i); >- if (!aReference.getReferencedComponent().isBinary()) { >- if (ref.getHandle().equals(ModuleURIUtil.fullyQualifyURI(aReference.getReferencedComponent().getProject()))) >- return ref; >- } >- else { >- if (ref.getHandle().equals(ModuleURIUtil.archiveComponentfullyQualifyURI(aReference.getReferencedComponent().getName()))) >- return ref; >- } >+ if( ref.getHandle().equals(uri)) >+ return ref; > } > return null; > } >Index: modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java,v >retrieving revision 1.9 >diff -u -r1.9 VirtualReference.java >--- modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java 7 Jun 2007 19:29:10 -0000 1.9 >+++ modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualReference.java 1 Oct 2009 18:49:30 -0000 >@@ -16,13 +16,13 @@ > import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.NullProgressMonitor; > import org.eclipse.core.runtime.Path; >+import org.eclipse.emf.common.util.URI; > import org.eclipse.emf.ecore.EObject; >-import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage; >-import org.eclipse.wst.common.componentcore.internal.DependencyType; > import org.eclipse.wst.common.componentcore.internal.ReferencedComponent; > import org.eclipse.wst.common.componentcore.internal.StructureEdit; > import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent; >-import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil; >+import org.eclipse.wst.common.componentcore.resolvers.IReferenceResolver; >+import org.eclipse.wst.common.componentcore.resolvers.ReferenceResolverUtil; > import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; > import org.eclipse.wst.common.componentcore.resources.IVirtualReference; > >@@ -59,14 +59,8 @@ > core = StructureEdit.getStructureEditForWrite(enclosingComponent.getProject()); > WorkbenchComponent component = core.getComponent(); > List referencedComponents = component.getReferencedComponents(); >- ReferencedComponent refComp = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createReferencedComponent(); >- if( !referencedComponent.isBinary()) >- refComp.setHandle(ModuleURIUtil.fullyQualifyURI(referencedComponent.getProject())); >- else >- refComp.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(referencedComponent.getName())); >- refComp.setRuntimePath(runtimePath); >- refComp.setDependencyType(DependencyType.get(dependencyType)); >- refComp.setArchiveName(archiveName); >+ IReferenceResolver resolver = ReferenceResolverUtil.getDefault().getResolver(this); >+ ReferencedComponent refComp = resolver.resolve(this); > if(!referencedComponents.contains(refComp)){ > referencedComponents.add(refComp); > } >@@ -123,10 +117,9 @@ > ReferencedComponent actualReferencedComponent = enclosingCore.findReferencedComponent(enclosingComp, refComp); > if (actualReferencedComponent != null) { > referencedComponent = aReferencedComponent; >- if(!referencedComponent.isBinary()) >- actualReferencedComponent.setHandle(ModuleURIUtil.fullyQualifyURI(referencedComponent.getProject())); >- else >- actualReferencedComponent.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(referencedComponent.getName())); >+ IReferenceResolver resolver = ReferenceResolverUtil.getDefault().getResolver(this); >+ URI uri = resolver.resolve(this).getHandle(); >+ actualReferencedComponent.setHandle(uri); > actualReferencedComponent.setDependentObject(dependentObject); > } > } finally { >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.modulecore/plugin.xml,v >retrieving revision 1.36 >diff -u -r1.36 plugin.xml >--- plugin.xml 9 Jun 2008 19:51:14 -0000 1.36 >+++ plugin.xml 1 Oct 2009 18:49:29 -0000 >@@ -55,6 +55,7 @@ > <extension-point id="artifactedit" name="Component Artifact Edit" schema="schema/artifactedit.exsd"/> > <extension-point id="componentimpl" name="componentimpl" schema="schema/componentimpl.exsd"/> > <extension-point id="resourceFactories" name="Resource Factory Association (Internal)" schema="schema/resourceFactories.exsd"/> >+ <extension-point id="referenceResolver" name="referenceResolver" schema="schema/referenceResolver.exsd"/> > > <!-- Contribute a URIResolverExtension for flexible projects --> > <extension point="org.eclipse.wst.common.uriresolver.resolverExtensions"> >Index: modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java,v >retrieving revision 1.45 >diff -u -r1.45 StructureEdit.java >--- modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java 29 Sep 2009 19:43:18 -0000 1.45 >+++ modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java 1 Oct 2009 18:49:30 -0000 >@@ -32,15 +32,14 @@ > import org.eclipse.emf.common.util.URI; > import org.eclipse.jem.util.UIContextDetermination; > import org.eclipse.jem.util.emf.workbench.ProjectUtilities; >-import org.eclipse.wst.common.componentcore.ComponentCore; > import org.eclipse.wst.common.componentcore.IEditModelHandler; > import org.eclipse.wst.common.componentcore.ModuleCoreNature; > import org.eclipse.wst.common.componentcore.UnresolveableURIException; > import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil; >-import org.eclipse.wst.common.componentcore.internal.impl.PlatformURLModuleConnection; > import org.eclipse.wst.common.componentcore.internal.impl.ResourceTreeNode; >-import org.eclipse.wst.common.componentcore.internal.resources.VirtualReference; > import org.eclipse.wst.common.componentcore.internal.util.EclipseResourceAdapter; >+import org.eclipse.wst.common.componentcore.resolvers.IReferenceResolver; >+import org.eclipse.wst.common.componentcore.resolvers.ReferenceResolverUtil; > import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; > import org.eclipse.wst.common.componentcore.resources.IVirtualReference; > import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil; >@@ -282,38 +281,9 @@ > return componentType; > } > >- public static IVirtualReference createVirtualReference(IVirtualComponent context, ReferencedComponent referencedComponent) { >- >- IVirtualComponent targetComponent = null; >- IProject targetProject = null; >- URI uri = referencedComponent.getHandle(); >- if (uri == null) >- return null; >- boolean isClassPathURI = ModuleURIUtil.isClassPathURI(uri); >- if( !isClassPathURI ){ >- try { >- targetProject = StructureEdit.getContainingProject(uri); >- } catch(UnresolveableURIException uurie) { >- //Ignore >- } >- // if the project cannot be resolved, assume it's local - really it probably deleted >- >- targetComponent = ComponentCore.createComponent(targetProject); >- >- >- }else{ >- String archiveType = ""; //$NON-NLS-1$ >- String archiveName = ""; //$NON-NLS-1$ >- try { >- archiveType = ModuleURIUtil.getArchiveType(uri); >- archiveName = ModuleURIUtil.getArchiveName(uri); >- >- } catch (UnresolveableURIException e) { >- //Ignore >- } >- targetComponent = ComponentCore.createArchiveComponent(context.getProject(), archiveType + IPath.SEPARATOR + archiveName ); >- } >- return new VirtualReference(context, targetComponent, referencedComponent.getRuntimePath(), referencedComponent.getDependencyType().getValue()); >+ public static IVirtualReference createVirtualReference(IVirtualComponent context, ReferencedComponent reference) { >+ IReferenceResolver resolver = ReferenceResolverUtil.getDefault().getResolver(context, reference); >+ return resolver.resolve(context, reference); > } > > protected StructureEdit(ModuleCoreNature aNature, boolean toAccessAsReadOnly) { >@@ -937,9 +907,8 @@ > } > > public static URI createComponentURI(IProject aContainingProject, String aComponentName) { >- return URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL + IPath.SEPARATOR + PlatformURLModuleConnection.RESOURCE_MODULE + aContainingProject.getName() + IPath.SEPARATOR + aComponentName); >+ return ModuleURIUtil.fullyQualifyURI(aContainingProject, aComponentName); > } >- > > protected IProject getProject() { > return aProject; >Index: modulecore-src/org/eclipse/wst/common/componentcore/resolvers/ReferenceResolverUtil.java >=================================================================== >RCS file: modulecore-src/org/eclipse/wst/common/componentcore/resolvers/ReferenceResolverUtil.java >diff -N modulecore-src/org/eclipse/wst/common/componentcore/resolvers/ReferenceResolverUtil.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ modulecore-src/org/eclipse/wst/common/componentcore/resolvers/ReferenceResolverUtil.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,126 @@ >+package org.eclipse.wst.common.componentcore.resolvers; >+ >+import java.util.ArrayList; >+import java.util.Collections; >+import java.util.Comparator; >+import java.util.HashMap; >+import java.util.Iterator; >+import java.util.List; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.core.runtime.IExtensionRegistry; >+import org.eclipse.core.runtime.Platform; >+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin; >+import org.eclipse.wst.common.componentcore.internal.ReferencedComponent; >+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; >+import org.eclipse.wst.common.componentcore.resources.IVirtualReference; >+ >+public class ReferenceResolverUtil { >+ public static ReferenceResolverUtil instance = null; >+ public static ReferenceResolverUtil getDefault() { >+ if( instance == null ) >+ instance = new ReferenceResolverUtil(); >+ return instance; >+ } >+ >+ private HashMap<String, ReferenceResolverWrapper> resolvers = null; >+ private ArrayList<IReferenceResolver> sorted = null; >+ private DefaultReferenceResolver defaultResolver = new DefaultReferenceResolver(); >+ public IReferenceResolver[] getResolvers() { >+ if( resolvers == null ) >+ loadResolvers(); >+ if (sorted.isEmpty()) return new IReferenceResolver[0]; >+ return (IReferenceResolver[]) sorted.toArray(new IReferenceResolver[sorted.size()]); >+ } >+ >+ public IReferenceResolver getResolver(IVirtualComponent context, ReferencedComponent reference) { >+ getResolvers(); >+ Iterator<IReferenceResolver> i = sorted.iterator(); >+ IReferenceResolver resolver; >+ while(i.hasNext()) { >+ resolver = i.next(); >+ if( resolver.canResolve(context, reference)) >+ return resolver; >+ } >+ return defaultResolver; >+ } >+ >+ public IReferenceResolver getResolver(IVirtualReference reference) { >+ getResolvers(); >+ Iterator<IReferenceResolver> i = sorted.iterator(); >+ IReferenceResolver resolver; >+ while(i.hasNext()) { >+ resolver = i.next(); >+ if( resolver.canResolve(reference)) >+ return resolver; >+ } >+ return defaultResolver; >+ } >+ >+ protected void loadResolvers() { >+ HashMap<String, ReferenceResolverWrapper> map = new HashMap<String, ReferenceResolverWrapper>(); >+ >+ IExtensionRegistry registry = Platform.getExtensionRegistry(); >+ IConfigurationElement[] cf = registry.getConfigurationElementsFor(ModulecorePlugin.PLUGIN_ID, "referenceResolver"); //$NON-NLS-1$ >+ String id = null; >+ for( int j = 0; j < cf.length; j++ ) { >+ id = cf[j].getAttribute("id"); >+ try { >+ map.put(id, new ReferenceResolverWrapper( >+ id, (IReferenceResolver) >+ cf[j].createExecutableExtension("class"), >+ cf[j].getAttribute("weight"))); >+ } catch( CoreException ce ) { >+ // TODO figure it out >+ } >+ } >+ resolvers = map; >+ >+ // Cache the sorted ones >+ List<ReferenceResolverWrapper> list = new ArrayList(resolvers.values()); >+ Comparator comparator = new Comparator() { >+ public int compare(Object o1, Object o2) { >+ if( !(o1 instanceof ReferenceResolverWrapper)) >+ return -1; >+ if( !(o2 instanceof ReferenceResolverWrapper)) >+ return 1; >+ return ((ReferenceResolverWrapper)o2).getWeight() >+ - ((ReferenceResolverWrapper)o1).getWeight(); >+ } >+ }; >+ >+ Collections.sort(list, comparator); >+ ArrayList<IReferenceResolver> sorted = new ArrayList<IReferenceResolver>(); >+ Iterator i = list.iterator(); >+ while(i.hasNext()) >+ sorted.add(((ReferenceResolverWrapper)i.next()).getResolver()); >+ this.sorted = sorted; >+ } >+ >+ >+ protected class ReferenceResolverWrapper { >+ private String id; >+ private IReferenceResolver resolver; >+ private int weight; >+ public ReferenceResolverWrapper(String id, IReferenceResolver resolver, String weight) { >+ this.id = id; >+ this.resolver = resolver; >+ try { >+ this.weight = Integer.parseInt(weight); >+ } catch( NumberFormatException nfe) { >+ this.weight = 1000; >+ } >+ } >+ public int getWeight() { >+ return weight; >+ } >+ public String getId() { >+ return id; >+ } >+ public IReferenceResolver getResolver() { >+ return resolver; >+ } >+ } >+ >+} >Index: modulecore-src/org/eclipse/wst/common/componentcore/resolvers/DefaultReferenceResolver.java >=================================================================== >RCS file: modulecore-src/org/eclipse/wst/common/componentcore/resolvers/DefaultReferenceResolver.java >diff -N modulecore-src/org/eclipse/wst/common/componentcore/resolvers/DefaultReferenceResolver.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ modulecore-src/org/eclipse/wst/common/componentcore/resolvers/DefaultReferenceResolver.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,81 @@ >+package org.eclipse.wst.common.componentcore.resolvers; >+ >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.emf.common.util.URI; >+import org.eclipse.wst.common.componentcore.ComponentCore; >+import org.eclipse.wst.common.componentcore.UnresolveableURIException; >+import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage; >+import org.eclipse.wst.common.componentcore.internal.DependencyType; >+import org.eclipse.wst.common.componentcore.internal.ReferencedComponent; >+import org.eclipse.wst.common.componentcore.internal.StructureEdit; >+import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil; >+import org.eclipse.wst.common.componentcore.internal.resources.VirtualReference; >+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; >+import org.eclipse.wst.common.componentcore.resources.IVirtualReference; >+ >+public class DefaultReferenceResolver implements IReferenceResolver { >+ // Does not need to implement, >+ // default is always called as last resort >+ public boolean canResolve(IVirtualComponent context, >+ ReferencedComponent referencedComponent) { >+ return false; >+ } >+ >+ // Does not need to implement, >+ // default is always called as last resort >+ public boolean canResolve(IVirtualReference reference) { >+ return false; >+ } >+ >+ public IVirtualReference resolve(IVirtualComponent context, >+ ReferencedComponent referencedComponent) { >+ IVirtualComponent targetComponent = null; >+ IProject targetProject = null; >+ URI uri = referencedComponent.getHandle(); >+ if (uri == null) >+ return null; >+ boolean isClassPathURI = ModuleURIUtil.isClassPathURI(uri); >+ if( !isClassPathURI ){ >+ try { >+ targetProject = StructureEdit.getContainingProject(uri); >+ } catch(UnresolveableURIException uurie) { >+ //Ignore >+ } >+ // if the project cannot be resolved, assume it's local - really it probably deleted >+ >+ targetComponent = ComponentCore.createComponent(targetProject); >+ >+ >+ }else{ >+ String archiveType = ""; //$NON-NLS-1$ >+ String archiveName = ""; //$NON-NLS-1$ >+ try { >+ archiveType = ModuleURIUtil.getArchiveType(uri); >+ archiveName = ModuleURIUtil.getArchiveName(uri); >+ >+ } catch (UnresolveableURIException e) { >+ //Ignore >+ } >+ targetComponent = ComponentCore.createArchiveComponent(context.getProject(), archiveType + IPath.SEPARATOR + archiveName ); >+ } >+ return new VirtualReference(context, targetComponent, referencedComponent.getRuntimePath(), referencedComponent.getDependencyType().getValue()); >+ } >+ >+ public ReferencedComponent resolve(IVirtualReference reference) { >+ IVirtualComponent referencedComponent = reference.getReferencedComponent(); >+ ReferencedComponent refComp = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createReferencedComponent(); >+ refComp.setRuntimePath(reference.getRuntimePath()); >+ refComp.setDependencyType(DependencyType.get(reference.getDependencyType())); >+ refComp.setArchiveName(reference.getArchiveName()); >+ if( referencedComponent != null ) { >+ if( !referencedComponent.isBinary()) >+ refComp.setHandle(ModuleURIUtil.fullyQualifyURI(referencedComponent.getProject())); >+ else >+ refComp.setHandle(ModuleURIUtil.archiveComponentfullyQualifyURI(referencedComponent.getName())); >+ } >+ return refComp; >+ } >+ >+ >+} >Index: schema/referenceResolver.exsd >=================================================================== >RCS file: schema/referenceResolver.exsd >diff -N schema/referenceResolver.exsd >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ schema/referenceResolver.exsd 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,116 @@ >+<?xml version='1.0' encoding='UTF-8'?> >+<!-- Schema file written by PDE --> >+<schema targetNamespace="org.eclipse.wst.common.modulecore" xmlns="http://www.w3.org/2001/XMLSchema"> >+<annotation> >+ <appInfo> >+ <meta.schema plugin="org.eclipse.wst.common.modulecore" id="referenceResolver" name="referenceResolver"/> >+ </appInfo> >+ <documentation> >+ [Enter description of this extension point.] >+ </documentation> >+ </annotation> >+ >+ <element name="extension"> >+ <annotation> >+ <appInfo> >+ <meta.element /> >+ </appInfo> >+ </annotation> >+ <complexType> >+ <sequence minOccurs="1" maxOccurs="unbounded"> >+ <element ref="resolver"/> >+ </sequence> >+ <attribute name="point" type="string" use="required"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="id" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="name" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ <appInfo> >+ <meta.attribute translatable="true"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <element name="resolver"> >+ <complexType> >+ <attribute name="id" type="string" use="required"> >+ <annotation> >+ <documentation> >+ A required id which can be used to reference this resolver >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="class" type="string" use="required"> >+ <annotation> >+ <documentation> >+ The implementation class of this extension >+ </documentation> >+ <appInfo> >+ <meta.attribute kind="java" basedOn=":org.eclipse.wst.common.componentcore.resolvers.IReferenceResolver"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ <attribute name="weight" type="string"> >+ <annotation> >+ <documentation> >+ The weight used for sorting the resolvers. Lighter weights float to the top and are tried first. >+ </documentation> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="since"/> >+ </appInfo> >+ <documentation> >+ [Enter the first release in which this extension point appears.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="examples"/> >+ </appInfo> >+ <documentation> >+ [Enter extension point usage example here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="apiinfo"/> >+ </appInfo> >+ <documentation> >+ [Enter API information here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="implementation"/> >+ </appInfo> >+ <documentation> >+ [Enter information about supplied implementation of this extension point.] >+ </documentation> >+ </annotation> >+ >+ >+</schema> >Index: modulecore-src/org/eclipse/wst/common/componentcore/resolvers/IReferenceResolver.java >=================================================================== >RCS file: modulecore-src/org/eclipse/wst/common/componentcore/resolvers/IReferenceResolver.java >diff -N modulecore-src/org/eclipse/wst/common/componentcore/resolvers/IReferenceResolver.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ modulecore-src/org/eclipse/wst/common/componentcore/resolvers/IReferenceResolver.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,12 @@ >+package org.eclipse.wst.common.componentcore.resolvers; >+ >+import org.eclipse.wst.common.componentcore.internal.ReferencedComponent; >+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; >+import org.eclipse.wst.common.componentcore.resources.IVirtualReference; >+ >+public interface IReferenceResolver { >+ public boolean canResolve(IVirtualComponent context, ReferencedComponent referencedComponent); >+ public IVirtualReference resolve(IVirtualComponent context, ReferencedComponent referencedComponent); >+ public boolean canResolve(IVirtualReference reference); >+ public ReferencedComponent resolve(IVirtualReference reference); >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 282269
:
140678
|
140694
| 148568