### Eclipse Workspace Patch 1.0 #P org.eclipse.wst.server.ui Index: serverui/org/eclipse/wst/server/ui/internal/Messages.java =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java,v retrieving revision 1.65 diff -u -r1.65 Messages.java --- serverui/org/eclipse/wst/server/ui/internal/Messages.java 10 Dec 2008 20:06:39 -0000 1.65 +++ serverui/org/eclipse/wst/server/ui/internal/Messages.java 8 Jul 2009 05:28:13 -0000 @@ -285,7 +285,8 @@ public static String serverEditorOverviewPublishSection; public static String serverEditorOverviewPublishDescription; public static String serverEditorOverviewAutoPublishDisable; - public static String serverEditorOverviewAutoPublishEnabled; + public static String serverEditorOverviewAutoPublishEnabledResource; + public static String serverEditorOverviewAutoPublishEnabledBuild; public static String serverEditorOverviewAutoPublishEnabledInterval; public static String serverEditorOverviewPublishCommand; public static String serverEditorOverviewTimeoutSection; Index: serverui/org/eclipse/wst/server/ui/internal/Messages.properties =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties,v retrieving revision 1.93 diff -u -r1.93 Messages.properties --- serverui/org/eclipse/wst/server/ui/internal/Messages.properties 10 Dec 2008 21:20:07 -0000 1.93 +++ serverui/org/eclipse/wst/server/ui/internal/Messages.properties 8 Jul 2009 05:28:14 -0000 @@ -446,7 +446,8 @@ serverEditorOverviewPublishSection=Publishing serverEditorOverviewPublishDescription=Modify settings for publishing. serverEditorOverviewAutoPublishDisable=Never publish automatically -serverEditorOverviewAutoPublishEnabled=Automatically publish when resources change +serverEditorOverviewAutoPublishEnabledResource=Automatically publish when resources change +serverEditorOverviewAutoPublishEnabledBuild=Automatically publish after a build event serverEditorOverviewAutoPublishEnabledInterval=Publishing interval (in seconds): serverEditorOverviewPublishCommand=modify publish settings serverEditorOverviewPublishers=Select publishing actions: Index: serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java,v retrieving revision 1.63 diff -u -r1.63 OverviewEditorPart.java --- serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java 6 Nov 2008 16:34:53 -0000 1.63 +++ serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java 8 Jul 2009 05:28:14 -0000 @@ -93,7 +93,8 @@ protected Combo runtimeCombo; protected Button browse; protected Button autoPublishDisable; - protected Button autoPublishEnable; + protected Button autoPublishEnableResource; + protected Button autoPublishEnableBuild; protected Spinner autoPublishTime; protected Table publishersTable; protected CheckboxTableViewer publishersViewer; @@ -205,9 +206,10 @@ } else if (event.getPropertyName().equals(Server.PROP_AUTO_PUBLISH_SETTING)) { Integer autoPublishSetting = (Integer)event.getNewValue(); int setting = autoPublishSetting.intValue(); - autoPublishEnable.setSelection(setting == Server.AUTO_PUBLISH_ENABLE); + autoPublishEnableResource.setSelection(setting == Server.AUTO_PUBLISH_RESOURCE); + autoPublishEnableBuild.setSelection(setting == Server.AUTO_PUBLISH_BUILD); autoPublishDisable.setSelection(setting == Server.AUTO_PUBLISH_DISABLE); - autoPublishTime.setEnabled(setting == Server.AUTO_PUBLISH_ENABLE); + autoPublishTime.setEnabled(setting != Server.AUTO_PUBLISH_DISABLE); validate(); } else if (event.getPropertyName().equals(Server.PROP_START_TIMEOUT)) { Integer time = (Integer)event.getNewValue(); @@ -619,18 +621,26 @@ autoPublishDisable.setSelection(publishSetting == Server.AUTO_PUBLISH_DISABLE); whs.setHelp(autoPublishDisable, ContextIds.EDITOR_AUTOPUBLISH_DISABLE); - autoPublishEnable = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishEnabled, SWT.RADIO); - autoPublishEnable.setSelection(publishSetting == Server.AUTO_PUBLISH_ENABLE); + autoPublishEnableResource = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishEnabledResource, SWT.RADIO); + autoPublishEnableResource.setSelection(publishSetting == Server.AUTO_PUBLISH_RESOURCE); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; - autoPublishEnable.setLayoutData(data); - whs.setHelp(autoPublishEnable, ContextIds.EDITOR_AUTOPUBLISH_ENABLE); + autoPublishEnableResource.setLayoutData(data); + whs.setHelp(autoPublishEnableResource, ContextIds.EDITOR_AUTOPUBLISH_ENABLE); + + autoPublishEnableBuild = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishEnabledBuild, SWT.RADIO); + autoPublishEnableBuild .setSelection(publishSetting == Server.AUTO_PUBLISH_RESOURCE); + data = new GridData(GridData.FILL_HORIZONTAL); + data.horizontalSpan = 2; + autoPublishEnableBuild.setLayoutData(data); + whs.setHelp(autoPublishEnableBuild, ContextIds.EDITOR_AUTOPUBLISH_ENABLE); + final Label autoPublishTimeLabel = createLabel(toolkit,composite, Messages.serverEditorOverviewAutoPublishEnabledInterval); data = new GridData(); data.horizontalIndent = 20; autoPublishTimeLabel.setLayoutData(data); - autoPublishTimeLabel.setEnabled(autoPublishEnable.getSelection()); + autoPublishTimeLabel.setEnabled(!autoPublishDisable.getSelection()); autoPublishTime = new Spinner(composite, SWT.BORDER); autoPublishTime.setMinimum(0); @@ -640,23 +650,36 @@ data = new GridData(GridData.HORIZONTAL_ALIGN_END); data.widthHint = 30; autoPublishTime.setLayoutData(data); - autoPublishTime.setEnabled(autoPublishEnable.getSelection()); + autoPublishTime.setEnabled(!autoPublishDisable.getSelection()); SWTUtil.setSpinnerTooltip(autoPublishTime); whs.setHelp(autoPublishTime, ContextIds.EDITOR_AUTOPUBLISH_ENABLE); - autoPublishEnable.addSelectionListener(new SelectionAdapter() { + autoPublishEnableResource.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { - if (updating || !autoPublishEnable.getSelection()) + if (updating || !autoPublishEnableResource.getSelection()) return; updating = true; - execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_ENABLE)); + execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_RESOURCE)); updating = false; - autoPublishTimeLabel.setEnabled(autoPublishEnable.getSelection()); - autoPublishTime.setEnabled(autoPublishEnable.getSelection()); + autoPublishTimeLabel.setEnabled(!autoPublishDisable.getSelection()); + autoPublishTime.setEnabled(!autoPublishDisable.getSelection()); validate(); } }); - + + autoPublishEnableBuild.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + if (updating || !autoPublishEnableBuild.getSelection()) + return; + updating = true; + execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_BUILD)); + updating = false; + autoPublishTimeLabel.setEnabled(!autoPublishDisable.getSelection()); + autoPublishTime.setEnabled(!autoPublishDisable.getSelection()); + validate(); + } + }); + autoPublishDisable.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (updating || !autoPublishDisable.getSelection()) @@ -664,8 +687,8 @@ updating = true; execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_DISABLE)); updating = false; - autoPublishTimeLabel.setEnabled(autoPublishEnable.getSelection()); - autoPublishTime.setEnabled(autoPublishEnable.getSelection()); + autoPublishTimeLabel.setEnabled(!autoPublishDisable.getSelection()); + autoPublishTime.setEnabled(!autoPublishDisable.getSelection()); validate(); } }); @@ -952,17 +975,20 @@ Server svr = (Server) server; int publishSetting = svr.getAutoPublishSetting(); autoPublishDisable.setSelection(publishSetting == Server.AUTO_PUBLISH_DISABLE); - autoPublishEnable.setSelection(publishSetting == Server.AUTO_PUBLISH_ENABLE); + autoPublishEnableResource.setSelection(publishSetting == Server.AUTO_PUBLISH_RESOURCE); + autoPublishEnableBuild.setSelection(publishSetting == Server.AUTO_PUBLISH_BUILD); autoPublishTime.setSelection(svr.getAutoPublishTime()); if (readOnly) { autoPublishDisable.setEnabled(false); - autoPublishEnable.setEnabled(false); + autoPublishEnableResource.setEnabled(false); + autoPublishEnableBuild.setEnabled(false); autoPublishTime.setEnabled(false); } else { autoPublishDisable.setEnabled(true); - autoPublishEnable.setEnabled(true); - autoPublishTime.setEnabled(publishSetting == Server.AUTO_PUBLISH_ENABLE); + autoPublishEnableResource.setEnabled(true); + autoPublishEnableBuild.setEnabled(true); + autoPublishTime.setEnabled(publishSetting != Server.AUTO_PUBLISH_DISABLE); } } #P org.eclipse.wst.server.core Index: servercore/org/eclipse/wst/server/core/internal/Server.java =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java,v retrieving revision 1.169 diff -u -r1.169 Server.java --- servercore/org/eclipse/wst/server/core/internal/Server.java 15 May 2009 18:25:36 -0000 1.169 +++ servercore/org/eclipse/wst/server/core/internal/Server.java 8 Jul 2009 05:28:29 -0000 @@ -50,7 +50,9 @@ public static final String FILE_EXTENSION = "server"; public static final int AUTO_PUBLISH_DISABLE = 1; - public static final int AUTO_PUBLISH_ENABLE = 2; + public static final int AUTO_PUBLISH_RESOURCE = 2; + public static final int AUTO_PUBLISH_BUILD = 3; + protected static final String PROP_HOSTNAME = "hostname"; protected static final String SERVER_ID = "server-id"; @@ -159,10 +161,15 @@ public class ResourceChangeJob extends ServerJob { private IModule module; - + private boolean buildEvent; + public ResourceChangeJob(IModule module) { + this(module, true); + } + public ResourceChangeJob(IModule module, boolean buildEvent) { super(NLS.bind(Messages.jobUpdateServer, Server.this.getName())); this.module = module; + this.buildEvent = buildEvent; if (module.getProject() == null) setRule(Server.this); @@ -214,7 +221,7 @@ behaviourDelegate.handleResourceChange(); if (getServerState() == IServer.STATE_STARTED) - autoPublish(); + autoPublish(buildEvent); return Status.OK_STATUS; } @@ -475,7 +482,7 @@ } public int getAutoPublishSetting() { - return getAttribute(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_ENABLE); + return getAttribute(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_RESOURCE); } public int getStartTimeout() { @@ -743,6 +750,10 @@ } protected void handleModuleProjectChange(IModule module) { + handleModuleProjectChange(module, true); + } + + protected void handleModuleProjectChange(IModule module, boolean buildEvent) { Trace.trace(Trace.FINEST, "> handleDeployableProjectChange() " + this + " " + module); // check for duplicate jobs already waiting and don't create a new one @@ -758,7 +769,7 @@ } } - ResourceChangeJob job = new ResourceChangeJob(module); + ResourceChangeJob job = new ResourceChangeJob(module, buildEvent); job.setSystem(true); job.setPriority(Job.BUILD); job.schedule(); @@ -780,11 +791,19 @@ * thread if automatic publishing is currently enabled. */ protected void autoPublish() { + autoPublish(true); + } + + protected void autoPublish(boolean buildEvent) { + stopAutoPublish(); if (getAutoPublishSetting() == AUTO_PUBLISH_DISABLE) return; + if( (getAutoPublishSetting() == AUTO_PUBLISH_BUILD) && !buildEvent) + return; + int time = getAutoPublishTime(); if (time >= 0) { autoPublishThread = new AutoPublishThread(); @@ -2018,9 +2037,9 @@ configuration = ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(configPath)); // for migration from WTP 2.0 -> WTP 3.0 - int autoPubSetting = getAttribute(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_ENABLE); + int autoPubSetting = getAttribute(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_RESOURCE); if (autoPubSetting == 0) - map.put(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_ENABLE); + map.put(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_RESOURCE); } protected void setInternal(ServerWorkingCopy wc) { Index: servercore/org/eclipse/wst/server/core/internal/ResourceManager.java =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java,v retrieving revision 1.61 diff -u -r1.61 ResourceManager.java --- servercore/org/eclipse/wst/server/core/internal/ResourceManager.java 13 Jan 2009 16:59:53 -0000 1.61 +++ servercore/org/eclipse/wst/server/core/internal/ResourceManager.java 8 Jul 2009 05:28:29 -0000 @@ -98,7 +98,13 @@ // ignore clean builds if (event.getBuildKind() == IncrementalProjectBuilder.CLEAN_BUILD) return; - + int kind = event.getBuildKind(); + final boolean buildEvent = + (kind == IncrementalProjectBuilder.INCREMENTAL_BUILD) + || (kind == IncrementalProjectBuilder.FULL_BUILD) + || (kind == IncrementalProjectBuilder.AUTO_BUILD + && ResourcesPlugin.getWorkspace().isAutoBuilding()); + Trace.trace(Trace.RESOURCES, "->- ServerResourceChangeListener responding to resource change: " + event.getType() + " ->-"); IResourceDelta[] children = delta.getAffectedChildren(); if (children != null) { @@ -119,7 +125,7 @@ // only respond to project changes if (resource != null && resource instanceof IProject) { - publishHandleProjectChange(visitorDelta); + publishHandleProjectChange(visitorDelta, buildEvent); return false; } return true; @@ -950,6 +956,17 @@ * @param delta org.eclipse.core.resources.IResourceDelta */ protected void publishHandleProjectChange(IResourceDelta delta) { + publishHandleProjectChange(delta, true); + } + + /** + * A project has changed. If this is an add or remove, check + * to see if it is part of a current server configuration. + * + * @param delta org.eclipse.core.resources.IResourceDelta + * @param buildEvent whether this event was a build event + */ + protected void publishHandleProjectChange(IResourceDelta delta, boolean buildEvent) { Trace.trace(Trace.FINEST, "> publishHandleProjectChange " + delta.getResource()); IProject project = (IProject) delta.getResource(); @@ -974,7 +991,7 @@ for (int i = 0; i < size; i++) { for (int j = 0; j < size2; j++) { if (servers2[j].getAdapter(ServerDelegate.class) != null) - ((Server) servers2[j]).handleModuleProjectChange(modules[i]); + ((Server) servers2[j]).handleModuleProjectChange(modules[i], buildEvent); } } Trace.trace(Trace.FINEST, "< publishHandleProjectChange");