blob: 1a5b4b93f12efa30a5b7f7bb0d71cc8e2c6ac6e6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 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.jst.j2ee.internal.earcreation;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.jst.j2ee.application.Application;
import org.eclipse.jst.j2ee.application.Module;
import org.eclipse.jst.j2ee.application.WebModule;
import org.eclipse.jst.j2ee.internal.earcreation.modulemap.ModuleMapping;
import org.eclipse.jst.j2ee.internal.project.J2EEModuleNature;
import org.eclipse.jst.j2ee.internal.project.J2EENature;
/**
* Insert the type's description here. Creation date: (03/29/01 4:48:46 PM)
*
* @author: Administrator
*/
public abstract class ModuleInEARProjectCommand extends AbstractCommand {
protected EAREditModel editModel;
protected IProject earProject;
protected IProject nestedJ2EEProject;
protected String moduleUri;
protected String moduleAltDD;
protected String moduleContextRoot;
protected boolean moduleSuccessful;
protected boolean mapSuccessful;
protected Module module;
/**
* AddModuleToEARProjectCommand constructor comment.
*/
protected ModuleInEARProjectCommand() {
super();
}
/**
* AddModuleToEARProjectCommand constructor comment.
*
* @param label
* java.lang.String
*/
protected ModuleInEARProjectCommand(String label) {
super(label);
}
/**
* AddModuleToEARProjectCommand constructor comment.
*
* @param label
* java.lang.String
* @param description
* java.lang.String
*/
protected ModuleInEARProjectCommand(String label, String description) {
super(label, description);
}
public ModuleInEARProjectCommand(IProject aNestedJ2EEProject, IProject anEarProject, String uri, String contextRoot, String altDD) {
super();
setNestedJ2EEProject(aNestedJ2EEProject);
setEarProject(anEarProject);
setModuleUri(uri);
setModuleContextRoot(contextRoot);
setModuleAltDD(altDD);
}
protected void addModule() {
Application dd = getApplication();
if (dd == null) {
return;
}
Module m = dd.getFirstModule(moduleUri);
if (m == null) {
J2EEModuleNature j2eeNature = (J2EEModuleNature) J2EENature.getRegisteredRuntime(getNestedJ2EEProject());
m = j2eeNature.createNewModule();
if (m == null)
return;
m.setUri(moduleUri);
m.setAltDD(moduleAltDD);
if (m instanceof WebModule) {
((WebModule) m).setContextRoot(moduleContextRoot);
}
dd.getModules().add(m);
}
setModule(m);
}
protected void addModuleMapping() {
if (module != null) {
ModuleMapping map = editModel.addModuleMapping(module, getNestedJ2EEProject());
mapSuccessful = (map != null);
}
}
public void dispose() {
setNestedJ2EEProject(null);
setEarProject(null);
}
/**
* @see Command
*/
public void execute() {
try {
setupEditModel();
if (editModel != null) {
primExecute();
editModel.saveIfNecessary(this);
} else
moduleSuccessful = false;
} finally {
releaseEditModel();
}
}
protected Application getApplication() {
return editModel.getApplication();
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @return org.eclipse.core.resources.IProject
*/
public org.eclipse.core.resources.IProject getEarProject() {
return earProject;
}
/**
* Insert the method's description here. Creation date: (3/29/2001 11:44:01 PM)
*
* @return org.eclipse.jst.j2ee.internal.internal.application.Module
*/
public Module getModule() {
return module;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @return java.lang.String
*/
public java.lang.String getModuleAltDD() {
return moduleAltDD;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @return java.lang.String
*/
public java.lang.String getModuleContextRoot() {
return moduleContextRoot;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @return java.lang.String
*/
public java.lang.String getModuleUri() {
return moduleUri;
}
protected EARNatureRuntime getNature() {
return EARNatureRuntime.getRuntime(getEarProject());
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @return org.eclipse.core.resources.IProject
*/
public org.eclipse.core.resources.IProject getNestedJ2EEProject() {
return nestedJ2EEProject;
}
public boolean isExecuteSuccess() {
return moduleSuccessful && mapSuccessful;
}
protected boolean prepare() {
return true;
}
protected abstract void primExecute();
protected abstract void primUndo();
/**
* @see Command
*/
public void redo() {
execute();
}
protected void releaseEditModel() {
if (editModel != null) {
editModel.releaseAccess(this);
editModel = null;
}
}
protected void removeModule() {
getApplication().getModules().remove(getModule());
}
protected void removeModuleMapping() {
org.eclipse.jst.j2ee.internal.earcreation.modulemap.ModuleMapping map = editModel.getModuleMapping(module);
if (map != null)
editModel.getModuleMappings().remove(map);
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @param newEarProject
* org.eclipse.core.resources.IProject
*/
public void setEarProject(org.eclipse.core.resources.IProject newEarProject) {
earProject = newEarProject;
}
/**
* Insert the method's description here. Creation date: (3/29/2001 11:44:01 PM)
*
* @param newAddedModule
* org.eclipse.jst.j2ee.internal.internal.application.Module
*/
public void setModule(Module module) {
this.module = module;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @param newModuleUri
* java.lang.String
*/
public void setModuleAltDD(java.lang.String newModuleAltDD) {
moduleAltDD = newModuleAltDD;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @param newModuleUri
* java.lang.String
*/
public void setModuleContextRoot(java.lang.String newModuleContextRoot) {
moduleContextRoot = newModuleContextRoot;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @param newModuleUri
* java.lang.String
*/
public void setModuleUri(java.lang.String newModuleUri) {
moduleUri = newModuleUri;
}
/**
* Insert the method's description here. Creation date: (03/29/01 5:34:26 PM)
*
* @param newNestedJ2EEProject
* org.eclipse.core.resources.IProject
*/
public void setNestedJ2EEProject(org.eclipse.core.resources.IProject newNestedJ2EEProject) {
nestedJ2EEProject = newNestedJ2EEProject;
}
protected void setupEditModel() {
EARNatureRuntime nature = getNature();
if (nature != null)
editModel = nature.getEarEditModelForWrite(this);
else
editModel = null; // arived here with a valid project, but not an EAR nature.
}
public void undo() {
try {
setupEditModel();
primUndo();
editModel.saveIfNecessary(this);
} finally {
releaseEditModel();
}
}
}