/******************************************************************************* | |
* Copyright (c) 2008, 2012 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.jboss.riftsaw.runtime.module; | |
import org.eclipse.bpel.jboss.riftsaw.runtime.IRiftsawModuleFacetConstants; | |
import org.eclipse.bpel.runtimes.IBPELModuleFacetConstants; | |
import org.eclipse.bpel.runtimes.RuntimesPlugin; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.core.resources.IProject; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.core.runtime.Path; | |
import org.eclipse.core.runtime.Status; | |
import org.eclipse.wst.server.core.internal.ModuleFile; | |
import org.eclipse.wst.server.core.model.IModuleResource; | |
import org.eclipse.wst.server.core.model.ModuleDelegate; | |
import org.eclipse.wst.server.core.util.ProjectModule; | |
/** | |
* A <code>ModuleDelegate</code> implementation for BPEL modules making use | |
* of <code>ProjectModule</code> in order to link a BPEL module to the project | |
* it is contained in. Nevertheless, at the moment, a BPEL module is considered | |
* to be a single BPEL file and not to consist of other resources in the same | |
* project. | |
* | |
* @author Bruno Wassermann, written 14 Jul 2006 | |
*/ | |
public class RiftsawModuleDelegate extends ProjectModule { | |
private IFile file; | |
/** | |
* Constructor initialising module delegate with the folder in which the | |
* BPEL module is contained and with the file representing the actual | |
* BPEL process/module. | |
* | |
* @param project <code>IProject</code> containing BPEL module (but is not | |
* the same as BPEL module) | |
* @param file <code>IFile</code> representing the actual BPEL process/module | |
*/ | |
public RiftsawModuleDelegate(IProject project, IFile file) { | |
super(project); | |
this.file = file; | |
} | |
/** | |
* Overriding implementation in <code>ProjectModule</code> in order to return | |
* actual module type id. | |
* | |
* @see ProjectModule#getId() | |
* @return <code>String</code> representing module type id | |
*/ | |
@Override | |
public String getId() { | |
return IRiftsawModuleFacetConstants.JBT_BPEL_MODULE_TYPE; | |
} | |
/** | |
* Returns the name of this module; to be precise the name of the file this | |
* module represents. | |
* | |
* @see ProjectModule#getName() | |
* @return <code>String</code> | |
*/ | |
@Override | |
public String getName() { | |
return file.getName(); | |
} | |
/** | |
* Returns the file represented by this module. | |
* | |
* @return <code>IFile</code> | |
*/ | |
public IFile getFile() { | |
return file; | |
} | |
/** | |
* Returns whether or not this module exists (may have been removed). | |
* | |
* @see ProjectModule#exists() | |
* @return <code>true</code> if the module exists, <code>false</code> otherwise | |
*/ | |
@Override | |
public boolean exists() { | |
return file.exists(); | |
} | |
/** | |
* Returns the module resources that should be published to the server. | |
* The implementation in <code>ProjectModule</code> assumes that the entire | |
* project should be published to the server. | |
* <p> | |
* For now we will restrict this to be just the selected BPEL file itself | |
* that is represented by this module. | |
* <p> | |
* TODO will have to reconsider implementation to allow for all BPEL files | |
* in a project to be published | |
* <p> | |
* TODO would be interesting to consider publishing any Web services present | |
* in the project that BPEL processes may require as part of automated | |
* deployment. For now, will suffice, though, to notify user of missing Web | |
* service and ask user to deploy WS first. | |
* | |
* @see ModuleDelegate#members() | |
* @return <code>IModuleResource</code>[] | |
*/ | |
@Override | |
public IModuleResource[] members() { | |
IModuleResource[] result = {new ModuleFile(file, file.getName(), Path.EMPTY)}; | |
return result; | |
} | |
/** | |
* Overriding superclass implementation. Checks whether the <code>IFile</code> | |
* representing the BPEL module has a bpel file extension (weak validation). | |
* | |
* @see ModuleDelegate#validate() | |
* <p> | |
* TODO should also allow for BPEL projects being valid modules | |
*/ | |
@Override | |
public IStatus validate() { | |
super.validate(); | |
if (IBPELModuleFacetConstants.DOT_BPEL_FILE_EXTENSION.equalsIgnoreCase( | |
file.getFileExtension())) | |
{ | |
return Status.OK_STATUS; | |
} | |
return new Status( | |
IStatus.ERROR, | |
RuntimesPlugin.PLUGIN_ID, | |
0, | |
org.eclipse.bpel.runtimes.module.Messages.InvalidFileExtension, | |
null); | |
} | |
@Override | |
public boolean equals(Object obj) { | |
if (obj == null) return false; | |
if (this == obj) return true; | |
if (!(obj instanceof RiftsawModuleDelegate)) return false; | |
RiftsawModuleDelegate bmd = (RiftsawModuleDelegate) obj; | |
if (this.getProject() != null | |
&& this.getProject().exists() | |
&& !this.getProject().equals(bmd.getProject())) | |
{ | |
return false; | |
} | |
if (file != null | |
&& file.exists() | |
&& !(file.getFullPath().equals(bmd.getFile().getFullPath()))) | |
{ | |
return false; | |
} | |
if (getId() != null && !getId().equals(bmd.getId())) return false; | |
return true; | |
} | |
/* | |
* (non-Javadoc) | |
* @see java.lang.Object#hashCode() | |
*/ | |
@Override | |
public int hashCode() { | |
return file == null ? 0 : file.getFullPath().toOSString().length(); | |
} | |
} |