blob: 817d82050de0e1ad0262e12ab50de4cec8dcef97 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20060303 128094 joan@ca.ibm.com - Joan Haggarty
*******************************************************************************/
package org.eclipse.jst.ws.internal.common;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jem.java.JavaClass;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jst.j2ee.ejb.EJBJar;
import org.eclipse.jst.j2ee.ejb.EJBResource;
import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
import org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit;
import org.eclipse.jst.ws.internal.WSPluginMessages;
import org.eclipse.wst.command.internal.env.common.FileResourceUtils;
import org.eclipse.wst.command.internal.env.core.data.Transformer;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
/**
* Transforms a string value representing a workspace resource path into a StructuredSelection object
*
* @author joan
*
*/
public class String2SelectionTransformer implements Transformer {
public Object transform(Object value) {
StructuredSelection selection = null;
IResource resource = FileResourceUtils.getWorkspaceRoot().findMember(new Path(value.toString()));
if (resource != null)
{
IProject resProject = resource.getProject();
// check if resource is part of an EJB
if (J2EEUtils.isEJBComponent(resProject))
{
// if resource is part of EJB need to get the EnterpriseBean as the selection
IVirtualComponent[] ejbComponents = J2EEUtils.getEJBComponents(resProject);
EJBArtifactEdit ejbEdit = null;
try{
ejbEdit = EJBArtifactEdit.getEJBArtifactEditForRead(ejbComponents[0]);
EJBResource ejbRes = ejbEdit.getEJBJarXmiResource();
EJBJar ejbJar = ejbRes.getEJBJar();
IPath path = resource.getFullPath();
String resourcePath = ResourceUtils.getJavaResourcePackageName(path);
String javaClassName = resource.getName();
// strip off file extension if necessary
if (javaClassName.lastIndexOf('.')>-1)
{
javaClassName = javaClassName.substring(0, javaClassName.lastIndexOf('.'));
}
JavaClass javaClass = JavaMOFUtils.getJavaClass(resourcePath, javaClassName, resProject);
EnterpriseBean ejb = ejbJar.getEnterpriseBeanWithReference(javaClass);
if (ejb != null)
{
selection = new StructuredSelection(ejb.getName());
}
}
catch (Exception exc)
{
}
finally {
if (ejbEdit!=null)
ejbEdit.dispose();
}
}
// if selection not already set - create it from the resource object
if (selection == null)
{
selection = new StructuredSelection(resource);
}
}
else
{
// string doesn't return resource - error condition
throw new IllegalArgumentException(WSPluginMessages.ERROR_SELECTION_TRANSFORM);
}
return selection;
}
}