[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers ...

Robert Stryker rob.stryker at jboss.com
Mon Mar 19 18:49:34 EDT 2007


  User: rawb    
  Date: 07/03/19 18:49:34

  Modified:    as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers      
                        PackagesPublisher.java IJBossServerPublisher.java
                        NullPublisher.java
  Added:       as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers      
                        PublisherEventLogger.java JstPublisher.java
  Removed:     as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers      
                        JstPackagesPublisher.java
  Log:
  Integration with packages
  Removal of path publisher for individual files
  Changes to event log label providers
  
  Revision  Changes    Path
  1.13      +100 -151  jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PackagesPublisher.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -b -r1.12 -r1.13
  --- PackagesPublisher.java	8 Mar 2007 22:31:51 -0000	1.12
  +++ PackagesPublisher.java	19 Mar 2007 22:49:34 -0000	1.13
  @@ -21,7 +21,8 @@
    */
   package org.jboss.ide.eclipse.as.core.publishers;
   
  -import org.eclipse.core.resources.IResource;
  +import java.util.ArrayList;
  +
   import org.eclipse.core.runtime.CoreException;
   import org.eclipse.core.runtime.IPath;
   import org.eclipse.core.runtime.IProgressMonitor;
  @@ -29,15 +30,16 @@
   import org.eclipse.core.runtime.Path;
   import org.eclipse.wst.server.core.IModule;
   import org.eclipse.wst.server.core.IServer;
  +import org.eclipse.wst.server.core.model.IModuleResourceDelta;
   import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
  +import org.jboss.ide.eclipse.as.core.ServerConverter;
   import org.jboss.ide.eclipse.as.core.model.EventLogModel;
  -import org.jboss.ide.eclipse.as.core.model.PackagesListener;
  -import org.jboss.ide.eclipse.as.core.model.EventLogModel.EventLogRoot;
   import org.jboss.ide.eclipse.as.core.model.EventLogModel.EventLogTreeItem;
   import org.jboss.ide.eclipse.as.core.module.PackageModuleFactory.PackagedModuleDelegate;
  +import org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.PublishEvent;
  +import org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.PublisherFileUtilListener;
   import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
   import org.jboss.ide.eclipse.as.core.util.FileUtil;
  -import org.jboss.ide.eclipse.as.core.util.SimpleTreeItem;
   import org.jboss.ide.eclipse.core.util.ResourceUtil;
   import org.jboss.ide.eclipse.packages.core.model.IPackage;
   
  @@ -47,173 +49,120 @@
    */
   public class PackagesPublisher implements IJBossServerPublisher {
   	
  -	// Event Constants
  -	public static final String REMOVE_TOP_EVENT = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.REMOVE_TOP_EVENT";
  -	public static final String REMOVE_PACKAGE_SUCCESS = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.REMOVE_PACKAGE_SUCCESS";
  -	public static final String REMOVE_PACKAGE_FAIL = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.REMOVE_PACKAGE_FAIL";
  -	public static final String REMOVE_PACKAGE_SKIPPED = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.REMOVE_PACKAGE_SKIPPED";
  -	
  -
  -	public static final String PUBLISH_TOP_EVENT = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.PUBLISH_TOP_EVENT";
  -	public static final String PROJECT_BUILD_EVENT = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.PROJECT_BUILD_EVENT";
  -	public static final String MOVE_PACKAGE_SUCCESS = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.MOVE_PACKAGE_SUCCESS";
  -	public static final String MOVE_PACKAGE_FAIL = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.MOVE_PACKAGE_FAIL";
  -	public static final String MOVE_PACKAGE_SKIP = "org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher.MOVE_PACKAGE_SKIP";
  -	
   	protected IDeployableServer server;
  -	protected EventLogRoot eventRoot;
  +	protected IModuleResourceDelta[] delta;
  +	protected EventLogTreeItem eventRoot;
   	
  -	public PackagesPublisher(IDeployableServer server) {
  +	public PackagesPublisher(IDeployableServer server, EventLogTreeItem eventContext) {
   		this.server = server;
  -		eventRoot = EventLogModel.getModel(server.getServer()).getRoot();
  +		eventRoot = eventContext;
  +	}
  +	public PackagesPublisher(IServer server, EventLogTreeItem eventContext) {
  +		this( ServerConverter.getDeployableServer(server), eventContext);
   	}
  +	public void setDelta(IModuleResourceDelta[] delta) {
  +		this.delta = delta;
  +	}
  +
  +	
   	public int getPublishState() {
   		return IServer.PUBLISH_STATE_NONE;
   	}
   
       public void publishModule(int kind, int deltaKind, int modulePublishState, 
  -    		IModule[] module, IProgressMonitor monitor) throws CoreException {
  -		
  +    		IModule module, IProgressMonitor monitor) throws CoreException {
  +		try {
       	// if it's being removed
       	if( deltaKind == ServerBehaviourDelegate.REMOVED ) {
  -    		removeModule(module, monitor);
  +	    		removeModule(module, kind, deltaKind, monitor);
       		return;
       	}
       	
       	if( deltaKind == ServerBehaviourDelegate.ADDED || deltaKind == ServerBehaviourDelegate.CHANGED) {
  -    		boolean incremental = (kind == IServer.PUBLISH_INCREMENTAL);
  -    		publishModule(incremental, module, monitor);
  +	    		publishModule(module, kind, deltaKind,  modulePublishState, monitor);
       		return;
       	}
  -    	
  -    	if( kind == IServer.PUBLISH_INCREMENTAL ) {
  -    		boolean incremental = false;
  -    		if( modulePublishState == IServer.PUBLISH_STATE_NONE ) incremental = false;
  -    		if( modulePublishState == IServer.PUBLISH_STATE_INCREMENTAL ) incremental = true;
  -    		publishModule(incremental, module, monitor);
  -    		return;
  -    	}
  -    	
  -    	if( kind == IServer.PUBLISH_FULL ) {
  -    		publishModule(false, module, monitor);
  -    		return;
  +		}catch(Exception e) {
  +			e.printStackTrace();
       	}
   	}
   
  -	protected void removeModule(IModule[] module, IProgressMonitor monitor) {
  -		
  +	protected void removeModule(IModule module, int kind, int deltaKind, IProgressMonitor monitor) {
  +		IPackage pack = getPackage(module);
   		// remove all of the deployed items
  -		PublishEvent event = new PublishEvent(eventRoot, REMOVE_TOP_EVENT, module[0]);
  -		EventLogModel.markChanged(eventRoot);
  -		for( int i = 0; i < module.length; i++ ) {
  -			PackagedModuleDelegate delegate = (PackagedModuleDelegate)module[i].loadAdapter(PackagedModuleDelegate.class, new NullProgressMonitor());
  -			IPackage pack = delegate.getPackage();
  +		PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module, kind, deltaKind);
   			IPath sourcePath = pack.getPackageFilePath();
   			IPath destPath = new Path(server.getDeployDirectory()).append(sourcePath.lastSegment());
  -			boolean success = FileUtil.safeDelete(destPath.toFile());
  -			addRemoveEvent(event, pack, destPath, success ? SUCCESS : FAILURE);
  -		}
  +		// remove the entire file or folder
  +		PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
  +		FileUtil.safeDelete(destPath.toFile(), listener);
   	}
   	
   
   	
  -	protected void publishModule(boolean incremental, IModule[] module, IProgressMonitor monitor) {
  -		PublishEvent event = new PublishEvent(eventRoot, PUBLISH_TOP_EVENT, module[0]);
  -		EventLogModel.markChanged(eventRoot);
  -		for( int i = 0; i < module.length; i++ ) {
  -			PackagedModuleDelegate delegate = (PackagedModuleDelegate)module[i].loadAdapter(PackagedModuleDelegate.class, new NullProgressMonitor());
  -			IPackage pack = delegate.getPackage();
  +	protected void publishModule(IModule module, int kind, int deltaKind, int modulePublishState, IProgressMonitor monitor) {
  +		PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module, kind, deltaKind);
  +		IPackage pack = getPackage(module);
   			IPath sourcePath = ResourceUtil.makeAbsolute(pack.getPackageFilePath(), pack.isDestinationInWorkspace());
  -			IPath destPathRoot = new Path(server.getDeployDirectory()).append(sourcePath.lastSegment());
  +		IPath destPathRoot = new Path(server.getDeployDirectory());
  +		
  +		// if destination is deploy directory... no need to re-copy!
  +		if( destPathRoot.toOSString().equals(pack.getDestinationPath().toOSString())) {
  +			// fire null publish event
  +			return;
  +		}
   
  -			if( incremental ) {
  -				IPath[] removed = PackagesListener.getInstance().getRemovedFiles(pack);
  -				IPath[] updated = PackagesListener.getInstance().getUpdatedFiles(pack);
  +		PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
   				
  -				IPath suffix, destPath;
  +		if( shouldPublishIncremental(module, kind, deltaKind, modulePublishState) ) {
  +			IPath sourcePrefix = sourcePath.removeLastSegments(1);
  +			IPath destPath;
  +			
  +			ArrayList updated2 = new ArrayList();
  +			ArrayList removed2 = new ArrayList();
  +			fillFromDelta(updated2, removed2, delta);
  +			IPath[] updated = (IPath[]) updated2.toArray(new IPath[updated2.size()]);
  +			IPath[] removed = (IPath[]) removed2.toArray(new IPath[removed2.size()]);
   	
  +			// incrementally remove removed files
   				for( int j = 0; j < removed.length; j++ ) {
  -					if( sourcePath.isPrefixOf(updated[j])) {
  -						suffix = updated[j].removeFirstSegments(sourcePath.segmentCount());
  -						destPath = destPathRoot.append(suffix);
  -						FileUtil.completeDelete(destPath.toFile());
  -					}
  +				destPath = destPathRoot.append(removed[j]);
  +				FileUtil.completeDelete(destPath.toFile(), listener);
   				}
   			
  +			// incrementally update updated files
   				for( int j = 0; j < updated.length; j++ ) {
  -					if( sourcePath.isPrefixOf(updated[j])) {
  -						suffix = updated[j].removeFirstSegments(sourcePath.segmentCount());
  -						destPath = destPathRoot.append(suffix);
  -						FileUtil.fileSafeCopy(updated[j].toFile(), destPath.toFile());
  -					}
  +				destPath = destPathRoot.append(updated[j]);
  +				IPath srcp = sourcePrefix.append(updated[j]);
  +				FileUtil.fileSafeCopy(srcp.toFile(), destPath.toFile(), listener);
   				}
  +			
   			} else {
  -				// full publish
  -				FileUtil.fileSafeCopy(sourcePath.toFile(), destPathRoot.toFile());
  +			// full publish, copy whole folder or file
  +			FileUtil.fileSafeCopy(sourcePath.toFile(), destPathRoot.append(sourcePath.lastSegment()).toFile(), listener);
   			}
   		}
  +	protected boolean shouldPublishIncremental(IModule module, int kind, int deltaKind, int modulePublishState) {
  +		if(modulePublishState == IServer.PUBLISH_STATE_FULL || kind == IServer.PUBLISH_FULL) 
  +			return false;
  +		return true;
   	}
  -	protected void addMoveEvent(PublishEvent parent, IPackage pack, boolean inWorkspace, 
  -			IPath sourcePath, IPath destPath, int success, Throwable e) {
  -		String specType = null;
  -		switch( success ) {
  -			case SUCCESS: specType = MOVE_PACKAGE_SUCCESS; break;
  -			case FAILURE: specType = MOVE_PACKAGE_FAIL; break;
  -			case SKIPPED: specType = MOVE_PACKAGE_SKIP; break;
  +	protected void fillFromDelta(ArrayList updated2, ArrayList removed2, IModuleResourceDelta[] delta) {
  +		for( int j = 0; j < delta.length; j++ ) {
  +			switch(delta[j].getKind()) {
  +				case IModuleResourceDelta.ADDED:
  +				case IModuleResourceDelta.CHANGED:
  +					updated2.add(delta[j].getModuleResource().getModuleRelativePath());
  +					break;
  +				case IModuleResourceDelta.REMOVED:
  +					removed2.add(delta[j].getModuleResource().getModuleRelativePath());
  +					break;
   		}
  -		new PackagesPublisherMoveEvent(parent, specType, pack, sourcePath, destPath, e );
  -		EventLogModel.markChanged(parent);
  -	}
  -	
  -	
  -	
  -	protected void addRemoveEvent(PublishEvent parent, IPackage pack, IPath dest, int success ) {
  -		addRemoveEvent(parent, pack, dest, success, null);	
   	}
  -	protected void addRemoveEvent(PublishEvent parent, IPackage pack, IPath dest, int success, Exception e ) {
  -		String specType = null;
  -		switch( success ) {
  -			case SUCCESS: specType = REMOVE_PACKAGE_SUCCESS; break;
  -			case FAILURE: specType = REMOVE_PACKAGE_FAIL; break;
  -			case SKIPPED: specType = REMOVE_PACKAGE_SKIPPED; break;
   		}
  -		PackagesPublisherRemoveEvent event = 
  -			new PackagesPublisherRemoveEvent(parent, specType, pack, dest, e);
  -		EventLogModel.markChanged(parent);
  -	}
  -	
  -	public static class PackagesPublisherRemoveEvent extends EventLogTreeItem {
  -		// property names
  -		public static final String PACKAGE_NAME = "PackagesPublisherRemoveEvent.PACKAGE_NAME";
  -		public static final String DESTINATION = "PackagesPublisherRemoveEvent.DESTINATION";
  -		public static final String EXCEPTION_MESSAGE = "PackagesPublisherRemoveEvent.EXCEPTION_MESSAGE";
  -		
  -		
  -		public PackagesPublisherRemoveEvent(SimpleTreeItem parent, String specificType,
  -				IPackage pack, IPath dest, Exception e ) {
  -			super(parent, PUBLISH_MAJOR_TYPE, specificType);
  -			setProperty(PACKAGE_NAME, pack.getName());
  -			setProperty(DESTINATION, dest.toOSString());
  -			if( e != null )
  -				setProperty(EXCEPTION_MESSAGE, e.getLocalizedMessage());
  -		}
  -	}	
  -	public static class PackagesPublisherMoveEvent extends EventLogTreeItem {
  -		// property names
  -		public static final String PACKAGE_NAME = "PackagesPublisherRemoveEvent.PACKAGE_NAME";
  -		public static final String MOVE_DESTINATION = "PackagesPublisherMoveEvent.MOVE_DESTINATION";
  -		public static final String MOVE_SOURCE = "PackagesPublisherMoveEvent.MOVE_SOURCE";
  -		public static final String EXCEPTION_MESSAGE = "PackagesPublisherRemoveEvent.EXCEPTION_MESSAGE";
   		
  -		
  -		public PackagesPublisherMoveEvent(SimpleTreeItem parent, String specificType,
  -				IPackage pack, IPath source, IPath dest, Throwable e ) {
  -			super(parent, PUBLISH_MAJOR_TYPE, specificType);
  -			setProperty(PACKAGE_NAME, pack.getName());
  -			setProperty(MOVE_SOURCE, source.toOSString());
  -			setProperty(MOVE_DESTINATION, dest.toOSString());
  -			if( e != null )
  -				setProperty(EXCEPTION_MESSAGE, e.getLocalizedMessage());
  -		}
  +	protected IPackage getPackage(IModule module) {
  +		PackagedModuleDelegate delegate = (PackagedModuleDelegate)module.loadAdapter(PackagedModuleDelegate.class, new NullProgressMonitor());
  +		return delegate == null ? null : delegate.getPackage();
   	}	
   }
  
  
  
  1.4       +1 -26     jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/IJBossServerPublisher.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: IJBossServerPublisher.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/IJBossServerPublisher.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- IJBossServerPublisher.java	22 Dec 2006 23:24:42 -0000	1.3
  +++ IJBossServerPublisher.java	19 Mar 2007 22:49:34 -0000	1.4
  @@ -28,33 +28,8 @@
   import org.jboss.ide.eclipse.as.core.util.SimpleTreeItem;
   
   public interface IJBossServerPublisher {
  -	// event constants
  -	public static final String PUBLISH_MAJOR_TYPE = "org.jboss.ide.eclipse.as.core.publishers.MajorType";
  -	public static final String MODULE_NAME = "org.jboss.ide.eclipse.as.core.publishers.ModuleName";
  -	public static final int PUBLISH = 0;
  -	public static final int REMOVE = 1;
  -	public static final int SUCCESS = 0;
  -	public static final int FAILURE = 1;
  -	public static final int SKIPPED = 2;
  -	
  -	
  -	
  -	
   	public void publishModule(int kind, int deltaKind, int modulePublishState,
  -			IModule[] module, IProgressMonitor monitor) 
  +			IModule module, IProgressMonitor monitor) 
   								throws CoreException;
   	public int getPublishState();
  -	
  -	public class PublishEvent extends EventLogTreeItem {
  -		public PublishEvent(SimpleTreeItem parent, String specificType) {
  -			super(parent, PUBLISH_MAJOR_TYPE, specificType);
  -		}
  -		public PublishEvent(SimpleTreeItem parent, String specificType, IModule module) {
  -			super(parent, PUBLISH_MAJOR_TYPE, specificType);
  -			setProperty(MODULE_NAME, module.getName());
  -		}
  -		
  -		
  -	}
  -	
   }
  
  
  
  1.3       +1 -1      jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/NullPublisher.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: NullPublisher.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/NullPublisher.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- NullPublisher.java	30 Nov 2006 16:14:59 -0000	1.2
  +++ NullPublisher.java	19 Mar 2007 22:49:34 -0000	1.3
  @@ -37,7 +37,7 @@
   	}
   
       public void publishModule(int kind, int deltaKind, int modulePublishState, 
  -    		IModule[] module, IProgressMonitor monitor) throws CoreException {
  +    		IModule module, IProgressMonitor monitor) throws CoreException {
   		// delta = [no_change, added, changed, removed] = [0,1,2,3]
   		// kind = [incremental, full, auto, clean] = [1,2,3,4]
       	//ASDebug.p("Publishing with kind,deltakind = "  + kind + "," + deltaKind, this);
  
  
  
  1.1      date: 2007/03/19 22:49:34;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PublisherEventLogger.java
  
  Index: PublisherEventLogger.java
  ===================================================================
  package org.jboss.ide.eclipse.as.core.publishers;
  
  import java.io.File;
  
  import org.eclipse.wst.server.core.IModule;
  import org.jboss.ide.eclipse.as.core.model.EventLogModel;
  import org.jboss.ide.eclipse.as.core.model.EventLogModel.EventLogTreeItem;
  import org.jboss.ide.eclipse.as.core.util.SimpleTreeItem;
  import org.jboss.ide.eclipse.as.core.util.FileUtil.IFileUtilListener;
  
  public class PublisherEventLogger {
  	public static final String PUBLISH_MAJOR_TYPE = "org.jboss.ide.eclipse.as.core.publishers.Events.MajorType";
  	public static final String MODULE_NAME = "org.jboss.ide.eclipse.as.core.publishers.Events.Properties.ModuleName";
  
  	public static class PublishEvent extends EventLogTreeItem {
  		public PublishEvent(SimpleTreeItem parent, String specificType) {
  			super(parent, PUBLISH_MAJOR_TYPE, specificType);
  		}
  		public PublishEvent(SimpleTreeItem parent, String specificType, IModule module) {
  			super(parent, PUBLISH_MAJOR_TYPE, specificType);
  			setProperty(MODULE_NAME, module.getName());
  		}
  	}
  
  	// type
  	public static final String MULTIPLE_MODULE_TOP_EVENT = "org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.MULTIPLE_MODULE_TOP_EVENT";
  	
  	// properties
  	public static final String MULTIPLE_MODULE_MODULE_COUNT = "org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.MULTIPLE_MODULE_MODULE_COUNT";
  
  	public static PublishEvent createMultipleModuleTopLevelEvent(EventLogTreeItem parent, int numMods) {
  		PublishEvent event = new PublishEvent(parent, MULTIPLE_MODULE_TOP_EVENT );
  		event.setProperty(MULTIPLE_MODULE_MODULE_COUNT, new Integer(numMods));
  		EventLogModel.markChanged(parent);
  		return event;
  	}
  	
  	// type
  	public static final String SINGLE_MODULE_TOP_EVENT = "org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.SINGLE_MODULE_TOP_EVENT";
  	// properties
  	public static final String MODULE_KIND = "org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.MODULE_KIND"; 
  	public static final String DELTA_KIND = "org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.DELTA_KIND"; 
  	public static PublishEvent createSingleModuleTopEvent(EventLogTreeItem parent, IModule module, int kind, int deltaKind) {
  		PublishEvent event = new PublishEvent(parent, SINGLE_MODULE_TOP_EVENT);
  		event.setProperty(MODULE_KIND, new Integer(kind));
  		event.setProperty(DELTA_KIND, new Integer(deltaKind));
  		event.setProperty(MODULE_NAME, module.getName());
  		EventLogModel.markChanged(parent);
  		return event;
  	}
  	
  	public static PublishEvent createRemoveResultsEvent() {
  		return null;
  	}
  	
  	public static class PublisherFileUtilListener implements IFileUtilListener {
  		EventLogTreeItem log;
  		public PublisherFileUtilListener(EventLogTreeItem log) {
  			this.log = log;
  		}
  		public void fileCoppied(File source, File dest, boolean result, Exception e) {
  			new CoppiedEvent(log, source, dest, result, e);
  			EventLogModel.markChanged(log);
  		}
  		public void fileDeleted(File file, boolean result, Exception e) {
  			new DeletedEvent(log, file, result, e);
  			EventLogModel.markChanged(log);
  		}
  		public void folderDeleted(File file, boolean result, Exception e) {
  			new DeletedEvent(log, file, result, e);
  			EventLogModel.markChanged(log);
  		}
  	}
  	// event types
  	public static final String FILE_EVENT_MAJOR_TYPE = "org.jboss.ide.eclipse.as.core.publishers.Events.FILE_EVENT_MAJOR_TYPE";
  	public static final String FOLDER_DELETED_EVENT = "org.jboss.ide.eclipse.as.core.publishers.Events.FOLDER_DELETED_EVENT";
  	public static final String FILE_DELETED_EVENT = "org.jboss.ide.eclipse.as.core.publishers.Events.FILE_DELETED_EVENT";
  	public static final String FILE_COPPIED_EVENT = "org.jboss.ide.eclipse.as.core.publishers.Events.FILE_COPPIED_EVENT";
  	// properties
  	public static final String SUCCESS_PROPERTY = "org.jboss.ide.eclipse.as.core.publishers.Events.Properties.SUCCESS_PROPERTY";
  	public static final String SOURCE_PROPERTY = "org.jboss.ide.eclipse.as.core.publishers.Events.Properties.SOURCE_PROPERTY";
  	public static final String DEST_PROPERTY = "org.jboss.ide.eclipse.as.core.publishers.Events.Properties.DEST_PROPERTY";
  	public static final String EXCEPTION_MESSAGE = "org.jboss.ide.eclipse.as.core.publishers.Events.Properties.EXCEPTION_PROPERTY";
  	public static class DeletedEvent extends EventLogTreeItem {
  		public DeletedEvent(EventLogTreeItem parent, File file, boolean result, Exception e) {
  			super(parent, FILE_EVENT_MAJOR_TYPE, file.isDirectory() ? FOLDER_DELETED_EVENT : FILE_DELETED_EVENT);
  			setProperty(SUCCESS_PROPERTY, new Boolean(result));
  			setProperty(DEST_PROPERTY, file.getAbsolutePath());
  			if( e != null ) 
  				setProperty(EXCEPTION_MESSAGE, e.getMessage());
  		}
  		
  	}
  	public static class CoppiedEvent extends EventLogTreeItem {
  		public CoppiedEvent(EventLogTreeItem parent, File source, File destination, boolean result, Exception e) {
  			super(parent, FILE_EVENT_MAJOR_TYPE, FILE_COPPIED_EVENT);
  			setProperty(SOURCE_PROPERTY, source.getAbsolutePath());
  			setProperty(DEST_PROPERTY, destination.getAbsolutePath());
  			setProperty(SUCCESS_PROPERTY, new Boolean(result));
  			if( e != null ) 
  				setProperty(EXCEPTION_MESSAGE, e.getMessage());
  		}
  	}
  	
  }
  
  
  
  1.4       +69 -342   jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: JstPublisher.java
  ===================================================================
  RCS file: JstPublisher.java
  diff -N JstPublisher.java
  --- /dev/null	1 Jan 1970 00:00:00 -0000
  +++ JstPublisher.java	19 Mar 2007 22:49:34 -0000	1.4
  @@ -0,0 +1,115 @@
  +/**
  + * JBoss, a Division of Red Hat
  + * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
  + * by the @authors tag. See the copyright.txt in the distribution for a
  + * full listing of individual contributors.
  + *
  +* This is free software; you can redistribute it and/or modify it
  + * under the terms of the GNU Lesser General Public License as
  + * published by the Free Software Foundation; either version 2.1 of
  + * the License, or (at your option) any later version.
  + *
  + * This software is distributed in the hope that it will be useful,
  + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  + * Lesser General Public License for more details.
  + *
  + * You should have received a copy of the GNU Lesser General Public
  + * License along with this software; if not, write to the Free
  + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  + */
  +package org.jboss.ide.eclipse.as.core.publishers;
  +
  +import org.eclipse.core.runtime.CoreException;
  +import org.eclipse.core.runtime.IPath;
  +import org.eclipse.core.runtime.IProgressMonitor;
  +import org.eclipse.core.runtime.IStatus;
  +import org.eclipse.core.runtime.NullProgressMonitor;
  +import org.eclipse.core.runtime.Path;
  +import org.eclipse.core.runtime.Status;
  +import org.eclipse.wst.server.core.IModule;
  +import org.eclipse.wst.server.core.IServer;
  +import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
  +import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
  +import org.jboss.ide.eclipse.as.core.model.EventLogModel;
  +import org.jboss.ide.eclipse.as.core.model.EventLogModel.EventLogTreeItem;
  +import org.jboss.ide.eclipse.as.core.packages.ModulePackageTypeConverter;
  +import org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.PublishEvent;
  +import org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger.PublisherFileUtilListener;
  +import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
  +import org.jboss.ide.eclipse.as.core.util.FileUtil;
  +import org.jboss.ide.eclipse.packages.core.model.IPackage;
  +import org.jboss.ide.eclipse.packages.core.model.PackagesCore;
  +import org.jboss.ide.eclipse.packages.core.model.types.IPackageType;
  +
  +/**
  + *  This class provides a default implementation for 
  + *  packaging different types of flexible projects. It uses 
  + *  the built-in heirarchy of the projects to do so. 
  + *  
  + * @author rob.stryker at jboss.com
  + */
  +public class JstPublisher extends PackagesPublisher {
  +	
  +	public static final int BUILD_FAILED_CODE = 100;
  +	public static final int PACKAGE_UNDETERMINED_CODE = 101;
  +	
  +	public JstPublisher(IServer server, EventLogTreeItem context) {
  +		super(server, context);
  +	}
  +
  +	public void publishModule(int kind, int deltaKind, int modulePublishState,
  +			IModule module, IProgressMonitor monitor) throws CoreException {
  +		IStatus status;
  +		if(ServerBehaviourDelegate.REMOVED == deltaKind){
  +        	status = unpublish(server, module, kind, deltaKind, modulePublishState, monitor);
  +        } else if( ServerBehaviourDelegate.NO_CHANGE != deltaKind || kind == IServer.PUBLISH_FULL || kind == IServer.PUBLISH_CLEAN ){
  +        	// if there's no change, do nothing. Otherwise, on change or add, re-publish
  +        	status = publish(server, module, kind, deltaKind, modulePublishState, monitor);
  +        } else if( ServerBehaviourDelegate.NO_CHANGE != deltaKind && kind == IServer.PUBLISH_INCREMENTAL ){
  +        	status = publish(server, module, kind, deltaKind, modulePublishState, monitor);
  +        }
  +	}
  +
  +	protected IStatus publish(IDeployableServer jbServer, IModule module, int kind, 
  +						int deltaKind, int modulePublishState, IProgressMonitor monitor) throws CoreException {
  +		PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module, kind, deltaKind);
  +		EventLogModel.markChanged(eventRoot);
  +		IPackage topLevel = createTopPackage(module, jbServer.getDeployDirectory(), monitor);
  +		if( topLevel != null ) {
  +			Throwable t = null;
  +			try {
  +				PackagesCore.buildPackage(topLevel, new NullProgressMonitor());
  +			} catch( Exception e ) {
  +				return new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, BUILD_FAILED_CODE, "", e);
  +			}
  +		} else {
  +			return new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, PACKAGE_UNDETERMINED_CODE, "", null);
  +		}
  +		return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID, IStatus.OK, "", null);
  +	}
  +
  +	protected IStatus unpublish(IDeployableServer jbServer, IModule module, 
  +						int kind, int deltaKind, int modulePublishKind, IProgressMonitor monitor) throws CoreException {
  +		PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module, kind, deltaKind);
  +		IPackage topLevel = createTopPackage(module, jbServer.getDeployDirectory(), monitor);
  +		if( topLevel != null ) {
  +			IPath path = topLevel.getPackageFilePath();
  +			FileUtil.safeDelete(path.toFile(), new PublisherFileUtilListener(event));
  +		} else {
  +			return new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, PACKAGE_UNDETERMINED_CODE, "", null);
  +		}
  +		return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID, IStatus.OK, "", null);
  +	}
  +
  +	protected IPackage createTopPackage(IModule module, String deployDir, IProgressMonitor monitor) {
  +		IPackageType type = ModulePackageTypeConverter.getPackageTypeFor(module);
  +		if( type != null ) {
  +    		IPackage topLevel = type.createDefaultConfiguration(module.getProject(), monitor);
  +    		topLevel.setDestinationPath(new Path(deployDir));
  +    		return topLevel;
  +		} 
  +		return null;
  +	}
  +}
  
  
  



More information about the jboss-cvs-commits mailing list