improve publish state
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
index deeab0e..c2a9cb5 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
@@ -87,13 +87,22 @@
}
private void setModulePublishState( IModule[] module, IStatus[] status ) throws CoreException {
- if(status==null || status.length < 1 ){
- setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
- }else {
- for (int i=0; i < status.length; i++) {
- if (IStatus.ERROR == status[i].getSeverity()){
- setModulePublishState(module, IServer.PUBLISH_STATE_UNKNOWN);
- throw new CoreException(status[i]);
+ if( module==null )
+ return;
+ for( int i=0; i < module.length; i++)
+ {
+ if(status == null ||
+ status.length < i ||
+ status[i]==null ||
+ status[i].getSeverity() == IStatus.OK )
+ {
+ setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
+ }
+ else
+ {
+ if ( IStatus.ERROR == status[i].getSeverity() ){
+ setModulePublishState( module, IServer.PUBLISH_STATE_UNKNOWN );
+ throw new CoreException( status[i] );
}
}
}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/EarModuleAssembler.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/EarModuleAssembler.java
index e75cd7c..210768b 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/EarModuleAssembler.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/EarModuleAssembler.java
@@ -21,6 +21,8 @@
import org.eclipse.jst.server.generic.core.internal.CorePlugin;
import org.eclipse.jst.server.generic.core.internal.GenericServer;
import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.model.IModuleResourceDelta;
/**
* Utility for EAR module assembly.
@@ -43,13 +45,25 @@
IStatus status = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, "unable to assemble module null uri",null ); //$NON-NLS-1$
throw new CoreException(status);
}
-
- packModule(module,uri, parent);
+ if( shouldRepack( module ) ){
+ packModule(module,uri, parent);
+ }
}
return parent;
}
-
- protected void packModule(IModule module, String deploymentUnitName, IPath destination) throws CoreException {
+ /**
+ * Checks if there has been a change in the published resources.
+ * @param module
+ * @return module changed
+ */
+ private boolean shouldRepack( IModule module ) {
+ final Server server = (Server) fServer.getServer();
+ final IModule[] modules ={module};
+ IModuleResourceDelta[] deltas = server.getPublishedResourceDelta( modules );
+ return deltas.length > 0;
+ }
+
+ protected void packModule(IModule module, String deploymentUnitName, IPath destination) throws CoreException {
if(module.getModuleType().getId().equals("jst.web")) //$NON-NLS-1$
{
AbstractModuleAssembler assembler= AbstractModuleAssembler.Factory.getModuleAssembler(module, fServer);