blob: 84d7da7fd9d9be9c879508c4fc6fbb423c5193e0 [file] [log] [blame]
package org.eclipse.jst.j2ee.application.internal.operations;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.common.jdt.internal.integration.IJavaProjectMigrationDataModelProperties;
import org.eclipse.jst.common.jdt.internal.integration.JavaProjectMigrationDataModelProvider;
import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
import org.eclipse.jst.j2ee.datamodel.properties.IEarComponentCreationDataModelProperties;
import org.eclipse.jst.j2ee.internal.J2EEConstants;
import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
import org.eclipse.wst.common.componentcore.internal.operation.ComponentCreationOperation;
import org.eclipse.wst.common.componentcore.internal.operation.CreateReferenceComponentsDataModelProvider;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.componentcore.resources.ComponentHandle;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
public class EARComponentCreationOperation extends ComponentCreationOperation implements IEarComponentCreationDataModelProperties{
public EARComponentCreationOperation(IDataModel model) {
super(model);
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.application.operations.J2EEComponentCreationOperation#createAndLinkJ2EEComponents()
*/
protected void createAndLinkJ2EEComponentsForMultipleComponents() throws CoreException {
IVirtualComponent component = ComponentCore.createComponent(getProject(), getModuleDeployName());
component.create(0, null);
//create and link META-INF folder
IVirtualFolder root = component.getRootFolder().getFolder(new Path("/")); //$NON-NLS-1$
root.createLink(new Path("/" + getModuleName()), 0, null); //$NON-NLS-1$
IVirtualFolder metaInfFolder = root.getFolder(J2EEConstants.META_INF);
metaInfFolder.create(IResource.FORCE, null);
}
protected void createAndLinkJ2EEComponentsForSingleComponent() throws CoreException {
IVirtualComponent component = ComponentCore.createComponent(getProject(), getModuleDeployName());
component.create(0, null);
//create and link META-INF folder
IVirtualFolder root = component.getRootFolder().getFolder(new Path("/")); //$NON-NLS-1$
root.createLink(new Path("/" + getModuleName()), 0, null); //$NON-NLS-1$
IVirtualFolder metaInfFolder = root.getFolder(J2EEConstants.META_INF);
metaInfFolder.create(IResource.FORCE, null);
}
public IProject getProject() {
String projName = model.getStringProperty(PROJECT_NAME);
return ProjectUtilities.getProject( projName );
}
protected void createDeploymentDescriptor(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
EARArtifactEdit earEdit = null;
try {
ComponentHandle handle = ComponentHandle.create(getProject(),getDataModel().getStringProperty(COMPONENT_DEPLOY_NAME));
earEdit = EARArtifactEdit.getEARArtifactEditForWrite(handle);
Integer version = (Integer)getDataModel().getProperty(COMPONENT_VERSION);
earEdit.createModelRoot(version.intValue());
earEdit.save(monitor);
} finally {
if (earEdit != null)
earEdit.dispose();
}
}
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
try {
super.execute(IModuleConstants.JST_EAR_MODULE, monitor, info);
if (getDataModel().getBooleanProperty(CREATE_DEFAULT_FILES)) {
createDeploymentDescriptor(monitor);
}
addModulesToEAR(monitor);
} catch (CoreException e) {
Logger.getLogger().log(e.getMessage());
} catch (InvocationTargetException e) {
Logger.getLogger().log(e.getMessage());
} catch (InterruptedException e) {
Logger.getLogger().log(e.getMessage());
}
return OK_STATUS;
}
private IStatus addModulesToEAR(IProgressMonitor monitor) {
IStatus stat = OK_STATUS;
try{
IDataModel dm = (IDataModel)model.getProperty(NESTED_ADD_COMPONENT_TO_EAR_DM);
IVirtualComponent component = ComponentCore.createComponent(getProject(), model.getStringProperty(COMPONENT_DEPLOY_NAME));
dm.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE, component.getComponentHandle());
List modulesList = (List)model.getProperty(J2EE_COMPONENT_LIST);
if (modulesList != null && !modulesList.isEmpty()) {
dm.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST, modulesList);
stat = dm.validateProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST);
if( stat != OK_STATUS )
return stat;
dm.getDefaultOperation().execute(monitor, null);
}
List javaProjectsList = (List)model.getProperty(JAVA_PROJECT_LIST);
if( !javaProjectsList.isEmpty()){
for( int i=0; i< javaProjectsList.size(); i++){
IProject proj = (IProject) javaProjectsList.get(i);
IDataModel migrationdm = DataModelFactory.createDataModel( new JavaProjectMigrationDataModelProvider());
migrationdm.setProperty(IJavaProjectMigrationDataModelProperties.PROJECT_NAME, proj.getName());
migrationdm.getDefaultOperation().execute(monitor, null);
IDataModel refdm = DataModelFactory.createDataModel( new CreateReferenceComponentsDataModelProvider());
List targetCompList = (List) refdm.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST);
IVirtualComponent targetcomponent = ComponentCore.createComponent(proj, proj.getName());
targetCompList.add(targetcomponent.getComponentHandle());
refdm.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE, component.getComponentHandle());
refdm.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST, targetCompList);
refdm.getDefaultOperation().execute(monitor, null);
}
}
} catch(Exception e) {
Logger.getLogger().log(e);
}
return OK_STATUS;
}
protected void addResources(WorkbenchComponent component ){
//Default
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.application.operations.J2EEComponentCreationOperation#getVersion()
*/
protected String getVersion() {
int version = getDataModel().getIntProperty(COMPONENT_VERSION);
return J2EEVersionUtil.getJ2EETextVersion(version);
}
public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
return null;
}
public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
return null;
}
/* protected void setupComponentType(String typeID) {
IVirtualComponent component = ComponentCore.createComponent(getProject(), getModuleDeployName());
ComponentType componentType = ComponentcoreFactory.eINSTANCE.createComponentType();
componentType.setComponentTypeId(typeID);
componentType.setVersion(getVersion());
StructureEdit.setComponentType(component, componentType);
}*/
public String getModuleName() {
return getDataModel().getStringProperty(COMPONENT_NAME);
}
public String getModuleDeployName() {
return getDataModel().getStringProperty(COMPONENT_DEPLOY_NAME);
}
protected List getProperties() {
// TODO Auto-generated method stub
return null;
}
}