/*******************************************************************************
* 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 org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.jboss.tools.common.meta.action.impl.SpecialWizardSupport;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.files.handlers.CreateFileSupport;
import org.jboss.tools.common.model.filesystems.FileSystemsHelper;
import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
public abstract class NewFileContextEx extends NewFileContext {
protected SpecialWizardSupport createSupport() {
CreateFileSupport support = new CreateFileSupport();
return support;
}
/*
* Method must be overriden
*/
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;
}
folder = EclipseResourceUtil.getObjectByResource(resource);
if(folder == null) {
folder = EclipseResourceUtil.createObjectForResource(resource);
}
if(folder != null) {
XModel model = folder.getModel();
if(folder.getFileType() > XModelObject.FILE) {
} else if(folder.getFileType() == XModelObject.NONE) {
if(folder == FileSystemsHelper.getFileSystems(model) && resource != null && resource == resource.getProject()) {
folder = EclipseResourceUtil.findFileSystem(resource, folder.getModel());
if(folder == null) folder = getDefaultFolder(model);
} else {
folder = FileSystemsHelper.getWebInf(model);
}
} else if(folder.getFileType() == XModelObject.FILE) {
folder = folder.getParent();
}
}
if(!(folder instanceof FolderImpl)) folder = null;
if(folder == null) {
errorMesage = "Cannot find resource " + resource.getLocation().toString();
} else {
support.setActionData(action, action.getEntityData(folder), folder, null);
}
}
protected XModelObject getDefaultFolder(XModel model) {
return FileSystemsHelper.getWebInf(model);
}
}