/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.model.handlers;
import java.text.MessageFormat;
import java.util.Properties;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.*;
import org.jboss.tools.common.meta.action.SignificanceMessageFactory;
import org.jboss.tools.common.meta.action.impl.SpecialWizardSupport;
import org.jboss.tools.common.meta.action.impl.handlers.DefaultRemoveHandler;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.plugin.ModelPlugin;
import org.jboss.tools.jsf.messages.JSFUIMessages;
import org.jboss.tools.jsf.model.pv.*;
public class DeleteManagedBeanHandler extends DefaultRemoveHandler {
public void executeHandler(XModelObject object, Properties p) throws XModelException {
boolean unregister = false;
IFile f = getJavaFile(object);
if(f != null) {
ServiceDialog d = object.getModel().getService();
Properties pd = new Properties();
String message = SignificanceMessageFactory.getInstance().getMessage(action, object, null) + "?";
pd.setProperty(ServiceDialog.DIALOG_MESSAGE, message);
pd.setProperty(ServiceDialog.CHECKBOX_MESSAGE, JSFUIMessages.DELETE_JAVA_SOURCE);
pd.put(ServiceDialog.CHECKED, Boolean.FALSE);
if(!d.openConfirm(pd)) return;
Boolean b = (Boolean)pd.get(ServiceDialog.CHECKED);
unregister = b.booleanValue();
}
super.executeHandler(object, p);
if(object.isActive()) return;
if(unregister) {
try {
if(f != null && f.exists()) f.delete(true, null);
} catch (CoreException e) {
ServiceDialog d = object.getModel().getService();
d.showDialog(JSFUIMessages.DeleteManagedBeanHandler_Failure, MessageFormat.format(JSFUIMessages.DeleteManagedBeanHandler_CannotDeleteFile, f), new String[]{SpecialWizardSupport.CLOSE}, null, ServiceDialog.ERROR);
}
}
}
public boolean getSignificantFlag(XModelObject object) {
return getJavaFile(object) == null;
}
IFile getJavaFile(XModelObject object) {
XModelObject o = JSFProjectsTree.getProjectsRoot(object.getModel());
if(o == null) return null;
JSFProjectBeans beans = (JSFProjectBeans)o.getChildByPath(JSFProjectTreeConstants.BEANS);
if(beans == null) return null;
IType type = beans.getType(object.getAttributeValue("managed-bean-class")); //$NON-NLS-1$
if(type == null || type.isBinary()) return null;
ICompilationUnit u = type.getCompilationUnit();
if(u == null || u.getPath() == null) return null;
IFile file = ModelPlugin.getWorkspace().getRoot().getFile(u.getPath());
return (file == null || !file.isAccessible() || !file.exists()) ? null : file;
}
}