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 49421 Details for
Bug 150673
[modulecore] Add visitor API to virtual component layer
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
updated ResourceManager that fast IModuleResourceDelta
150673-servercore.diff (text/plain), 19.09 KB, created by
Igor Fedorenko
on 2006-09-05 14:45:42 EDT
(
hide
)
Description:
updated ResourceManager that fast IModuleResourceDelta
Filename:
MIME Type:
Creator:
Igor Fedorenko
Created:
2006-09-05 14:45:42 EDT
Size:
19.09 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.wst.server.ui >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.ui/plugin.xml,v >retrieving revision 1.25 >diff -u -r1.25 plugin.xml >--- plugin.xml 5 Jul 2006 17:26:15 -0000 1.25 >+++ plugin.xml 5 Sep 2006 18:25:45 -0000 >@@ -81,6 +81,12 @@ > id="org.eclipse.internet" > name="%preferenceInternetTitle" > class="org.eclipse.wst.server.ui.internal.webbrowser.InternetPreferencePage"/> >+ <page >+ category="org.eclipse.wst.server.ui.preferencePage" >+ class="org.eclipse.wst.server.ui.internal.WorkinprogressPage" >+ id="org.eclipse.wst.server.ui.workinprogress.preferencePage" >+ name="Work in progress"> >+ </page> > </extension> > > <extension point="org.eclipse.ui.keywords"> >@@ -350,4 +356,4 @@ > icon="icons/obj16/web_module.gif"/> > </extension> > >-</plugin> >\ No newline at end of file >+</plugin> >Index: serverui/org/eclipse/wst/server/ui/internal/WorkinprogressPage.java >=================================================================== >RCS file: serverui/org/eclipse/wst/server/ui/internal/WorkinprogressPage.java >diff -N serverui/org/eclipse/wst/server/ui/internal/WorkinprogressPage.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ serverui/org/eclipse/wst/server/ui/internal/WorkinprogressPage.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,64 @@ >+package org.eclipse.wst.server.ui.internal; >+ >+import org.eclipse.jface.preference.PreferencePage; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.layout.GridData; >+import org.eclipse.swt.layout.GridLayout; >+import org.eclipse.swt.widgets.Button; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.ui.IWorkbench; >+import org.eclipse.ui.IWorkbenchPreferencePage; >+import org.eclipse.wst.server.core.internal.ServerPreferences; >+ >+public class WorkinprogressPage extends PreferencePage implements IWorkbenchPreferencePage { >+ >+ protected ServerPreferences preferences; >+ >+ protected Button useWorkinprogressDeltaProcessing; >+ >+ public WorkinprogressPage() { >+ super(); >+ >+ preferences = ServerPreferences.getInstance(); >+ } >+ >+ protected Control createContents(Composite parent) { >+ initializeDialogUnits(parent); >+ >+ Composite composite = new Composite(parent, SWT.NONE); >+ GridLayout layout = new GridLayout(); >+ layout.horizontalSpacing = convertHorizontalDLUsToPixels(4); >+ layout.verticalSpacing = convertVerticalDLUsToPixels(4); >+ layout.marginWidth = 0; >+ layout.marginHeight = 0; >+ layout.numColumns = 3; >+ composite.setLayout(layout); >+ GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); >+ composite.setLayoutData(data); >+ >+ useWorkinprogressDeltaProcessing = new Button(composite, SWT.CHECK); >+ useWorkinprogressDeltaProcessing.setText("Use resource deltas to compute module publish state"); >+ data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); >+ data.horizontalSpan = 3; >+ useWorkinprogressDeltaProcessing.setLayoutData(data); >+ useWorkinprogressDeltaProcessing.setSelection(preferences.isWorkinprogressDeltaProcessing()); >+ >+ return null; >+ } >+ >+ public void init(IWorkbench workbench) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public boolean performOk() { >+ preferences.setWorkinprogressDeltaProcessing(useWorkinprogressDeltaProcessing.getSelection()); >+ >+ return true; >+ } >+ >+ protected void performDefaults() { >+ useWorkinprogressDeltaProcessing.setSelection(preferences.isDefaultWorkinprogressDeltaProcessing()); >+ } >+} >#P org.eclipse.wst.server.core >Index: .settings/org.eclipse.jdt.core.prefs >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs,v >retrieving revision 1.1 >diff -u -r1.1 org.eclipse.jdt.core.prefs >--- .settings/org.eclipse.jdt.core.prefs 8 May 2006 01:11:00 -0000 1.1 >+++ .settings/org.eclipse.jdt.core.prefs 5 Sep 2006 18:25:45 -0000 >@@ -1,4 +1,4 @@ >-#Sun May 07 20:56:17 EDT 2006 >+#Fri Aug 18 14:43:33 EDT 2006 > eclipse.preferences.version=1 > org.eclipse.jdt.core.builder.cleanOutputFolder=clean > org.eclipse.jdt.core.builder.duplicateResourceTask=error >@@ -8,23 +8,23 @@ > org.eclipse.jdt.core.circularClasspath=error > org.eclipse.jdt.core.classpath.exclusionPatterns=enabled > org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled >-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled >-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 >+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled >+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 > org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve >-org.eclipse.jdt.core.compiler.compliance=1.4 >+org.eclipse.jdt.core.compiler.compliance=1.5 > org.eclipse.jdt.core.compiler.debug.lineNumber=generate > org.eclipse.jdt.core.compiler.debug.localVariable=generate > org.eclipse.jdt.core.compiler.debug.sourceFile=generate > org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000 > org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning >-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning >+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error > org.eclipse.jdt.core.compiler.problem.autoboxing=ignore > org.eclipse.jdt.core.compiler.problem.deprecation=ignore > org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled > org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled > org.eclipse.jdt.core.compiler.problem.discouragedReference=warning > org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore >-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning >+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error > org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore > org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled > org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore >@@ -69,6 +69,6 @@ > org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled > org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error > org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning >-org.eclipse.jdt.core.compiler.source=1.3 >+org.eclipse.jdt.core.compiler.source=1.5 > org.eclipse.jdt.core.incompatibleJDKLevel=ignore > org.eclipse.jdt.core.incompleteClasspath=error >Index: .settings/org.eclipse.jdt.ui.prefs >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs,v >retrieving revision 1.1 >diff -u -r1.1 org.eclipse.jdt.ui.prefs >--- .settings/org.eclipse.jdt.ui.prefs 8 May 2006 01:11:00 -0000 1.1 >+++ .settings/org.eclipse.jdt.ui.prefs 5 Sep 2006 18:25:45 -0000 >@@ -1,3 +1,4 @@ >-#Sun May 07 20:56:13 EDT 2006 >+#Fri Aug 18 14:43:32 EDT 2006 > eclipse.preferences.version=1 >+internal.default.compliance=default > org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/> >Index: servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java,v >retrieving revision 1.16 >diff -u -r1.16 ModuleDelegate.java >--- servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java 18 Nov 2005 16:31:00 -0000 1.16 >+++ servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java 5 Sep 2006 18:25:45 -0000 >@@ -10,6 +10,7 @@ > *******************************************************************************/ > package org.eclipse.wst.server.core.model; > >+import org.eclipse.core.resources.IResourceDelta; > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IStatus; > import org.eclipse.wst.server.core.IModule; >@@ -109,4 +110,6 @@ > * @throws CoreException thrown if there is a problem getting the members > */ > public abstract IModuleResource[] members() throws CoreException; >+ >+ public abstract IModuleResourceDelta getModuleResourceDelta(IResourceDelta workspaceDelta) throws CoreException; > } >\ No newline at end of file >Index: servercore/org/eclipse/wst/server/core/internal/ResourceManager.java >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java,v >retrieving revision 1.43 >diff -u -r1.43 ResourceManager.java >--- servercore/org/eclipse/wst/server/core/internal/ResourceManager.java 14 Aug 2006 21:16:07 -0000 1.43 >+++ servercore/org/eclipse/wst/server/core/internal/ResourceManager.java 5 Sep 2006 18:25:45 -0000 >@@ -11,12 +11,42 @@ > package org.eclipse.wst.server.core.internal; > > import java.io.ByteArrayInputStream; >-import java.util.*; >- >-import org.eclipse.core.runtime.*; >-import org.eclipse.core.resources.*; >- >-import org.eclipse.wst.server.core.*; >+import java.util.ArrayList; >+import java.util.Arrays; >+import java.util.Comparator; >+import java.util.HashMap; >+import java.util.HashSet; >+import java.util.Iterator; >+import java.util.List; >+import java.util.Map; >+import java.util.Set; >+ >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IFolder; >+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.IResourceProxy; >+import org.eclipse.core.resources.IResourceProxyVisitor; >+import org.eclipse.core.resources.IWorkspace; >+import org.eclipse.core.resources.IncrementalProjectBuilder; >+import org.eclipse.core.resources.ResourcesPlugin; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.Preferences; >+import org.eclipse.wst.server.core.IModule; >+import org.eclipse.wst.server.core.IRuntime; >+import org.eclipse.wst.server.core.IRuntimeLifecycleListener; >+import org.eclipse.wst.server.core.IServer; >+import org.eclipse.wst.server.core.IServerLifecycleListener; >+import org.eclipse.wst.server.core.ServerCore; >+import org.eclipse.wst.server.core.ServerUtil; >+import org.eclipse.wst.server.core.model.IModuleResourceDelta; >+import org.eclipse.wst.server.core.model.ModuleDelegate; > import org.eclipse.wst.server.core.model.ServerDelegate; > import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate; > /** >@@ -121,6 +151,45 @@ > Trace.trace(Trace.SEVERE, "Error responding to resource change", e); > } > >+ if (ServerPreferences.getInstance().isWorkinprogressDeltaProcessing()) { >+ // search for changes in deployed modules >+ Map<IModule, Set<IServer>> modules = new HashMap<IModule, Set<IServer>>(); >+ for (IServer server : getServers()) { >+ if (server.getAdapter(ServerDelegate.class) == null) continue; // server has not been published yet >+ /* >+ * TODO server.getModules() returns root modules -- will this miss changes in child modules??? >+ */ >+ for (IModule module : server.getModules()) { >+ Set<IServer> servers = modules.get(module); >+ if (servers == null) { >+ servers = new HashSet<IServer>(); >+ modules.put(module, servers); >+ } >+ servers.add(server); >+ } >+ } >+ for (IModule module : modules.keySet()) { >+ ModuleDelegate delegate = (ModuleDelegate) module.getAdapter(ModuleDelegate.class); >+ if (delegate == null) continue; // module has not been published yet >+ try { >+ /* >+ * The idea is to eventually use moduleDelta in background thread >+ * to actualy publish incremental changes. Otherwise, it is possible >+ * to implement much cheaper delegate.hasChanges(delta) which >+ * does not deeply traverse all changes. >+ */ >+ IModuleResourceDelta moduleDelta = delegate.getModuleResourceDelta(delta); >+ if (IResourceDelta.NO_CHANGE != moduleDelta.getKind()) { >+ for (IServer server : modules.get(module)) { >+ ((Server) server).handleModuleProjectChange(module); >+ } >+ } >+ } catch (Exception e) { >+ Trace.trace(Trace.SEVERE, "Error responding to resource change", e); >+ } >+ } >+ } >+ > Trace.trace(Trace.RESOURCES, "-<- Done ServerResourceChangeListener responding to resource change -<-"); > } > >@@ -910,18 +979,20 @@ > // process module changes > ProjectModuleFactoryDelegate.handleGlobalProjectChange(project, delta); > >- final IModule module = ServerUtil.getModule(project); >- if (module == null) >- return; >- >- Trace.trace(Trace.FINEST, "- publishHandleProjectChange"); >- >- IServer[] servers2 = getServers(); >- if (servers2 != null) { >- int size = servers2.length; >- for (int i = 0; i < size; i++) { >- if (servers2[i].getAdapter(ServerDelegate.class) != null) >- ((Server) servers2[i]).handleModuleProjectChange(module); >+ if (!ServerPreferences.getInstance().isWorkinprogressDeltaProcessing()) { >+ final IModule module = ServerUtil.getModule(project); >+ if (module == null) >+ return; >+ >+ Trace.trace(Trace.FINEST, "- publishHandleProjectChange"); >+ >+ IServer[] servers2 = getServers(); >+ if (servers2 != null) { >+ int size = servers2.length; >+ for (int i = 0; i < size; i++) { >+ if (servers2[i].getAdapter(ServerDelegate.class) != null) >+ ((Server) servers2[i]).handleModuleProjectChange(module); >+ } > } > } > Trace.trace(Trace.FINEST, "< publishHandleProjectChange"); >Index: servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java,v >retrieving revision 1.16 >diff -u -r1.16 ServerPreferences.java >--- servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java 31 Jul 2006 18:30:02 -0000 1.16 >+++ servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java 5 Sep 2006 18:25:45 -0000 >@@ -27,6 +27,8 @@ > private static final String PREF_MACHINE_SPEED = "machine-speed"; > > private static final String PREF_SYNC_ON_STARTUP = "sync-on-startup"; >+ >+ private static final String PREF_WORKINPROGRESS_DELTA_PROCESSING = "delta-processing"; > > private Preferences preferences; > >@@ -291,6 +293,19 @@ > preferences.setValue(PREF_AUTO_PUBLISH_REMOTE_TIME, auto); > ServerPlugin.getInstance().savePluginPreferences(); > } >+ >+ public boolean isWorkinprogressDeltaProcessing() { >+ return preferences.getBoolean(PREF_WORKINPROGRESS_DELTA_PROCESSING); >+ } >+ >+ public boolean isDefaultWorkinprogressDeltaProcessing() { >+ return false; >+ } >+ >+ public void setWorkinprogressDeltaProcessing(boolean workinprogress) { >+ preferences.setValue(PREF_WORKINPROGRESS_DELTA_PROCESSING, workinprogress); >+ ServerPlugin.getInstance().savePluginPreferences(); >+ } > > /** > * Set the default values. >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/webtools/wst/components/server/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF,v >retrieving revision 1.21 >diff -u -r1.21 MANIFEST.MF >--- META-INF/MANIFEST.MF 8 Aug 2006 15:43:06 -0000 1.21 >+++ META-INF/MANIFEST.MF 5 Sep 2006 18:25:45 -0000 >@@ -15,5 +15,6 @@ > org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)", > org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)", > org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)", >- org.eclipse.update.core;resolution:=optional;bundle-version="[3.2.0,4.0.0)" >+ org.eclipse.update.core;bundle-version="[3.2.0,4.0.0)";resolution:=optional, >+ org.eclipse.wst.common.modulecore > Eclipse-LazyStart: true >Index: servercore/org/eclipse/wst/server/core/internal/ModuleFolder2.java >=================================================================== >RCS file: servercore/org/eclipse/wst/server/core/internal/ModuleFolder2.java >diff -N servercore/org/eclipse/wst/server/core/internal/ModuleFolder2.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ servercore/org/eclipse/wst/server/core/internal/ModuleFolder2.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,81 @@ >+package org.eclipse.wst.server.core.internal; >+ >+import java.io.File; >+import java.util.List; >+ >+import org.eclipse.core.resources.IContainer; >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IFolder; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.wst.common.componentcore.resources.VirtualTreeNode; >+import org.eclipse.wst.common.componentcore.resources.VirtualTreeNode.Entry; >+import org.eclipse.wst.server.core.model.IModuleFolder; >+import org.eclipse.wst.server.core.model.IModuleResource; >+ >+/** >+ * IModuleFolder implementation that populates members lazily, when requested. >+ * #members() is not thread-safe. >+ */ >+public class ModuleFolder2 implements IModuleFolder { >+ >+ private final VirtualTreeNode folder; >+ private IModuleResource[] members; >+ >+ public ModuleFolder2(VirtualTreeNode folder) { >+ this.folder = folder; >+ } >+ >+ public IModuleResource[] members() { >+ if (members == null) { >+ try { >+ List<VirtualTreeNode> children = folder.members(); >+ members = new IModuleResource[children.size()]; >+ int i = 0; >+ for (VirtualTreeNode child : children) { >+ members[i++] = newModuleResource(child); >+ } >+ } catch (CoreException e) { >+ // TODO log >+ } >+ } >+ return members; >+ } >+ >+ public IPath getModuleRelativePath() { >+ // TODO cache >+ return folder.getRuntimePath().removeLastSegments(1).makeRelative(); >+ } >+ >+ public String getName() { >+ // TODO cache >+ return folder.getRuntimePath().lastSegment(); >+ } >+ >+ public Object getAdapter(Class adapter) { >+ List<Entry> resolvedEntries = folder.getResolvedEntries(); >+ if (resolvedEntries == null || resolvedEntries.size() == 0) return null; >+ if (IContainer.class.equals(adapter) || IFolder.class.equals(adapter)) { >+ return resolvedEntries.get(0).getResource(); >+ } >+ return null; >+ } >+ >+ public static IModuleResource newModuleResource(VirtualTreeNode node) { >+ IModuleResource result; >+ if (node.isFolder()) { >+ result = new ModuleFolder2(node); >+ } else { >+ IPath path = node.getRuntimePath().removeLastSegments(1).makeRelative(); >+ List<Entry> resolvedEntries = node.getResolvedEntries(); >+ IFile ifile = (IFile) resolvedEntries.get(0).getResource(); >+ if (ifile != null) { >+ result = new ModuleFile(ifile, ifile.getName(), path); >+ } else { >+ File file = resolvedEntries.get(0).getFile(); >+ result = new ModuleFile(file, file.getName(), path); >+ } >+ } >+ return result; >+ } >+}
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 150673
:
49420
| 49421 |
49422