blob: e48f136328e703877fa2eddf9632b3bb970fb248 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}