/*
* Copyright (C) 2012 Nagoya University All rights reserved.
*/
package net.dependableos.dcase.diagram.editor.command;
import net.dependableos.dcase.Argument;
import net.dependableos.dcase.BasicNode;
import net.dependableos.dcase.diagram.common.util.MessageTypeImpl;
import net.dependableos.dcase.diagram.common.util.Messages;
import net.dependableos.dcase.diagram.common.util.ModelUtil;
import net.dependableos.dcase.diagram.editor.ui.ModuleViewPart;
import net.dependableos.dcase.diagram.editor.common.util.MessageWriter;
import net.dependableos.dcase.diagram.editor.common.util.ModuleUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.Action;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.common.ui.util.FileUtil;
import org.eclipse.osgi.util.NLS;
/**
* An action to delete a module file.
*/
public class ModuleDeleteAction extends Action {
/**
* the module view part.
*/
private ModuleViewPart viewPart;
/**
* Creates the action and initializes it.
*
* @param viewPart
* the module view part.
*/
public ModuleDeleteAction(ModuleViewPart viewPart) {
super();
this.viewPart = viewPart;
}
/**
* Deletes the module file.
*
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void run() {
String moduleName = viewPart.getSelectedModuleFile();
if (ModuleUtil.isPublicNodeName(moduleName)) {
return;
}
IPath diagramPath = ModuleUtil.getDiagramPath(moduleName);
IFile diagramFile = ResourcesPlugin.getWorkspace().getRoot()
.getFile(diagramPath);
IPath modelPath = ModuleUtil.getModelPath(moduleName);
IFile modelFile = ResourcesPlugin.getWorkspace().getRoot()
.getFile(modelPath);
EObject eobj = ModelUtil.getModel(modelFile, true);
// check reference number
if (eobj instanceof Argument) {
String refStr = ((Argument) eobj).getRefSource();
if (ModuleUtil.getReferenceNumber(refStr) > 0) {
MessageWriter.writeMessageToConsole(
NLS.bind(Messages.ModuleDeleteAction_2, moduleName),
MessageTypeImpl.DELETE_MODULE_FAILED);
return;
}
String publicFlagStr = ModuleUtil.getPublicFlagString();
for (BasicNode node : ((Argument) eobj).getRootBasicNode()) {
String flagStr = node.getFlag();
refStr = node.getRefSource();
if (flagStr == null || flagStr.length() == 0) {
continue;
}
if (flagStr.indexOf(publicFlagStr) >= 0 && refStr != null
&& ModuleUtil.getReferenceNumber(refStr) > 0) {
MessageWriter.writeMessageToConsole(NLS.bind(
Messages.ModuleDeleteAction_2,
ModuleUtil.createNodeReference(moduleName,
node.getName())),
MessageTypeImpl.DELETE_MODULE_FAILED);
return;
}
}
}
try {
FileUtil.deleteFile(diagramFile, new NullProgressMonitor());
} catch (CoreException e) {
MessageWriter.writeMessageToConsole(
NLS.bind(Messages.ModuleDeleteAction_0,
diagramFile.getName()),
MessageTypeImpl.DELETE_MODULE_FAILED);
return;
}
try {
FileUtil.deleteFile(modelFile, new NullProgressMonitor());
} catch (CoreException e) {
MessageWriter.writeMessageToConsole(NLS.bind(
Messages.ModuleDeleteAction_1, modelFile.getName()),
MessageTypeImpl.DELETE_MODULE_FAILED);
return;
}
}
}