blob: d4bb18dcfe9d7d173ec21349998034bebbdf8485 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 IBM Corporation 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:
* IBM Corporation - initial API and implementation
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20100303 291954 kchong@ca.ibm.com - Keith Chong, JAX-RS: Implement JAX-RS Facet
* 20100428 310905 ericdp@ca.ibm.com - Eric D. Peters, JAX-RS facet fails to install due to NPE or runtime exception due to duplicate cp entries
*******************************************************************************/
package org.eclipse.jst.ws.jaxrs.ui.internal.project.facet;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.ws.jaxrs.core.internal.project.facet.IJAXRSFacetInstallDataModelProperties;
import org.eclipse.jst.ws.jaxrs.ui.internal.Messages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
public class ServletInformationGroup extends Composite {
private Group servletInfo;
private Label lblJAXRSServletName;
public Text txtJAXRSServletName;
private Label lblJAXRSServletClassName;
public Text txtJAXRSServletClassName;
private Label lblJAXRSServletURLPatterns;
public List lstJAXRSServletURLPatterns;
public Button btnAddPattern;
public Button btnRemovePattern;
private IDataModel optionalModel;
private IDialogSettings dialogSettings;
private IDataModel webAppDataModel;
private String sEARProject = null;
private String sWEBProject = null;
private String sTargetRuntime = null;
private boolean bAddToEAR = false;
private static final String SETTINGS_SERVLET = "servletName"; //$NON-NLS-1$
private static final String SETTINGS_SERVLET_CLASSNAME = "servletClassname"; //$NON-NLS-1$
private static final String SETTINGS_URL_MAPPINGS = "urlMappings"; //$NON-NLS-1$
private static final String SETTINGS_URL_PATTERN = "pattern"; //$NON-NLS-1$
// private Composite composite = null;
public ServletInformationGroup(Composite parent, int style) {
super(parent, style);
GridLayout gridLayout = new GridLayout(1, true);
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
gridLayout.verticalSpacing = 0;
gridLayout.horizontalSpacing = 0;
setLayout(gridLayout);
setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
servletInfo = new Group(this, SWT.NONE);
GridData servletGD = new GridData(GridData.FILL_HORIZONTAL);
servletInfo.setLayoutData(servletGD);
servletInfo.setLayout(new GridLayout(3, false));
servletInfo.setText(Messages.JAXRSFacetInstallPage_JAXRSServletLabel);
lblJAXRSServletName = new Label(servletInfo, SWT.NONE);
lblJAXRSServletName
.setText(Messages.JAXRSFacetInstallPage_JAXRSServletNameLabel);
lblJAXRSServletName.setLayoutData(new GridData(GridData.BEGINNING));
txtJAXRSServletName = new Text(servletInfo, SWT.BORDER);
GridData gd2 = new GridData(GridData.FILL_HORIZONTAL);
gd2.horizontalSpan = 2;
txtJAXRSServletName.setLayoutData(gd2);
lblJAXRSServletClassName = new Label(servletInfo, SWT.NONE);
lblJAXRSServletClassName
.setText(Messages.JAXRSFacetInstallPage_JAXRSServletClassNameLabel);
lblJAXRSServletClassName
.setLayoutData(new GridData(GridData.BEGINNING));
txtJAXRSServletClassName = new Text(servletInfo, SWT.BORDER);
GridData gd2c = new GridData(GridData.FILL_HORIZONTAL);
gd2c.horizontalSpan = 2;
txtJAXRSServletClassName.setLayoutData(gd2c);
lblJAXRSServletURLPatterns = new Label(servletInfo, SWT.NULL);
lblJAXRSServletURLPatterns
.setText(Messages.JAXRSFacetInstallPage_JAXRSURLMappingLabel);
lblJAXRSServletURLPatterns.setLayoutData(new GridData(
GridData.BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
lstJAXRSServletURLPatterns = new List(servletInfo, SWT.BORDER);
GridData gd3 = new GridData(GridData.FILL_BOTH);
// gd3.heightHint = convertHeightInCharsToPixels(5);
lstJAXRSServletURLPatterns.setLayoutData(gd3);
lstJAXRSServletURLPatterns.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
btnRemovePattern.setEnabled(lstJAXRSServletURLPatterns
.getSelectionCount() > 0);
}
});
Composite btnComposite = new Composite(servletInfo, SWT.NONE);
GridLayout gl = new GridLayout(1, false);
gl.marginLeft = 0;
btnComposite.setLayout(gl);
btnComposite.setLayoutData(new GridData(GridData.END
| GridData.VERTICAL_ALIGN_FILL));
btnAddPattern = new Button(btnComposite, SWT.NONE);
btnAddPattern.setText(Messages.JAXRSFacetInstallPage_Add2);
btnAddPattern.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
| GridData.VERTICAL_ALIGN_BEGINNING));
btnAddPattern.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
InputDialog dialog = new InputDialog(getShell(),
Messages.JAXRSFacetInstallPage_PatternDialogTitle,
Messages.JAXRSFacetInstallPage_PatternDialogDesc, null,
new IInputValidator() {
public String isValid(String newText) {
return isValidPattern(newText);
}
});
dialog.open();
if (dialog.getReturnCode() == Window.OK) {
addItemToList(dialog.getValue(), true);
}
}
});
btnRemovePattern = new Button(btnComposite, SWT.NONE);
btnRemovePattern.setText(Messages.JAXRSFacetInstallPage_Remove);
btnRemovePattern.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
| GridData.VERTICAL_ALIGN_BEGINNING));
btnRemovePattern.setEnabled(false);
btnRemovePattern.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
removeItemFromList(lstJAXRSServletURLPatterns.getSelection());
btnRemovePattern.setEnabled(false);
}
});
}
private String isValidPattern(String value) {
if (value == null || value.trim().equals("")) //$NON-NLS-1$
return Messages.JAXRSFacetInstallPage_PatternEmptyMsg;
if (lstJAXRSServletURLPatterns.indexOf(value) >= 0)
return Messages.JAXRSFacetInstallPage_PatternSpecifiedMsg;
return null;
}
private void addItemToList(String pattern, boolean selectMe) {
lstJAXRSServletURLPatterns.add(pattern == null ? "" : pattern); //$NON-NLS-1$
if (pattern == null && selectMe)
lstJAXRSServletURLPatterns.setSelection(lstJAXRSServletURLPatterns
.getItemCount() - 1);
// When 119321 is fixed - remove code below
updateModelForURLPattern();
}
private void updateModelForURLPattern() {
if (optionalModel != null)
optionalModel.setProperty(
IJAXRSFacetInstallDataModelProperties.SERVLET_URL_PATTERNS,
lstJAXRSServletURLPatterns.getItems());
}
private void removeItemFromList(String[] selection) {
for (int i = 0; i < selection.length; i++) {
String sel = selection[i];
lstJAXRSServletURLPatterns.remove(sel);
}
// When 119321 is fixed - remove code below
updateModelForURLPattern();
}
public void setDataModel(IDataModel model)
{
this.optionalModel = model;
}
public void setFieldsEnabled(boolean selection) {
btnAddPattern.setEnabled(selection);
btnRemovePattern.setEnabled(selection);
txtJAXRSServletClassName.setEnabled(selection);
txtJAXRSServletName.setEnabled(selection);
lblJAXRSServletClassName.setEnabled(selection);
lblJAXRSServletName.setEnabled(selection);
lblJAXRSServletURLPatterns.setEnabled(selection);
lstJAXRSServletURLPatterns.setEnabled(selection);
}
}