Author: rob.stryker(a)jboss.com
Date: 2007-09-11 01:20:35 -0400 (Tue, 11 Sep 2007)
New Revision: 3533
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/SingleDeployableFactory.java
Removed:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/singledeployable/
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/IJBossServerPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/NullPublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/SingleFilePublisher.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/DeployableServerBehavior.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml
Log:
Moved SingleDeployableFactory into a package with other module-related objects.
Renamed that package from as.core.packages to as.core.modules
Moving to a cleaner API which can be opened up logically and more easily extended.
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF 2007-09-11
05:16:49 UTC (rev 3532)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/META-INF/MANIFEST.MF 2007-09-11
05:20:35 UTC (rev 3533)
@@ -24,16 +24,15 @@
Export-Package: org.jboss.ide.eclipse.as.core,
org.jboss.ide.eclipse.as.core.extensions.descriptors,
org.jboss.ide.eclipse.as.core.extensions.events,
+ org.jboss.ide.eclipse.as.core.modules,
org.jboss.ide.eclipse.as.core.packages,
org.jboss.ide.eclipse.as.core.packages.types,
- org.jboss.ide.eclipse.as.core.publishers,
org.jboss.ide.eclipse.as.core.runtime,
org.jboss.ide.eclipse.as.core.runtime.server.polling,
org.jboss.ide.eclipse.as.core.server,
org.jboss.ide.eclipse.as.core.server.attributes,
org.jboss.ide.eclipse.as.core.server.internal.launch,
org.jboss.ide.eclipse.as.core.server.xpl,
- org.jboss.ide.eclipse.as.core.singledeployable,
org.jboss.ide.eclipse.as.core.util
Bundle-ClassPath: dom4j-1.6.1.jar,
jaxen-1.1-beta-6.jar,
Copied:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules
(from rev 3530,
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers)
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/IJBossServerPublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/IJBossServerPublisher.java 2007-09-11
05:09:17 UTC (rev 3530)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/IJBossServerPublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -19,7 +19,7 @@
* 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;
+package org.jboss.ide.eclipse.as.core.modules;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
Deleted:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java 2007-09-11
05:09:17 UTC (rev 3530)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -1,303 +0,0 @@
-/**
- * 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 java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.eclipse.core.resources.IFile;
-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.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.core.IEnterpriseApplication;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.internal.DeletedModule;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.model.IModuleFolder;
-import org.eclipse.wst.server.core.model.IModuleResource;
-import org.eclipse.wst.server.core.model.IModuleResourceDelta;
-import org.eclipse.wst.server.core.model.ModuleDelegate;
-import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
-import org.eclipse.wst.server.core.util.ProjectModule;
-import org.eclipse.wst.server.core.util.PublishUtil;
-import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
-import org.jboss.ide.eclipse.as.core.model.EventLogModel.EventLogTreeItem;
-import org.jboss.ide.eclipse.as.core.server.NestedPublishInfo;
-import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
-import org.jboss.ide.eclipse.as.core.server.xpl.ModulePackager;
-import org.jboss.ide.eclipse.as.core.util.FileUtil;
-
-/**
- * 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(a)jboss.com
- */
-public class JstPublisher extends PackagesPublisher {
-
- public static final int BUILD_FAILED_CODE = 100;
- public static final int PACKAGE_UNDETERMINED_CODE = 101;
-
- protected IModuleResourceDelta[] delta;
-
- public JstPublisher(IServer server, EventLogTreeItem context) {
- super(server, context);
- }
-
- public void setDelta(IModuleResourceDelta[] delta) {
- this.delta = delta;
- }
-
- public IStatus publishModule(int kind, int deltaKind,
- int modulePublishState, IModule module, IProgressMonitor monitor)
- throws CoreException {
- IStatus status = null;
-
- IPath root = new Path(server.getDeployDirectory());
- if (ServerBehaviourDelegate.REMOVED == deltaKind) {
- status = unpublish(server, module, monitor);
- } else if (kind == IServer.PUBLISH_FULL || kind == IServer.PUBLISH_CLEAN) {
- status = fullPublishPackIntoFolder(module, root, monitor);
- } else if (kind == IServer.PUBLISH_INCREMENTAL) {
- status = incrementalPublish(new ArrayList(), root, module, monitor);
- }
- return status;
- }
-
- protected void fullWebPublish(IModule module, IPath root, IProgressMonitor monitor )
throws CoreException {
- ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class, monitor);
- IModuleResource[] members = md.members();
- IWebModule webmodule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
- IPath moduleDeployPath = root.append(webmodule.getContextRoot() + ".war");
- FileUtil.safeDelete(moduleDeployPath.toFile());
- PublishUtil.publishSmart(members, moduleDeployPath, monitor);
- IWebModule webModule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
- IModule[] childModules = webModule.getModules();
- for (int i = 0; i < childModules.length; i++) {
- IModule module2 = childModules[i];
- packModuleIntoJar(module, webModule.getURI(module2), moduleDeployPath);
- }
- }
- protected void fullEarPublish(IModule module, IPath root, IProgressMonitor monitor)
throws CoreException {
- if( module instanceof DeletedModule ) {
- // TODO FIX ME
- return;
- }
-
-
- ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class, monitor);
- IModuleResource[] members = md.members();
- IEnterpriseApplication earModule =
(IEnterpriseApplication)module.loadAdapter(IEnterpriseApplication.class, monitor);
- IPath moduleDeployPath = root.append(module.getProject().getName() +
".ear");
- FileUtil.safeDelete(moduleDeployPath.toFile());
- PublishUtil.publishFull(members, moduleDeployPath, monitor);
- IModule[] childModules = earModule.getModules();
- for (int i = 0; i < childModules.length; i++) {
- IModule module2 = childModules[i];
- String uri = earModule.getURI(module2);
- if(uri==null){
- IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
0, "unable to assemble module null uri",null ); //$NON-NLS-1$
- throw new CoreException(status);
- }
- if( module2.getModuleType().getId().equals("jst.utility")) {
- packModuleIntoJar(module2, uri, moduleDeployPath);
- } else {
- fullPublishPackIntoFolder(module2, moduleDeployPath, monitor);
- }
- }
- }
-
- protected IStatus fullPublishPackIntoFolder(IModule module, IPath root, IProgressMonitor
monitor) throws CoreException {
- if( module.getModuleType().getId().equals("jst.web")) {
- fullWebPublish(module, root, monitor);
- } else if( module.getModuleType().getId().equals("jst.ear")) {
- fullEarPublish(module, root, monitor);
- } else {
- ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class,
monitor);
- IModuleResource[] members = md.members();
- IPath moduleDeployPath = root.append(module.getProject().getName() +
".jar");
- FileUtil.safeDelete(moduleDeployPath.toFile());
- PublishUtil.publishSmart(members, moduleDeployPath, monitor);
- }
- return null;
- }
-
- private boolean hasDelta( IModule module, ArrayList moduleTree ) {
- return getDelta(module, moduleTree).length > 0;
- }
-
- public IModuleResourceDelta[] getDelta(IModule module, ArrayList moduleTree) {
- IModuleResourceDelta[] deltas;
- if( moduleTree.size() == 0 ) {
- final IModule[] modules ={module};
- deltas = ((Server)server.getServer()).getPublishedResourceDelta( modules );
- } else {
- deltas =
NestedPublishInfo.getDefault().getServerPublishInfo(server.getServer()).getDelta(moduleTree,
module);
- }
- return deltas;
- }
-
-
- protected void packModuleIntoJar(IModule module, String deploymentUnitName, IPath
destination)throws CoreException {
- String dest = destination.append(deploymentUnitName).toString();
- ModulePackager packager = null;
- try {
- packager = new ModulePackager(dest, false);
- ProjectModule pm = (ProjectModule) module.loadAdapter(ProjectModule.class, null);
- IModuleResource[] resources = pm.members();
- for (int i = 0; i < resources.length; i++) {
- doPackModule(resources[i], packager);
- }
- } catch (IOException e) {
- IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, 0,
- "unable to assemble module", e); //$NON-NLS-1$
- throw new CoreException(status);
- }
- finally{
- try{
- packager.finished();
- }
- catch(IOException e){
- //unhandled
- }
- }
- }
-
-
- /* Add one file or folder to a jar */
- private void doPackModule(IModuleResource resource, ModulePackager packager) throws
CoreException, IOException{
- if (resource instanceof IModuleFolder) {
- IModuleFolder mFolder = (IModuleFolder)resource;
- IModuleResource[] resources = mFolder.members();
-
- packager.writeFolder(resource.getModuleRelativePath().append(resource.getName()).toPortableString());
-
- for (int i = 0; resources!= null && i < resources.length; i++) {
- doPackModule(resources[i], packager);
- }
- } else {
- String destination =
resource.getModuleRelativePath().append(resource.getName()).toPortableString();
- IFile file = (IFile) resource.getAdapter(IFile.class);
- if (file != null)
- packager.write(file, destination);
- else {
- File file2 = (File) resource.getAdapter(File.class);
- packager.write(file2, destination);
- }
- }
- }
-
-
- protected IStatus incrementalPublish(ArrayList moduleTree, IPath root, IModule module,
IProgressMonitor monitor) throws CoreException {
- if( module.getModuleType().getId().equals("jst.web")) {
- incrementalWarPublish(moduleTree, module, root, monitor);
- } else if( module.getModuleType().getId().equals("jst.ear")) {
- incrementalEarPublish(moduleTree, module, root, monitor);
- } else {
- // cannot incrementally publish something unknown
- // just package it
- packModuleIntoJar(module, module.getName() + ".jar", root);
- }
- return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID,
- IStatus.OK, "", null);
- }
-
- protected void incrementalWarPublish(ArrayList moduleTree, IModule module, IPath root,
IProgressMonitor monitor) throws CoreException {
- ArrayList newTree = new ArrayList();
- newTree.addAll(moduleTree); newTree.add(module);
-
- IModule[] modules = new IModule[] {module};
- IModuleResourceDelta[] deltas = getDelta(module, moduleTree);
- //((Server)server.getServer()).getPublishedResourceDelta( modules );
- ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class, monitor);
- IModuleResource[] members = md.members();
- IWebModule webmodule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
- IPath moduleDeployPath = root.append(webmodule.getContextRoot() + ".war");
- PublishUtil.publishDelta(deltas, moduleDeployPath, monitor);
- IWebModule webModule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
- IModule[] childModules = webModule.getModules();
- for (int i = 0; i < childModules.length; i++) {
- IModule module2 = childModules[i];
- // if a lib .jar needs to be repacked, repack the whole thing
- if( hasDelta(module2, newTree))
- packModuleIntoJar(module, webModule.getURI(module2), moduleDeployPath);
- }
- if( moduleTree.size() > 0 ) {
- // published it
- NestedPublishInfo.getDefault().getServerPublishInfo(server.getServer()).getPublishInfo(moduleTree,
module).setResources(md.members());
- }
- }
-
- protected void incrementalEarPublish(ArrayList moduleTree, IModule module, IPath root,
IProgressMonitor monitor) throws CoreException {
- ArrayList newTree = new ArrayList();
- newTree.addAll(moduleTree);
- newTree.add(module);
-
- IModuleResourceDelta[] deltas = getDelta(module, moduleTree);
- //((Server)server.getServer()).getPublishedResourceDelta( modules );
- IEnterpriseApplication earModule =
(IEnterpriseApplication)module.loadAdapter(IEnterpriseApplication.class, monitor);
- IPath moduleDeployPath = root.append(module.getProject().getName() +
".ear");
- PublishUtil.publishDelta(deltas, moduleDeployPath, monitor);
- IModule[] childModules = earModule.getModules();
- for (int i = 0; i < childModules.length; i++) {
- IModule childModule = childModules[i];
- String uri = earModule.getURI(childModule);
- if(uri==null){
- IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
0, "unable to assemble module null uri",null ); //$NON-NLS-1$
- throw new CoreException(status);
- }
-
- incrementalPublish(newTree, root, childModule, monitor);
- }
-
- }
-
- protected IStatus unpublish(IDeployableServer jbServer, IModule module,
- IProgressMonitor monitor) throws CoreException {
-
- IPath root = new Path(jbServer.getDeployDirectory());
- if( module.getModuleType().getId().equals("jst.web")) {
- // copy the module first
- ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class,
monitor);
- IModuleResource[] members = md.members();
- IWebModule webmodule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
- IPath moduleDeployPath = root.append(webmodule.getContextRoot() + ".war");
- FileUtil.completeDelete(moduleDeployPath.toFile());
- } else if( module.getModuleType().getId().equals("jst.ear")) {
- ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class,
monitor);
- IModuleResource[] members = md.members();
- IEnterpriseApplication earModule =
(IEnterpriseApplication)module.loadAdapter(IEnterpriseApplication.class, monitor);
- IPath moduleDeployPath = root.append(module.getProject().getName() +
".ear");
- FileUtil.completeDelete(moduleDeployPath.toFile());
- }
-
- return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID,
- IStatus.OK, "", null);
- }
-
-}
Copied:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java
(from rev 3531,
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/JstPublisher.java)
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/JstPublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -0,0 +1,303 @@
+/**
+ * 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.modules;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.IFile;
+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.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.server.core.IEnterpriseApplication;
+import org.eclipse.jst.server.core.IWebModule;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.internal.DeletedModule;
+import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.model.IModuleFolder;
+import org.eclipse.wst.server.core.model.IModuleResource;
+import org.eclipse.wst.server.core.model.IModuleResourceDelta;
+import org.eclipse.wst.server.core.model.ModuleDelegate;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+import org.eclipse.wst.server.core.util.ProjectModule;
+import org.eclipse.wst.server.core.util.PublishUtil;
+import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.EventLogTreeItem;
+import org.jboss.ide.eclipse.as.core.server.NestedPublishInfo;
+import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
+import org.jboss.ide.eclipse.as.core.server.xpl.ModulePackager;
+import org.jboss.ide.eclipse.as.core.util.FileUtil;
+
+/**
+ * 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(a)jboss.com
+ */
+public class JstPublisher extends PackagesPublisher {
+
+ public static final int BUILD_FAILED_CODE = 100;
+ public static final int PACKAGE_UNDETERMINED_CODE = 101;
+
+ protected IModuleResourceDelta[] delta;
+
+ public JstPublisher(IServer server, EventLogTreeItem context) {
+ super(server, context);
+ }
+
+ public void setDelta(IModuleResourceDelta[] delta) {
+ this.delta = delta;
+ }
+
+ public IStatus publishModule(int kind, int deltaKind,
+ int modulePublishState, IModule module, IProgressMonitor monitor)
+ throws CoreException {
+ IStatus status = null;
+
+ IPath root = new Path(server.getDeployDirectory());
+ if (ServerBehaviourDelegate.REMOVED == deltaKind) {
+ status = unpublish(server, module, monitor);
+ } else if (kind == IServer.PUBLISH_FULL || kind == IServer.PUBLISH_CLEAN) {
+ status = fullPublishPackIntoFolder(module, root, monitor);
+ } else if (kind == IServer.PUBLISH_INCREMENTAL) {
+ status = incrementalPublish(new ArrayList(), root, module, monitor);
+ }
+ return status;
+ }
+
+ protected void fullWebPublish(IModule module, IPath root, IProgressMonitor monitor )
throws CoreException {
+ ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class, monitor);
+ IModuleResource[] members = md.members();
+ IWebModule webmodule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
+ IPath moduleDeployPath = root.append(webmodule.getContextRoot() + ".war");
+ FileUtil.safeDelete(moduleDeployPath.toFile());
+ PublishUtil.publishSmart(members, moduleDeployPath, monitor);
+ IWebModule webModule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
+ IModule[] childModules = webModule.getModules();
+ for (int i = 0; i < childModules.length; i++) {
+ IModule module2 = childModules[i];
+ packModuleIntoJar(module, webModule.getURI(module2), moduleDeployPath);
+ }
+ }
+ protected void fullEarPublish(IModule module, IPath root, IProgressMonitor monitor)
throws CoreException {
+ if( module instanceof DeletedModule ) {
+ // TODO FIX ME
+ return;
+ }
+
+
+ ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class, monitor);
+ IModuleResource[] members = md.members();
+ IEnterpriseApplication earModule =
(IEnterpriseApplication)module.loadAdapter(IEnterpriseApplication.class, monitor);
+ IPath moduleDeployPath = root.append(module.getProject().getName() +
".ear");
+ FileUtil.safeDelete(moduleDeployPath.toFile());
+ PublishUtil.publishFull(members, moduleDeployPath, monitor);
+ IModule[] childModules = earModule.getModules();
+ for (int i = 0; i < childModules.length; i++) {
+ IModule module2 = childModules[i];
+ String uri = earModule.getURI(module2);
+ if(uri==null){
+ IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
0, "unable to assemble module null uri",null ); //$NON-NLS-1$
+ throw new CoreException(status);
+ }
+ if( module2.getModuleType().getId().equals("jst.utility")) {
+ packModuleIntoJar(module2, uri, moduleDeployPath);
+ } else {
+ fullPublishPackIntoFolder(module2, moduleDeployPath, monitor);
+ }
+ }
+ }
+
+ protected IStatus fullPublishPackIntoFolder(IModule module, IPath root, IProgressMonitor
monitor) throws CoreException {
+ if( module.getModuleType().getId().equals("jst.web")) {
+ fullWebPublish(module, root, monitor);
+ } else if( module.getModuleType().getId().equals("jst.ear")) {
+ fullEarPublish(module, root, monitor);
+ } else {
+ ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class,
monitor);
+ IModuleResource[] members = md.members();
+ IPath moduleDeployPath = root.append(module.getProject().getName() +
".jar");
+ FileUtil.safeDelete(moduleDeployPath.toFile());
+ PublishUtil.publishSmart(members, moduleDeployPath, monitor);
+ }
+ return null;
+ }
+
+ private boolean hasDelta( IModule module, ArrayList moduleTree ) {
+ return getDelta(module, moduleTree).length > 0;
+ }
+
+ public IModuleResourceDelta[] getDelta(IModule module, ArrayList moduleTree) {
+ IModuleResourceDelta[] deltas;
+ if( moduleTree.size() == 0 ) {
+ final IModule[] modules ={module};
+ deltas = ((Server)server.getServer()).getPublishedResourceDelta( modules );
+ } else {
+ deltas =
NestedPublishInfo.getDefault().getServerPublishInfo(server.getServer()).getDelta(moduleTree,
module);
+ }
+ return deltas;
+ }
+
+
+ protected void packModuleIntoJar(IModule module, String deploymentUnitName, IPath
destination)throws CoreException {
+ String dest = destination.append(deploymentUnitName).toString();
+ ModulePackager packager = null;
+ try {
+ packager = new ModulePackager(dest, false);
+ ProjectModule pm = (ProjectModule) module.loadAdapter(ProjectModule.class, null);
+ IModuleResource[] resources = pm.members();
+ for (int i = 0; i < resources.length; i++) {
+ doPackModule(resources[i], packager);
+ }
+ } catch (IOException e) {
+ IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID, 0,
+ "unable to assemble module", e); //$NON-NLS-1$
+ throw new CoreException(status);
+ }
+ finally{
+ try{
+ packager.finished();
+ }
+ catch(IOException e){
+ //unhandled
+ }
+ }
+ }
+
+
+ /* Add one file or folder to a jar */
+ private void doPackModule(IModuleResource resource, ModulePackager packager) throws
CoreException, IOException{
+ if (resource instanceof IModuleFolder) {
+ IModuleFolder mFolder = (IModuleFolder)resource;
+ IModuleResource[] resources = mFolder.members();
+
+ packager.writeFolder(resource.getModuleRelativePath().append(resource.getName()).toPortableString());
+
+ for (int i = 0; resources!= null && i < resources.length; i++) {
+ doPackModule(resources[i], packager);
+ }
+ } else {
+ String destination =
resource.getModuleRelativePath().append(resource.getName()).toPortableString();
+ IFile file = (IFile) resource.getAdapter(IFile.class);
+ if (file != null)
+ packager.write(file, destination);
+ else {
+ File file2 = (File) resource.getAdapter(File.class);
+ packager.write(file2, destination);
+ }
+ }
+ }
+
+
+ protected IStatus incrementalPublish(ArrayList moduleTree, IPath root, IModule module,
IProgressMonitor monitor) throws CoreException {
+ if( module.getModuleType().getId().equals("jst.web")) {
+ incrementalWarPublish(moduleTree, module, root, monitor);
+ } else if( module.getModuleType().getId().equals("jst.ear")) {
+ incrementalEarPublish(moduleTree, module, root, monitor);
+ } else {
+ // cannot incrementally publish something unknown
+ // just package it
+ packModuleIntoJar(module, module.getName() + ".jar", root);
+ }
+ return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID,
+ IStatus.OK, "", null);
+ }
+
+ protected void incrementalWarPublish(ArrayList moduleTree, IModule module, IPath root,
IProgressMonitor monitor) throws CoreException {
+ ArrayList newTree = new ArrayList();
+ newTree.addAll(moduleTree); newTree.add(module);
+
+ IModule[] modules = new IModule[] {module};
+ IModuleResourceDelta[] deltas = getDelta(module, moduleTree);
+ //((Server)server.getServer()).getPublishedResourceDelta( modules );
+ ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class, monitor);
+ IModuleResource[] members = md.members();
+ IWebModule webmodule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
+ IPath moduleDeployPath = root.append(webmodule.getContextRoot() + ".war");
+ PublishUtil.publishDelta(deltas, moduleDeployPath, monitor);
+ IWebModule webModule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
+ IModule[] childModules = webModule.getModules();
+ for (int i = 0; i < childModules.length; i++) {
+ IModule module2 = childModules[i];
+ // if a lib .jar needs to be repacked, repack the whole thing
+ if( hasDelta(module2, newTree))
+ packModuleIntoJar(module, webModule.getURI(module2), moduleDeployPath);
+ }
+ if( moduleTree.size() > 0 ) {
+ // published it
+ NestedPublishInfo.getDefault().getServerPublishInfo(server.getServer()).getPublishInfo(moduleTree,
module).setResources(md.members());
+ }
+ }
+
+ protected void incrementalEarPublish(ArrayList moduleTree, IModule module, IPath root,
IProgressMonitor monitor) throws CoreException {
+ ArrayList newTree = new ArrayList();
+ newTree.addAll(moduleTree);
+ newTree.add(module);
+
+ IModuleResourceDelta[] deltas = getDelta(module, moduleTree);
+ //((Server)server.getServer()).getPublishedResourceDelta( modules );
+ IEnterpriseApplication earModule =
(IEnterpriseApplication)module.loadAdapter(IEnterpriseApplication.class, monitor);
+ IPath moduleDeployPath = root.append(module.getProject().getName() +
".ear");
+ PublishUtil.publishDelta(deltas, moduleDeployPath, monitor);
+ IModule[] childModules = earModule.getModules();
+ for (int i = 0; i < childModules.length; i++) {
+ IModule childModule = childModules[i];
+ String uri = earModule.getURI(childModule);
+ if(uri==null){
+ IStatus status = new Status(IStatus.ERROR, JBossServerCorePlugin.PLUGIN_ID,
0, "unable to assemble module null uri",null ); //$NON-NLS-1$
+ throw new CoreException(status);
+ }
+
+ incrementalPublish(newTree, root, childModule, monitor);
+ }
+
+ }
+
+ protected IStatus unpublish(IDeployableServer jbServer, IModule module,
+ IProgressMonitor monitor) throws CoreException {
+
+ IPath root = new Path(jbServer.getDeployDirectory());
+ if( module.getModuleType().getId().equals("jst.web")) {
+ // copy the module first
+ ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class,
monitor);
+ IModuleResource[] members = md.members();
+ IWebModule webmodule = (IWebModule)module.loadAdapter(IWebModule.class, monitor);
+ IPath moduleDeployPath = root.append(webmodule.getContextRoot() + ".war");
+ FileUtil.completeDelete(moduleDeployPath.toFile());
+ } else if( module.getModuleType().getId().equals("jst.ear")) {
+ ModuleDelegate md = (ModuleDelegate)module.loadAdapter(ModuleDelegate.class,
monitor);
+ IModuleResource[] members = md.members();
+ IEnterpriseApplication earModule =
(IEnterpriseApplication)module.loadAdapter(IEnterpriseApplication.class, monitor);
+ IPath moduleDeployPath = root.append(module.getProject().getName() +
".ear");
+ FileUtil.completeDelete(moduleDeployPath.toFile());
+ }
+
+ return new Status(IStatus.OK, JBossServerCorePlugin.PLUGIN_ID,
+ IStatus.OK, "", null);
+ }
+
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/NullPublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/NullPublisher.java 2007-09-11
05:09:17 UTC (rev 3530)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/NullPublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -19,7 +19,7 @@
* 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;
+package org.jboss.ide.eclipse.as.core.modules;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
Deleted:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java 2007-09-11
05:09:17 UTC (rev 3530)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -1,212 +0,0 @@
-/**
- * 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 java.util.ArrayList;
-
-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.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.model.IModuleResource;
-import org.eclipse.wst.server.core.model.IModuleResourceDelta;
-import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
-import org.jboss.ide.eclipse.archives.core.model.IArchive;
-import org.jboss.ide.eclipse.as.core.model.EventLogModel.EventLogTreeItem;
-import org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory.ExtendedModuleFile;
-import
org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory.IExtendedModuleResource;
-import
org.jboss.ide.eclipse.as.core.packages.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.ServerConverter;
-
-/**
- *
- * @author rob.stryker(a)jboss.com
- */
-public class PackagesPublisher implements IJBossServerPublisher {
-
- protected IDeployableServer server;
- protected IModuleResourceDelta[] delta;
- protected EventLogTreeItem eventRoot;
-
- public PackagesPublisher(IDeployableServer server, EventLogTreeItem eventContext) {
- this.server = server;
- 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 IStatus publishModule(int kind, int deltaKind, int modulePublishState,
- IModule module, IProgressMonitor monitor) throws CoreException {
- try {
- // if it's being removed
- if( deltaKind == ServerBehaviourDelegate.REMOVED ) {
- removeModule(module, kind, deltaKind, monitor);
- return null;
- }
-
- if( deltaKind == ServerBehaviourDelegate.ADDED || deltaKind ==
ServerBehaviourDelegate.CHANGED) {
- publishModule(module, kind, deltaKind, modulePublishState, monitor);
- return null;
- }
- }catch(Exception e) {
- e.printStackTrace();
- }
- return null;
- }
-
- protected void removeModule(IModule module, int kind, int deltaKind, IProgressMonitor
monitor) {
- IArchive pack = getPackage(module);
- // remove all of the deployed items
- PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module,
kind, deltaKind);
- if( pack != null ) {
- IPath sourcePath = pack.getArchiveFilePath();
- IPath destPath = new
Path(server.getDeployDirectory()).append(sourcePath.lastSegment());
- // remove the entire file or folder
- PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
- FileUtil.safeDelete(destPath.toFile(), listener);
- }
- }
-
-
-
- protected void publishModule(IModule module, int kind, int deltaKind, int
modulePublishState, IProgressMonitor monitor) {
- PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module,
kind, deltaKind);
- IArchive pack = getPackage(module);
- IPath sourcePath = pack.getArchiveFilePath();
- IPath destPathRoot = new Path(server.getDeployDirectory());
-
- // if destination is deploy directory... no need to re-copy!
- if( destPathRoot.toOSString().equals(pack.getGlobalDestinationPath().toOSString())) {
- // fire null publish event
- return;
- }
-
- PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
-
- if( shouldPublishIncremental(module, kind, deltaKind, modulePublishState) ) {
- publishFromDelta(module, destPathRoot, sourcePath.removeLastSegments(1), delta,
listener);
- } else {
- // 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 publishFromDelta(IModule module, IPath destPathRoot, IPath sourcePrefix,
- IModuleResourceDelta[] delta, PublisherFileUtilListener listener) {
- ArrayList changedFiles = new ArrayList();
- for( int i = 0; i < delta.length; i++ ) {
- publishFromDeltaHandle(delta[i], destPathRoot, sourcePrefix, changedFiles, listener);
- }
- }
- protected void publishFromDeltaHandle(IModuleResourceDelta delta, IPath destRoot,
- IPath sourcePrefix, ArrayList changedFiles, PublisherFileUtilListener listener) {
- switch( delta.getKind()) {
- case IModuleResourceDelta.REMOVED:
- // removed might not be IExtendedModuleResource
- IModuleResource imr = delta.getModuleResource();
- if( imr instanceof IExtendedModuleResource) {
- IExtendedModuleResource emr = ((IExtendedModuleResource)imr);
- IPath concrete = emr.getConcreteDestFile();
- if( !changedFiles.contains(concrete)) {
- IPath destPath =
destRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
-
- // file hasnt been updated yet.
- // But we don't know whether to delete or copy this file.
- // depends where it is in the tree and what's exploded.
- changedFiles.add(concrete);
- IPath concreteRelative =
concrete.removeFirstSegments(sourcePrefix.segmentCount()).setDevice(null);
- IPath emrModRelative = emr.getModuleRelativePath();
- boolean delete = concreteRelative.equals(emrModRelative);
-
- if( delete ) {
- FileUtil.safeDelete(destPath.toFile(), listener);
- } else {
- // copy
- FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
- }
- }
- return;
- } else {
- System.out.println("not an extended module resource. need help here");
- return;
- }
- case IModuleResourceDelta.ADDED:
- imr = delta.getModuleResource();
- if( imr instanceof IExtendedModuleResource) {
- IPath concrete = ((IExtendedModuleResource)imr).getConcreteDestFile();
- if( !changedFiles.contains(concrete)) {
- changedFiles.add(concrete);
- IPath destPath =
destRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
- FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
- }
- return;
- } else {
- System.out.println("not an extended module resource. need help here");
- return;
- }
- case IModuleResourceDelta.CHANGED:
- imr = delta.getModuleResource();
- if( imr instanceof ExtendedModuleFile ) {
- IPath concrete = ((ExtendedModuleFile)imr).getConcreteDestFile();
- if( !changedFiles.contains(concrete)) {
- changedFiles.add(concrete);
- IPath destPath =
destRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
- FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
- }
- }
- break;
- }
-
- IModuleResourceDelta[] children = delta.getAffectedChildren();
- if( children != null ) {
- for( int i = 0; i < children.length; i++ ) {
- publishFromDeltaHandle(children[i], destRoot, sourcePrefix, changedFiles, listener);
- }
- }
- }
-
- protected IArchive getPackage(IModule module) {
- PackagedModuleDelegate delegate =
(PackagedModuleDelegate)module.loadAdapter(PackagedModuleDelegate.class, new
NullProgressMonitor());
- return delegate == null ? null : delegate.getPackage();
- }
-}
Copied:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java
(from rev 3531,
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PackagesPublisher.java)
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PackagesPublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -0,0 +1,212 @@
+/**
+ * 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.modules;
+
+import java.util.ArrayList;
+
+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.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.IModuleResource;
+import org.eclipse.wst.server.core.model.IModuleResourceDelta;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+import org.jboss.ide.eclipse.archives.core.model.IArchive;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.EventLogTreeItem;
+import org.jboss.ide.eclipse.as.core.modules.PublisherEventLogger.PublishEvent;
+import
org.jboss.ide.eclipse.as.core.modules.PublisherEventLogger.PublisherFileUtilListener;
+import org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory.ExtendedModuleFile;
+import
org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory.IExtendedModuleResource;
+import
org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory.PackagedModuleDelegate;
+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.ServerConverter;
+
+/**
+ *
+ * @author rob.stryker(a)jboss.com
+ */
+public class PackagesPublisher implements IJBossServerPublisher {
+
+ protected IDeployableServer server;
+ protected IModuleResourceDelta[] delta;
+ protected EventLogTreeItem eventRoot;
+
+ public PackagesPublisher(IDeployableServer server, EventLogTreeItem eventContext) {
+ this.server = server;
+ 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 IStatus publishModule(int kind, int deltaKind, int modulePublishState,
+ IModule module, IProgressMonitor monitor) throws CoreException {
+ try {
+ // if it's being removed
+ if( deltaKind == ServerBehaviourDelegate.REMOVED ) {
+ removeModule(module, kind, deltaKind, monitor);
+ return null;
+ }
+
+ if( deltaKind == ServerBehaviourDelegate.ADDED || deltaKind ==
ServerBehaviourDelegate.CHANGED) {
+ publishModule(module, kind, deltaKind, modulePublishState, monitor);
+ return null;
+ }
+ }catch(Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ protected void removeModule(IModule module, int kind, int deltaKind, IProgressMonitor
monitor) {
+ IArchive pack = getPackage(module);
+ // remove all of the deployed items
+ PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module,
kind, deltaKind);
+ if( pack != null ) {
+ IPath sourcePath = pack.getArchiveFilePath();
+ IPath destPath = new
Path(server.getDeployDirectory()).append(sourcePath.lastSegment());
+ // remove the entire file or folder
+ PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
+ FileUtil.safeDelete(destPath.toFile(), listener);
+ }
+ }
+
+
+
+ protected void publishModule(IModule module, int kind, int deltaKind, int
modulePublishState, IProgressMonitor monitor) {
+ PublishEvent event = PublisherEventLogger.createSingleModuleTopEvent(eventRoot, module,
kind, deltaKind);
+ IArchive pack = getPackage(module);
+ IPath sourcePath = pack.getArchiveFilePath();
+ IPath destPathRoot = new Path(server.getDeployDirectory());
+
+ // if destination is deploy directory... no need to re-copy!
+ if( destPathRoot.toOSString().equals(pack.getGlobalDestinationPath().toOSString())) {
+ // fire null publish event
+ return;
+ }
+
+ PublisherFileUtilListener listener = new PublisherFileUtilListener(event);
+
+ if( shouldPublishIncremental(module, kind, deltaKind, modulePublishState) ) {
+ publishFromDelta(module, destPathRoot, sourcePath.removeLastSegments(1), delta,
listener);
+ } else {
+ // 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 publishFromDelta(IModule module, IPath destPathRoot, IPath sourcePrefix,
+ IModuleResourceDelta[] delta, PublisherFileUtilListener listener) {
+ ArrayList changedFiles = new ArrayList();
+ for( int i = 0; i < delta.length; i++ ) {
+ publishFromDeltaHandle(delta[i], destPathRoot, sourcePrefix, changedFiles, listener);
+ }
+ }
+ protected void publishFromDeltaHandle(IModuleResourceDelta delta, IPath destRoot,
+ IPath sourcePrefix, ArrayList changedFiles, PublisherFileUtilListener listener) {
+ switch( delta.getKind()) {
+ case IModuleResourceDelta.REMOVED:
+ // removed might not be IExtendedModuleResource
+ IModuleResource imr = delta.getModuleResource();
+ if( imr instanceof IExtendedModuleResource) {
+ IExtendedModuleResource emr = ((IExtendedModuleResource)imr);
+ IPath concrete = emr.getConcreteDestFile();
+ if( !changedFiles.contains(concrete)) {
+ IPath destPath =
destRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
+
+ // file hasnt been updated yet.
+ // But we don't know whether to delete or copy this file.
+ // depends where it is in the tree and what's exploded.
+ changedFiles.add(concrete);
+ IPath concreteRelative =
concrete.removeFirstSegments(sourcePrefix.segmentCount()).setDevice(null);
+ IPath emrModRelative = emr.getModuleRelativePath();
+ boolean delete = concreteRelative.equals(emrModRelative);
+
+ if( delete ) {
+ FileUtil.safeDelete(destPath.toFile(), listener);
+ } else {
+ // copy
+ FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
+ }
+ }
+ return;
+ } else {
+ System.out.println("not an extended module resource. need help here");
+ return;
+ }
+ case IModuleResourceDelta.ADDED:
+ imr = delta.getModuleResource();
+ if( imr instanceof IExtendedModuleResource) {
+ IPath concrete = ((IExtendedModuleResource)imr).getConcreteDestFile();
+ if( !changedFiles.contains(concrete)) {
+ changedFiles.add(concrete);
+ IPath destPath =
destRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
+ FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
+ }
+ return;
+ } else {
+ System.out.println("not an extended module resource. need help here");
+ return;
+ }
+ case IModuleResourceDelta.CHANGED:
+ imr = delta.getModuleResource();
+ if( imr instanceof ExtendedModuleFile ) {
+ IPath concrete = ((ExtendedModuleFile)imr).getConcreteDestFile();
+ if( !changedFiles.contains(concrete)) {
+ changedFiles.add(concrete);
+ IPath destPath =
destRoot.append(concrete.removeFirstSegments(sourcePrefix.segmentCount()));
+ FileUtil.fileSafeCopy(concrete.toFile(), destPath.toFile(), listener);
+ }
+ }
+ break;
+ }
+
+ IModuleResourceDelta[] children = delta.getAffectedChildren();
+ if( children != null ) {
+ for( int i = 0; i < children.length; i++ ) {
+ publishFromDeltaHandle(children[i], destRoot, sourcePrefix, changedFiles, listener);
+ }
+ }
+ }
+
+ protected IArchive getPackage(IModule module) {
+ PackagedModuleDelegate delegate =
(PackagedModuleDelegate)module.loadAdapter(PackagedModuleDelegate.class, new
NullProgressMonitor());
+ return delegate == null ? null : delegate.getPackage();
+ }
+}
Deleted:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PublisherEventLogger.java 2007-09-11
05:09:17 UTC (rev 3530)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -1,105 +0,0 @@
-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());
- }
- }
-
-}
Copied:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java
(from rev 3531,
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/PublisherEventLogger.java)
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/PublisherEventLogger.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -0,0 +1,105 @@
+package org.jboss.ide.eclipse.as.core.modules;
+
+import java.io.File;
+
+import org.eclipse.wst.server.core.IModule;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel;
+import org.jboss.ide.eclipse.as.core.extensions.events.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());
+ }
+ }
+
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/SingleFilePublisher.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/publishers/SingleFilePublisher.java 2007-09-11
05:09:17 UTC (rev 3530)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/modules/SingleFilePublisher.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -1,4 +1,4 @@
-package org.jboss.ide.eclipse.as.core.publishers;
+package org.jboss.ide.eclipse.as.core.modules;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@@ -10,9 +10,9 @@
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.packages.SingleDeployableFactory;
+import
org.jboss.ide.eclipse.as.core.packages.SingleDeployableFactory.SingleDeployableModuleDelegate;
import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
-import org.jboss.ide.eclipse.as.core.singledeployable.SingleDeployableFactory;
-import
org.jboss.ide.eclipse.as.core.singledeployable.SingleDeployableFactory.SingleDeployableModuleDelegate;
import org.jboss.ide.eclipse.as.core.util.FileUtil;
import org.jboss.ide.eclipse.as.core.util.ServerConverter;
Copied:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/SingleDeployableFactory.java
(from rev 3530,
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/singledeployable/SingleDeployableFactory.java)
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/SingleDeployableFactory.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/SingleDeployableFactory.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -0,0 +1,156 @@
+package org.jboss.ide.eclipse.as.core.packages;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+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.core.runtime.Status;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.internal.ModuleFactory;
+import org.eclipse.wst.server.core.internal.ModuleFile;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+import org.eclipse.wst.server.core.model.IModuleResource;
+import org.eclipse.wst.server.core.model.ModuleDelegate;
+import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
+import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
+
+public class SingleDeployableFactory extends ModuleFactoryDelegate {
+ public static final String FACTORY_ID =
"org.jboss.ide.eclipse.as.core.singledeployablefactory";
+ private static SingleDeployableFactory factDelegate;
+ public static final String MODULE_TYPE = "jboss.singlefile";
+ public static final String VERSION = "1.0";
+ private static final String PREFERENCE_KEY =
"org.jboss.ide.eclipse.as.core.singledeployable.deployableList";
+ private static final String DELIM = "\r";
+
+
+ private static ModuleFactory factory;
+ public static SingleDeployableFactory getFactory() {
+ if( factDelegate == null ) {
+ ModuleFactory[] factories = ServerPlugin.getModuleFactories();
+ for( int i = 0; i < factories.length; i++ ) {
+ if( factories[i].getId().equals(FACTORY_ID)) {
+ Object o = factories[i].getDelegate(new NullProgressMonitor());
+ if( o instanceof SingleDeployableFactory ) {
+ factory = factories[i];
+ factDelegate = (SingleDeployableFactory)o;
+ return factDelegate;
+ }
+ }
+ }
+ }
+ return factDelegate;
+ }
+
+ public static boolean makeDeployable(IResource resource) {
+ return makeDeployable(resource.getFullPath());
+ }
+
+ public static boolean makeDeployable(IPath workspaceRelative) {
+ boolean ret = getFactory().addModule(workspaceRelative);
+ getFactory().saveDeployableList();
+ return ret;
+ }
+
+ public static void unmakeDeployable(IResource resource) {
+ unmakeDeployable(resource.getFullPath());
+ }
+
+ public static void unmakeDeployable(IPath workspaceRelative) {
+ getFactory().removeModule(workspaceRelative);
+ getFactory().saveDeployableList();
+ }
+
+ public static IModule findModule(IResource resource) {
+ return findModule(resource.getFullPath());
+ }
+ public static IModule findModule(IPath workspaceRelative) {
+ return getFactory().getModule(workspaceRelative);
+ }
+
+
+
+ private HashMap moduleIdToModule;
+ private HashMap moduleToDelegate;
+ public SingleDeployableFactory() {
+ moduleIdToModule = new HashMap();
+ moduleToDelegate = new HashMap();
+ String files =
JBossServerCorePlugin.getDefault().getPluginPreferences().getString(PREFERENCE_KEY);
+ if( files.equals("")) return;
+ String[] files2 = files.split(DELIM);
+ for( int i = 0; i < files2.length; i++ ) {
+ addModule(new Path(files2[i]));
+ }
+ }
+
+ public IModule getModule(IPath path) {
+ return (IModule)moduleIdToModule.get(path);
+ }
+ public void saveDeployableList() {
+ Iterator i = moduleIdToModule.keySet().iterator();
+ String val = "";
+ while(i.hasNext()) {
+ val += ((IPath)i.next()).toString() + DELIM;
+ }
+ JBossServerCorePlugin.getDefault().getPluginPreferences().setValue(PREFERENCE_KEY,
val);
+ JBossServerCorePlugin.getDefault().savePluginPreferences();
+ }
+
+ protected boolean addModule(IPath path) {
+ IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
+ if( resource != null && resource.exists() ) {
+ IModule module = createModule(path.toString(), path.toString(), MODULE_TYPE, VERSION,
resource.getProject());
+ moduleIdToModule.put(path, module);
+ moduleToDelegate.put(module, new SingleDeployableModuleDelegate(path));
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ protected void removeModule(IPath path) {
+ IModule mod = (IModule)moduleIdToModule.get(path);
+ moduleIdToModule.remove(path);
+ moduleToDelegate.remove(mod);
+ }
+
+ public IModule[] getModules() {
+ Collection c = moduleIdToModule.values();
+ return (IModule[]) c.toArray(new IModule[c.size()]);
+ }
+
+ public ModuleDelegate getModuleDelegate(IModule module) {
+ return (ModuleDelegate)moduleToDelegate.get(module);
+ }
+
+ public class SingleDeployableModuleDelegate extends ModuleDelegate {
+ private IPath global;
+ public SingleDeployableModuleDelegate(IPath workspaceRelative) {
+ global =
ResourcesPlugin.getWorkspace().getRoot().getLocation().append(workspaceRelative);
+ }
+ public IModule[] getChildModules() {
+ return new IModule[0];
+ }
+
+ public IModuleResource[] members() throws CoreException {
+ return new IModuleResource[] {
+ new ModuleFile(global.lastSegment(),
+ new Path(global.lastSegment()),
+ global.toFile().lastModified()) };
+ }
+
+ public IStatus validate() {
+ return Status.OK_STATUS;
+ }
+
+ public IPath getGlobalSourcePath() {
+ return this.global;
+ }
+ }
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/DeployableServerBehavior.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/DeployableServerBehavior.java 2007-09-11
05:16:49 UTC (rev 3532)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/server/DeployableServerBehavior.java 2007-09-11
05:20:35 UTC (rev 3533)
@@ -19,13 +19,13 @@
import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel;
import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.EventLogTreeItem;
+import org.jboss.ide.eclipse.as.core.modules.IJBossServerPublisher;
+import org.jboss.ide.eclipse.as.core.modules.JstPublisher;
+import org.jboss.ide.eclipse.as.core.modules.NullPublisher;
+import org.jboss.ide.eclipse.as.core.modules.PackagesPublisher;
+import org.jboss.ide.eclipse.as.core.modules.PublisherEventLogger;
+import org.jboss.ide.eclipse.as.core.modules.SingleFilePublisher;
import org.jboss.ide.eclipse.as.core.packages.PackageModuleFactory;
-import org.jboss.ide.eclipse.as.core.publishers.IJBossServerPublisher;
-import org.jboss.ide.eclipse.as.core.publishers.JstPublisher;
-import org.jboss.ide.eclipse.as.core.publishers.NullPublisher;
-import org.jboss.ide.eclipse.as.core.publishers.PackagesPublisher;
-import org.jboss.ide.eclipse.as.core.publishers.PublisherEventLogger;
-import org.jboss.ide.eclipse.as.core.publishers.SingleFilePublisher;
import
org.jboss.ide.eclipse.as.core.server.internal.launch.DeployableLaunchConfiguration;
public class DeployableServerBehavior extends ServerBehaviourDelegate {
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml 2007-09-11 05:16:49 UTC (rev
3532)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/plugin.xml 2007-09-11 05:20:35 UTC (rev
3533)
@@ -249,7 +249,7 @@
versions="1.0"/>
</moduleFactory>
<moduleFactory
-
class="org.jboss.ide.eclipse.as.core.singledeployable.SingleDeployableFactory"
+
class="org.jboss.ide.eclipse.as.core.packages.SingleDeployableFactory"
id="org.jboss.ide.eclipse.as.core.singledeployablefactory"
projects="false">
<moduleType