/*******************************************************************************
* 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.common.model.ui.wizard.newfile;
import java.util.Properties;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.jboss.tools.common.meta.action.XAction;
import org.jboss.tools.common.meta.action.XActionList;
import org.jboss.tools.common.meta.action.impl.SpecialWizardSupport;
import org.jboss.tools.common.meta.key.WizardKeys;
import org.jboss.tools.common.model.XModel;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
import org.jboss.tools.common.model.ui.util.ModelUtilities;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
public class NewFileContext {
protected IResource resource;
protected XModelObject folder;
protected XModelObject fakeFolder;
protected XAction action;
protected SpecialWizardSupport support = createSupport();
protected String errorMesage = null;
protected String helpkey;
static String COMPANY_NAME = "Red Hat";
public NewFileContext() {}
public void init() {
XModel model = ModelUtilities.getPreferenceModel();
fakeFolder = model.createModelObject("FileFolder", null); //$NON-NLS-1$
XActionList list = model.getMetaData().getEntity("FileFolder").getActionList(); //$NON-NLS-1$
action = list.getAction(getActionPath());
support.setActionData(action, action.getEntityData(fakeFolder), fakeFolder, null);
helpkey = "FileFolder_" + action.getName(); //$NON-NLS-1$
}
protected SpecialWizardSupport createSupport() {
return new SWS();
}
protected String getActionPath() {
return null;
}
public void setSelection(IStructuredSelection selection) {
errorMesage = null;
resource = null;
folder = null;
if(selection.isEmpty() || selection.size() > 1) return;
Object o = selection.getFirstElement();
if(o instanceof IResource) {
resource = (IResource)o;
} else if(o instanceof IAdaptable) {
resource = (IResource)((IAdaptable)o).getAdapter(IResource.class);
}
if(resource != null && !resource.getProject().isOpen()) {
errorMesage = "Project is closed";
return;
}
if(EclipseResourceUtil.getModelNature(resource.getProject()) == null)
errorMesage = "Add Struts Nature to project";
folder = EclipseResourceUtil.getObjectByResource(resource);
if(folder != null) {
if(folder.getFileType() > XModelObject.FILE) {
} else if(folder.getFileType() == XModelObject.NONE)
folder = folder.getModel().getByPath("FileSystems/WEB-INF"); //$NON-NLS-1$
else if(folder.getFileType() == XModelObject.FILE)
folder = folder.getParent();
}
if(!(folder instanceof FolderImpl)) folder = null;
if(folder == null) {
errorMesage = "Cannot find " + COMPANY_NAME + " model element for resource " + resource.getLocation().toString();
} else {
support.setActionData(action, action.getEntityData(folder), folder, null);
}
}
class SWS extends SpecialWizardSupport {
public SWS() {}
public void action(String name) throws XModelException {}
}
public String validate(Properties data) {
if(errorMesage != null) return errorMesage;
support.getValidator(0).validate(data);
return support.getValidator(0).getErrorMessage();
}
public void execute() throws XModelException {
Properties p = new Properties();
if(resource != null) p.put("resource", resource); //$NON-NLS-1$
action.executeHandler(support.getTarget(), p);
}
public boolean update() {
if(folder == null) return false;
action.getEntityData(folder);
return true;
}
public XModelObject getFakeObject() {
return fakeFolder;
}
public SpecialWizardSupport getSupport() {
return support;
}
public String getWindowTitle() {
String title = WizardKeys.getHeader(helpkey);
return (title == null) ? "" : title; //$NON-NLS-1$
}
public String getTitle() {
String title = WizardKeys.getTitle(helpkey);
return (title == null) ? "" : title; //$NON-NLS-1$
}
}