diff options
author | pfullbright | 2011-03-11 16:20:10 +0000 |
---|---|---|
committer | pfullbright | 2011-03-11 16:20:10 +0000 |
commit | b235a3e53aa78624f5329d7b2e67d78cd1868094 (patch) | |
tree | 11c6fcbfc3f5c062b5a9470cbb5bd9f7ee90e8fd /jaxb/plugins | |
parent | 3a3cd088da5cf2eb72ef7b8049b2a1e0f8cd82a9 (diff) | |
download | webtools.dali-b235a3e53aa78624f5329d7b2e67d78cd1868094.tar.gz webtools.dali-b235a3e53aa78624f5329d7b2e67d78cd1868094.tar.xz webtools.dali-b235a3e53aa78624f5329d7b2e67d78cd1868094.zip |
added basic support for jaxb.index (resource model, tie-in to context calculation)
Diffstat (limited to 'jaxb/plugins')
10 files changed, 389 insertions, 7 deletions
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/META-INF/MANIFEST.MF b/jaxb/plugins/org.eclipse.jpt.jaxb.core/META-INF/MANIFEST.MF index e49484abc0..893cd60200 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/META-INF/MANIFEST.MF +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/META-INF/MANIFEST.MF @@ -43,8 +43,10 @@ Export-Package: org.eclipse.jpt.jaxb.core, org.eclipse.jpt.jaxb.core.internal.resource.java;x-internal:=true, org.eclipse.jpt.jaxb.core.internal.resource.java.binary;x-internal:=true, org.eclipse.jpt.jaxb.core.internal.resource.java.source;x-internal:=true, + org.eclipse.jpt.jaxb.core.internal.resource.jaxbindex, org.eclipse.jpt.jaxb.core.internal.validation;x-internal:=true, org.eclipse.jpt.jaxb.core.libprov, org.eclipse.jpt.jaxb.core.platform, org.eclipse.jpt.jaxb.core.resource.java, + org.eclipse.jpt.jaxb.core.resource.jaxbindex, org.eclipse.jpt.jaxb.core.xsd diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml b/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml index cda3f8216d..ed4e793d69 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/plugin.xml @@ -22,6 +22,18 @@ <!-- ***** extensions ***** --> + <extension + point="org.eclipse.core.contenttype.contentTypes"> + + <content-type + id="org.eclipse.jpt.jaxb.core.content.jaxbIndex" + name="%JAXB_INDEX_CONTENT" + base-type="org.eclipse.core.runtime.text" + priority="high" + file-names="jaxb.index"/> + + </extension> + <extension point="org.eclipse.core.expressions.propertyTesters"> diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbProject.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbProject.java index 0845231e37..5eaae199ab 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbProject.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JaxbProject.java @@ -26,6 +26,7 @@ import org.eclipse.jpt.jaxb.core.platform.JaxbPlatform; import org.eclipse.jpt.jaxb.core.platform.JaxbPlatformDefinition; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAbstractType; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage; +import org.eclipse.jpt.jaxb.core.resource.jaxbindex.JaxbIndexResource; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -203,6 +204,14 @@ public interface JaxbProject JavaResourceAbstractType getJavaResourceType(String typeName, JavaResourceAbstractType.Kind kind); + // **************** jaxb.index resources ***************************************** + + /** + * Return all jaxb.index resource models within the project + */ + Iterable<JaxbIndexResource> getJaxbIndexResources(); + + // **************** context model ***************************************** /** diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JptJaxbCorePlugin.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JptJaxbCorePlugin.java index acba0d5a92..c23bacdd72 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JptJaxbCorePlugin.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/JptJaxbCorePlugin.java @@ -18,11 +18,13 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jpt.common.core.JptResourceType; import org.eclipse.jpt.jaxb.core.internal.JptJaxbCoreMessages; import org.eclipse.jpt.jaxb.core.internal.platform.JaxbPlatformManagerImpl; import org.eclipse.jpt.jaxb.core.platform.JaxbPlatformDescription; @@ -52,7 +54,7 @@ public class JptJaxbCorePlugin extends Plugin { private static volatile boolean flushPreferences = true; - + /** * The plug-in identifier of Dali JAXB core * (value <code>"org.eclipse.jpt.jaxb.core"</code>). @@ -109,6 +111,27 @@ public class JptJaxbCorePlugin */ public static final String VALIDATION_MARKER_ID = PLUGIN_ID + ".jaxbProblemMarker"; //$NON-NLS-1$ + /** + * The content type for jaxb.index files + */ + public static final IContentType JAXB_INDEX_CONTENT_TYPE = getJaxbContentType("jaxbIndex"); + + /** + * The resource type for jaxb.index files + */ + public static final JptResourceType JAXB_INDEX_RESOURCE_TYPE = new JptResourceType(JAXB_INDEX_CONTENT_TYPE); + + private static IContentType getJaxbContentType(String contentType) { + return getContentType(CONTENT_PREFIX_ + contentType); + } + + public static final String CONTENT_PREFIX = PLUGIN_ID_ + "content"; //$NON-NLS-1$ + + public static final String CONTENT_PREFIX_ = CONTENT_PREFIX + '.'; + + private static IContentType getContentType(String contentType) { + return Platform.getContentTypeManager().getContentType(contentType); + } // **************** fields ************************************************ diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java index dd87607d47..f8d4487457 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/AbstractJaxbProject.java @@ -76,6 +76,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceCompilationUnit; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceNode; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackageInfoCompilationUnit; +import org.eclipse.jpt.jaxb.core.resource.jaxbindex.JaxbIndexResource; import org.eclipse.jst.common.project.facet.core.libprov.ILibraryProvider; import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate; import org.eclipse.jst.j2ee.model.internal.validation.ValidationCancelledException; @@ -896,8 +897,20 @@ public abstract class AbstractJaxbProject // protected Iterable<IPackageFragmentRoot> getPackageFragmentRoots() throws JavaModelException { // return new ArrayIterable<IPackageFragmentRoot>(this.getJavaProject().getPackageFragmentRoots()); // } - - + + + // **************** jaxb.index resources ***************************************** + + public Iterable<JaxbIndexResource> getJaxbIndexResources() { + return new TransformationIterable<JaxbFile, JaxbIndexResource>(getJaxbFiles(JptJaxbCorePlugin.JAXB_INDEX_CONTENT_TYPE)) { + @Override + protected JaxbIndexResource transform(JaxbFile o) { + return (JaxbIndexResource) o.getResourceModel(); + } + }; + } + + // ********** Java events ********** // TODO handle changes to external projects diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java index 5b61923364..8a6459cfb1 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/context/GenericContextRoot.java @@ -17,7 +17,9 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.jpt.common.utility.internal.ClassName; import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.NotNullFilter; import org.eclipse.jpt.common.utility.internal.StringTools; +import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable; import org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable; import org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable; @@ -37,6 +39,7 @@ import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceAbstractType; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceEnum; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourcePackage; import org.eclipse.jpt.jaxb.core.resource.java.JavaResourceType; +import org.eclipse.jpt.jaxb.core.resource.jaxbindex.JaxbIndexResource; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; @@ -99,7 +102,7 @@ public class GenericContextRoot this.types.put(registryResourceType.getName(), buildRegistry(registryResourceType)); } - // calculate initial set of persistent types (annotated with @XmlType) + // calculate initial set of persistent types (annotated with @XmlType or listed in jaxb.index files) final Set<JavaResourceAbstractType> resourceTypesToProcess = calculateInitialPersistentTypes(); // while there are resource types to process or types to scan, continue to do so @@ -197,7 +200,7 @@ public class GenericContextRoot } } - // calculate initial set of persistent types (annotated with @XmlType) + // calculate initial set of persistent types (annotated with @XmlType or listed in jaxb.index files) final Set<JavaResourceAbstractType> resourceTypesToProcess = calculateInitialPersistentTypes(); // while there are resource types to process or types to scan, continue to do so @@ -299,15 +302,34 @@ public class GenericContextRoot /* * Calculate set of resource types annotated with @XmlType (and not @XmlRegistry) + * plus those referred to in jaxb.index files */ protected Set<JavaResourceAbstractType> calculateInitialPersistentTypes() { - return CollectionTools.set( + Set<JavaResourceAbstractType> set = CollectionTools.set( new FilteringIterable<JavaResourceAbstractType>(getJaxbProject().getJavaSourceResourceTypes()) { @Override protected boolean accept(JavaResourceAbstractType o) { return o.getAnnotation(JAXB.XML_TYPE) != null && o.getAnnotation(JAXB.XML_REGISTRY) == null; } }); + CollectionTools.addAll( + set, + new FilteringIterable<JavaResourceAbstractType>( + new TransformationIterable<String, JavaResourceAbstractType>( + new CompositeIterable<String>( + new TransformationIterable<JaxbIndexResource, Iterable<String>>(getJaxbProject().getJaxbIndexResources()) { + @Override + protected Iterable<String>transform(JaxbIndexResource o) { + return o.getFullyQualifiedClassNames(); + } + })) { + @Override + protected JavaResourceAbstractType transform(String o) { + return getJaxbProject().getJavaResourceType(o); + } + }, + NotNullFilter.<JavaResourceAbstractType>instance())); + return set; } protected void processType(JavaResourceAbstractType resourceType, Set<String> typesToUpdate) { diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/jaxb21/AbstractJaxb_2_1_PlatformDefinition.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/jaxb21/AbstractJaxb_2_1_PlatformDefinition.java index c8a445aa9a..9a7b0d1688 100644 --- a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/jaxb21/AbstractJaxb_2_1_PlatformDefinition.java +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/jaxb21/AbstractJaxb_2_1_PlatformDefinition.java @@ -53,6 +53,7 @@ import org.eclipse.jpt.jaxb.core.internal.resource.java.XmlSeeAlsoAnnotationDefi import org.eclipse.jpt.jaxb.core.internal.resource.java.XmlTransientAnnotationDefinition; import org.eclipse.jpt.jaxb.core.internal.resource.java.XmlTypeAnnotationDefinition; import org.eclipse.jpt.jaxb.core.internal.resource.java.XmlValueAnnotationDefinition; +import org.eclipse.jpt.jaxb.core.internal.resource.jaxbindex.JaxbIndexResourceModelProvider; import org.eclipse.jpt.jaxb.core.resource.java.AnnotationDefinition; import org.eclipse.jpt.jaxb.core.resource.java.NestableAnnotationDefinition; @@ -121,7 +122,8 @@ public abstract class AbstractJaxb_2_1_PlatformDefinition // order should not be important here return new JaxbResourceModelProvider[] { JavaResourceModelProvider.instance(), - JavaPackageInfoResourceModelProvider.instance()}; + JavaPackageInfoResourceModelProvider.instance(), + JaxbIndexResourceModelProvider.instance()}; } diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/jaxbindex/JaxbIndexResourceImpl.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/jaxbindex/JaxbIndexResourceImpl.java new file mode 100644 index 0000000000..7c963f1f2d --- /dev/null +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/jaxbindex/JaxbIndexResourceImpl.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + *******************************************************************************/ +package org.eclipse.jpt.jaxb.core.internal.resource.jaxbindex; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; +import java.util.Vector; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IPackageFragment; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jpt.common.core.JptResourceModelListener; +import org.eclipse.jpt.common.core.JptResourceType; +import org.eclipse.jpt.common.utility.internal.ListenerList; +import org.eclipse.jpt.common.utility.internal.StringTools; +import org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable; +import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; +import org.eclipse.jpt.jaxb.core.JptJaxbCorePlugin; +import org.eclipse.jpt.jaxb.core.resource.jaxbindex.JaxbIndexResource; + + +public class JaxbIndexResourceImpl + implements JaxbIndexResource { + + protected final ListenerList<JptResourceModelListener> resourceModelListenerList = + new ListenerList<JptResourceModelListener>(JptResourceModelListener.class); + + + protected final List<String> classNames = new Vector<String>(); + + protected IFile file; + + + public JaxbIndexResourceImpl(IFile file) { + super(); + if (file == null) { + throw new IllegalArgumentException("file cannot be null"); + } + this.file = file; + buildClassNames(); + } + + + private void buildClassNames() { + InputStream stream = null; + + try { + stream = file.getContents(); + } + catch (CoreException ce) { + JptJaxbCorePlugin.log(ce); + return; + } + + if (stream != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + try { + String line = reader.readLine(); + while (line != null) { + String className = line.trim(); + this.classNames.add(className); + line = reader.readLine(); + } + } + catch (Exception ex) { + JptJaxbCorePlugin.log(ex); + } + } + } + + public Iterable<String> getFullyQualifiedClassNames() { + String packageName = getPackageName(); + final String packagePrefix = StringTools.stringIsEmpty(packageName) ? "" : packageName + "."; + return new TransformationIterable<String, String>( + new SnapshotCloneIterable<String>(this.classNames)) { + @Override + protected String transform(String shortClassName) { + return packagePrefix + shortClassName; + } + }; + } + + protected String getPackageName() { + IJavaElement javaElement = JavaCore.create(this.file.getParent()); + if (javaElement != null && javaElement.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { + return ((IPackageFragment) javaElement).getElementName(); + } + return null; + } + + void update() { + this.classNames.clear(); + buildClassNames(); + resourceModelChanged(); + } + + + // ********** JptResourceModel implementation ********** + + public JptResourceType getResourceType() { + return JptJaxbCorePlugin.JAXB_INDEX_RESOURCE_TYPE; + } + + public void addResourceModelListener(JptResourceModelListener listener) { + this.resourceModelListenerList.add(listener); + } + + public void removeResourceModelListener(JptResourceModelListener listener) { + this.resourceModelListenerList.remove(listener); + } + + protected void resourceModelChanged() { + for (JptResourceModelListener listener : this.resourceModelListenerList.getListeners()) { + listener.resourceModelChanged(this); + } + } +} diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/jaxbindex/JaxbIndexResourceModelProvider.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/jaxbindex/JaxbIndexResourceModelProvider.java new file mode 100644 index 0000000000..c99f82f073 --- /dev/null +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/internal/resource/jaxbindex/JaxbIndexResourceModelProvider.java @@ -0,0 +1,153 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + *******************************************************************************/ +package org.eclipse.jpt.jaxb.core.internal.resource.jaxbindex; + +import java.util.HashMap; +import java.util.Map; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.IResourceChangeListener; +import org.eclipse.core.resources.IResourceDelta; +import org.eclipse.core.resources.IResourceDeltaVisitor; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.content.IContentType; +import org.eclipse.jpt.common.core.JptResourceModel; +import org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable; +import org.eclipse.jpt.jaxb.core.JaxbProject; +import org.eclipse.jpt.jaxb.core.JaxbResourceModelProvider; +import org.eclipse.jpt.jaxb.core.JptJaxbCorePlugin; + + +public class JaxbIndexResourceModelProvider + implements JaxbResourceModelProvider { + + // singleton + private static final JaxbResourceModelProvider INSTANCE = new JaxbIndexResourceModelProvider(); + + /** + * Return the singleton. + */ + public static JaxbResourceModelProvider instance() { + return INSTANCE; + } + + + private final Map<IFile, JaxbIndexResourceImpl> models = new HashMap<IFile, JaxbIndexResourceImpl>(); + + private final IResourceChangeListener resourceChangeListener; + + + /** + * Enforce singleton usage + */ + private JaxbIndexResourceModelProvider() { + super(); + this.resourceChangeListener = buildResourceChangeListener(); + ResourcesPlugin.getWorkspace().addResourceChangeListener(this.resourceChangeListener); + } + + + protected IResourceChangeListener buildResourceChangeListener() { + return new IResourceChangeListener() { + public void resourceChanged(IResourceChangeEvent event) { + handleResourceChangeEvent(event); + } + }; + } + + public IContentType getContentType() { + return JptJaxbCorePlugin.JAXB_INDEX_CONTENT_TYPE; + } + + public JptResourceModel buildResourceModel(JaxbProject jaxbProject, IFile file) { + JaxbIndexResourceImpl resource = this.models.get(file); + if (resource != null) { + return resource; + } + resource = new JaxbIndexResourceImpl(file); + this.models.put(file, resource); + return resource; + } + + protected void handleResourceChangeEvent(IResourceChangeEvent event) { + switch (event.getType()) { + case IResourceChangeEvent.PRE_CLOSE : + case IResourceChangeEvent.PRE_DELETE : + removeProjectResources((IProject) event.getResource()); + return; + + case IResourceChangeEvent.POST_CHANGE : + updateResources(event.getDelta()); + } + } + + protected void removeProjectResources(IProject removedProject) { + for (IFile file : new SnapshotCloneIterable<IFile>(this.models.keySet())) { + if (file.getProject().equals(removedProject)) { + removeResource(file); + } + } + } + + protected void updateResources(IResourceDelta delta) { + try { + delta.accept(new ResourceDeltaVisitor()); + } + catch (CoreException ce) { + // shouldn't happen + JptJaxbCorePlugin.log(ce); + } + } + + protected void removeResource(IFile file) { + this.models.remove(file); + } + + protected void updateResource(IFile file) { + JaxbIndexResourceImpl resource = this.models.get(file); + if (resource != null) { + resource.update(); + } + } + + + protected class ResourceDeltaVisitor + implements IResourceDeltaVisitor { + + public boolean visit(IResourceDelta delta) { + IResource res = delta.getResource(); + switch (res.getType()) { + case IResource.ROOT : + return true; // visit children + case IResource.PROJECT : + return true; // visit children + case IResource.FOLDER : + return true; // visit children + case IResource.FILE : + fileChanged((IFile) res, delta.getKind()); + return false; // no children + default : + return false; // no children (probably shouldn't get here...) + } + } + + protected void fileChanged(IFile file, int deltaKind) { + if (deltaKind == IResourceDelta.REMOVED) { + JaxbIndexResourceModelProvider.this.removeResource(file); + } + else if (deltaKind == IResourceDelta.CHANGED) { + JaxbIndexResourceModelProvider.this.updateResource(file); + } + } + } +} diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/jaxbindex/JaxbIndexResource.java b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/jaxbindex/JaxbIndexResource.java new file mode 100644 index 0000000000..49285aeb3d --- /dev/null +++ b/jaxb/plugins/org.eclipse.jpt.jaxb.core/src/org/eclipse/jpt/jaxb/core/resource/jaxbindex/JaxbIndexResource.java @@ -0,0 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. 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: + * Oracle - initial API and implementation + *******************************************************************************/ +package org.eclipse.jpt.jaxb.core.resource.jaxbindex; + +import org.eclipse.jpt.common.core.JptResourceModel; + + +public interface JaxbIndexResource + extends JptResourceModel { + + Iterable<String> getFullyQualifiedClassNames(); +} |