blob: b956516462a8d24691753916d1ee6c01858ca6b9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 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.wst.common.componentcore.internal.operation;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jem.util.UIContextDetermination;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.wst.common.componentcore.ArtifactEdit;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
import org.eclipse.wst.common.componentcore.internal.util.ArtifactEditRegistryReader;
import org.eclipse.wst.common.componentcore.internal.util.IArtifactEditFactory;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
public abstract class ArtifactEditProviderOperation extends AbstractDataModelOperation {
protected ArtifactEdit artifactEdit;
protected EMFWorkbenchContext emfWorkbenchContext;
// private CommandStack commandStack;
public ArtifactEditProviderOperation() {
super();
// TODO Auto-generated constructor stub
}
public ArtifactEditProviderOperation(IDataModel model) {
super(model);
}
protected final void initialize(IProgressMonitor monitor) {
emfWorkbenchContext = (EMFWorkbenchContext) WorkbenchResourceHelperBase.createEMFContext(getTargetProject(), null);
IVirtualComponent component = getTargetComponent();
artifactEdit = getArtifactEditForModule(component);
doInitialize(monitor);
}
public IProject getTargetProject() {
String projectName = model.getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME);
return ProjectUtilities.getProject(projectName);
}
public IVirtualComponent getTargetComponent() {
return ComponentCore.createComponent(getTargetProject());
}
private void doInitialize(IProgressMonitor monitor) {
//Default
}
protected ArtifactEdit getArtifactEditForModule(IVirtualComponent comp) {
ArtifactEditRegistryReader reader = ArtifactEditRegistryReader.instance();
IArtifactEditFactory factory = reader.getArtifactEdit(comp.getProject());
if (factory == null)
return null;
return factory.createArtifactEditForWrite(comp);
}
public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
return null;
}
public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
return null;
}
public void dispose() {
if (artifactEdit!=null) {
artifactEdit.saveIfNecessary(new NullProgressMonitor());
artifactEdit.dispose();
}
super.dispose();
}
public final IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
try {
initialize(monitor);
if (validateEdit().isOK())
return doExecute(monitor, info);
return Status.CANCEL_STATUS;
} finally {
dispose();
}
}
public abstract IStatus doExecute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;
public ArtifactEdit getArtifactEdit(){
return artifactEdit;
}
/**
* Validate edit for resource state
*/
protected IStatus validateEdit() {
IValidateEditContext validator = (IValidateEditContext) UIContextDetermination.createInstance(IValidateEditContext.CLASS_KEY);
return validator.validateState((EditModel)getArtifactEdit().getAdapter(ArtifactEditModel.ADAPTER_TYPE));
}
}