[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model ...
Marshall Culpepper
mculpepper at jboss.com
Wed Mar 7 17:29:59 EST 2007
User: mculpepper
Date: 07/03/07 17:29:59
Added: as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model
PackagesListener.java
Log:
PackagesBuildListener refactored to PackagesListener. when a package changes from exploded to compressed or vice-versa make sure to delete the old file/folder from the deploy dir first
Revision Changes Path
1.1 date: 2007/03/07 22:29:59; author: mculpepper; state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/model/PackagesListener.java
Index: PackagesListener.java
===================================================================
/**
* 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.model;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
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.ServerCore;
import org.eclipse.wst.server.core.internal.ModuleFactory;
import org.eclipse.wst.server.core.internal.ServerPlugin;
import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
import org.jboss.ide.eclipse.as.core.module.PackageModuleFactory;
import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
import org.jboss.ide.eclipse.as.core.server.stripped.DeployableServerBehavior;
import org.jboss.ide.eclipse.as.core.util.FileUtil;
import org.jboss.ide.eclipse.packages.core.model.AbstractPackagesBuildListener;
import org.jboss.ide.eclipse.packages.core.model.IPackage;
import org.jboss.ide.eclipse.packages.core.model.IPackageFileSet;
import org.jboss.ide.eclipse.packages.core.model.IPackageNode;
import org.jboss.ide.eclipse.packages.core.model.IPackagesModelListener;
import org.jboss.ide.eclipse.packages.core.model.PackagesCore;
import org.jboss.ide.eclipse.packages.core.project.build.TruezipUtil;
import org.jboss.ide.eclipse.core.util.ResourceUtil;
import de.schlichtherle.io.ArchiveDetector;
import de.schlichtherle.io.File;
/**
*
* @author rob.stryker at jboss.com
* This class is teh suck. I dont even know whether to keep it
*/
public class PackagesListener extends AbstractPackagesBuildListener implements IPackagesModelListener {
public static PackagesListener instance;
public static final String DEPLOY_SERVERS = "org.jboss.ide.eclipse.as.core.model.PackagesBuildListener.DeployServers";
public static final String AUTO_DEPLOY = "org.jboss.ide.eclipse.as.core.model.PackagesBuildListener.AutoDeploy";
public static PackagesListener getInstance() {
if( instance == null ) {
instance = new PackagesListener();
}
return instance;
}
//Keeping track of build changes
private HashMap changesOrAdditions = new HashMap();
private HashMap removals = new HashMap();
public PackagesListener() {
PackagesCore.addPackagesBuildListener(this);
}
public void startedBuildingPackage(IPackage pkg) {
if( pkg.isTopLevel() ) {
changesOrAdditions.put(pkg, new ArrayList());
removals.put(pkg, new ArrayList());
}
}
public void fileRemoved(IPackage topLevelPackage, IPackageFileSet fileset, IPath filePath) {
// make absolute
IPath filePath2 = makeAbsolute(filePath, topLevelPackage); // change
ArrayList removes = (ArrayList)removals.get(topLevelPackage);
if( !removes.contains(filePath2)) removes.add(filePath2);
}
public void fileUpdated(IPackage topLevelPackage, IPackageFileSet fileset, IPath filePath) {
// make absolute
IPath filePath2 = makeAbsolute(filePath, topLevelPackage); // change
ArrayList changes = (ArrayList)changesOrAdditions.get(topLevelPackage);
if( !changes.contains(filePath2)) changes.add(filePath2);
}
public IPath makeAbsolute(IPath local, IPackage topLevelPackage) {
IPath file = PackagesCore.getBaseFile(local);
return ResourceUtil.makeAbsolute(file, topLevelPackage.isDestinationInWorkspace());
}
public void finishedBuildingPackage(IPackage pkg) {
if( pkg.isTopLevel() && new Boolean(pkg.getProperty(AUTO_DEPLOY)).booleanValue()) {
publish(pkg);
// then clean up what's been changed
changesOrAdditions.remove(pkg);
removals.remove(pkg);
}
}
// If we're supposed to auto-deploy, get on it
protected static void publish(IPackage pkg) {
String servers = pkg.getProperty(PackagesListener.DEPLOY_SERVERS);
publish(pkg, servers);
}
public static void publish(IPackage pkg, String servers) {
IModule[] module = getModule(pkg);
if( module[0] == null ) return;
DeployableServerBehavior[] serverBehaviors = PackagesListener.getServers(servers);
if( serverBehaviors != null ) {
for( int i = 0; i < serverBehaviors.length; i++ ) {
serverBehaviors[i].publishOneModule(IServer.PUBLISH_INCREMENTAL, module, ServerBehaviourDelegate.CHANGED, new NullProgressMonitor());
}
}
}
protected static IModule[] getModule(IPackage node) {
ModuleFactory factory = ServerPlugin.findModuleFactory("org.jboss.ide.eclipse.as.core.PackageModuleFactory");
return new IModule[] { factory.getModule(PackageModuleFactory.getID(node)) };
}
protected IDeployableServer getDeployableServerFromBehavior(DeployableServerBehavior dsb) {
IServer server = dsb.getServer();
IDeployableServer ids = (IDeployableServer)server.loadAdapter(IDeployableServer.class, new NullProgressMonitor());
return ids;
}
public static DeployableServerBehavior[] getServers(String servers) {
if( servers == null || "".equals(servers))
return null;
ArrayList list = new ArrayList();
String[] byId = servers.split(",");
for( int i = 0; i < byId.length; i++ ) {
IServer server = ServerCore.findServer(byId[i]);
if( server != null ) {
Object o = server.loadAdapter(DeployableServerBehavior.class, new NullProgressMonitor());
if( o != null ) {
list.add((DeployableServerBehavior)o);
}
}
}
return (DeployableServerBehavior[]) list.toArray(new DeployableServerBehavior[list.size()]);
}
// should be called from the publisher to figure out what's changed
public IPath[] getUpdatedFiles(IPackage pkg) {
ArrayList list = (ArrayList)changesOrAdditions.get(pkg);
return list == null ? new IPath[0] : (IPath[]) list.toArray(new IPath[list.size()]);
}
public IPath[] getRemovedFiles(IPackage pkg) {
ArrayList list = (ArrayList)removals.get(pkg);
return list == null ? new IPath[0] : (IPath[]) list.toArray(new IPath[list.size()]);
}
/*
* If a node is changing from exploded to imploded, or vice versa
* make sure to delete the pre-existing file or folder on the server.
*/
public void packageNodeChanged(IPackageNode changed) {
if (changed.getNodeType() == IPackageNode.TYPE_PACKAGE
|| changed.getNodeType() == IPackageNode.TYPE_PACKAGE_REFERENCE)
{
IPackage pkg = (IPackage) changed;
File packageFile = TruezipUtil.getPackageFile(pkg);
if ( (packageFile.getDelegate().isFile() && pkg.isExploded())
|| (packageFile.getDelegate().isDirectory() && !pkg.isExploded())) {
String servers = pkg.getProperty(PackagesListener.DEPLOY_SERVERS);
DeployableServerBehavior[] serverBehaviors = PackagesListener.getServers(servers);
if( serverBehaviors != null ) {
IPath sourcePath, destPath;
IDeployableServer depServer;
for( int i = 0; i < serverBehaviors.length; i++ ) {
sourcePath = pkg.getPackageFilePath();
depServer = getDeployableServerFromBehavior(serverBehaviors[i]);
destPath = new Path(depServer.getDeployDirectory()).append(sourcePath.lastSegment());
boolean success = FileUtil.safeDelete(destPath.toFile());
}
}
}
}
}
public void packageNodeAdded(IPackageNode added) { }
public void packageNodeAttached(IPackageNode attached) { }
public void packageNodeRemoved(IPackageNode removed) { }
public void projectRegistered(IProject project) { }
}
More information about the jboss-cvs-commits
mailing list