blob: 2d1fe5996471c3e86ecc808b5fd6f40ea7e56489 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Angelo Zerr 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:
* Angelo Zerr <angelo.zerr@gmail.com> - Initial API and implementation
*******************************************************************************/
package org.eclipse.jst.server.jetty.ui.websocket.internal.wizard;
import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.PROJECT;
import static org.eclipse.jst.j2ee.internal.web.operations.INewServletClassDataModelProperties.IS_SERVLET_TYPE;
import static org.eclipse.jst.j2ee.internal.web.operations.INewWebClassDataModelProperties.USE_EXISTING_CLASS;
import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.CHOOSE_SERVLET_CLASS;
import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.NEW_SERVLET_WIZARD_WINDOW_TITLE;
import static org.eclipse.jst.servlet.ui.internal.wizard.IWebWizardConstants.USE_EXISTING_SERVLET_CLASS;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IType;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.j2ee.internal.war.ui.util.WebServletGroupItemProvider;
import org.eclipse.jst.j2ee.webapplication.WebApp;
import org.eclipse.jst.jee.ui.internal.navigator.web.GroupServletItemProvider;
import org.eclipse.jst.jee.ui.internal.navigator.web.WebAppProvider;
import org.eclipse.jst.servlet.ui.internal.wizard.MultiSelectFilteredFileSelectionDialog;
import org.eclipse.jst.servlet.ui.internal.wizard.NewWebClassWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
public class NewWebSocketServletClassWizardPage extends NewWebClassWizardPage
{
private final static String[] JSPEXTENSIONS =
{ "jsp" }; //$NON-NLS-1$
public NewWebSocketServletClassWizardPage(IDataModel model, String pageName, String pageDesc, String pageTitle, String moduleType)
{
super(model,pageName,pageDesc,pageTitle,moduleType);
}
@Override
protected String getUseExistingCheckboxText()
{
return USE_EXISTING_SERVLET_CLASS;
}
@Override
protected String getUseExistingProperty()
{
return USE_EXISTING_CLASS;
}
@Override
protected IProject getExtendedSelectedProject(Object selection)
{
if (selection instanceof WebServletGroupItemProvider)
{
WebApp webApp = (WebApp)((WebServletGroupItemProvider)selection).getParent();
return ProjectUtilities.getProject(webApp);
}
else if (selection instanceof WebAppProvider)
{
return ((WebAppProvider)selection).getProject();
}
else if (selection instanceof GroupServletItemProvider)
{
org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp)((GroupServletItemProvider)selection).getJavaEEObject();
return ProjectUtilities.getProject(webApp);
}
return super.getExtendedSelectedProject(selection);
}
@Override
protected void handleClassButtonSelected()
{
getControl().setCursor(new Cursor(getShell().getDisplay(),SWT.CURSOR_WAIT));
try
{
IProject project = (IProject)model.getProperty(PROJECT);
if (project == null)
{
// show info message
return;
}
IVirtualComponent component = ComponentCore.createComponent(project);
MultiSelectFilteredFileSelectionDialog ms = new MultiSelectFilteredFileSelectionDialog(getShell(),NEW_SERVLET_WIZARD_WINDOW_TITLE,
CHOOSE_SERVLET_CLASS,JSPEXTENSIONS,false,project);
IContainer root = component.getRootFolder().getUnderlyingFolder();
ms.setInput(root);
ms.open();
if (ms.getReturnCode() == Window.OK)
{
String qualifiedClassName = ""; //$NON-NLS-1$
if (ms.getSelectedItem() == MultiSelectFilteredFileSelectionDialog.JSP)
{
Object obj = ms.getFirstResult();
if (obj != null)
{
if (obj instanceof IFile)
{
IFile file = (IFile)obj;
IPath pFull = file.getFullPath();
IPath pBase = root.getFullPath();
IPath path = pFull.removeFirstSegments(pBase.segmentCount());
qualifiedClassName = path.makeAbsolute().toString();
model.setProperty(IS_SERVLET_TYPE, Boolean.valueOf(false));
}
}
}
else
{
IType type = (IType)ms.getFirstResult();
if (type != null)
{
qualifiedClassName = type.getFullyQualifiedName();
model.setProperty(IS_SERVLET_TYPE,new Boolean(true));
}
}
existingClassText.setText(qualifiedClassName);
}
}
finally
{
getControl().setCursor(null);
}
}
@Override
protected Composite createTopLevelComposite(Composite parent)
{
Composite composite = super.createTopLevelComposite(parent);
Object obj = getSelectedObject();
if (isServlet(obj))
{
checkExistingButton(true);
if (isServletJSP(obj))
{
existingClassText.setText(getServletJSPFile(obj));
model.setBooleanProperty(IS_SERVLET_TYPE,false);
}
else
{
existingClassText.setText(getServletClass(obj));
model.setBooleanProperty(IS_SERVLET_TYPE,true);
}
}
else if (isJSP(obj))
{
checkExistingButton(true);
existingClassText.setText(getWebResourcePath((IResource)obj));
model.setBooleanProperty(IS_SERVLET_TYPE,false);
}
return composite;
}
}