blob: bfe0d8732547fbe1ac18f065be395db4ec38e1b7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.section;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ComboDialogField;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IStringButtonAdapter;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.LayoutUtil;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringButtonDialogField;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowElement;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowNode;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowPage;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.ActionOutcomeSelectionDialog;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.ITabbedPropertiesConstants;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.PropertyMessages;
import org.eclipse.jst.jsf.facesconfig.ui.util.WebrootUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* @author jchoi
* @version
*/
/*package*/ class LinkGroup extends AbstractEditPartGroup {
private StringButtonDialogField fromOutcomeField;
private StringDialogField fromActionField;
private ComboDialogField redirectField;
private PageflowLink pfLink;
/** Integer value for boolean type */
private static final Integer P_VALUE_TRUE = new Integer(0);
private static final Integer P_VALUE_FALSE = new Integer(1);
private class StringButtonAdapter implements IStringButtonAdapter {
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.IStringButtonAdapter#changeControlPressed(org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.DialogField)
*/
public void changeControlPressed(DialogField field) {
String outcome = ""; //$NON-NLS-1$
String jspPage = ""; //$NON-NLS-1$
Shell shell = field.getLabelControl(null, null).getShell();
if (pfLink != null) {
outcome = pfLink.getOutcome();
jspPage = WebrootUtil.getProjectPath(pfLink,
getPreviousJSPPath(pfLink));
ActionOutcomeSelectionDialog actionDialog = new ActionOutcomeSelectionDialog(
shell, outcome, jspPage);
if (actionDialog.open() == Window.OK) {
outcome = actionDialog.getSelectedAction();
fromOutcomeField.setText(outcome);
pfLink.setOutcome(outcome);
refreshData();
}
}
}
/**
* @param _element
* @return
*/
private String getPreviousJSPPath(PageflowElement element) {
String jspPath = null;
if (element instanceof PageflowLink) {
PageflowNode source = ((PageflowLink) element).getSource();
if (source instanceof PageflowPage) {
jspPath = ((PageflowPage) source).getPath();
}
}
return jspPath;
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.DialogFieldGroup#initialize()
*/
public void initialize() {
fromOutcomeField = new StringButtonDialogField(
new StringButtonAdapter());
fromOutcomeField.setLabelText(PropertyMessages.property_fromOutcome);
fromOutcomeField.setButtonLabel(PropertyMessages.property_browseButton);
fromOutcomeField
.setDialogFieldChangeListener(getDefaultChangeListener());
fromActionField = new StringDialogField();
fromActionField.setLabelText(PropertyMessages.property_fromAction);
fromActionField
.setDialogFieldChangeListener(getDefaultChangeListener());
redirectField = new ComboDialogField(SWT.DROP_DOWN | SWT.READ_ONLY);
redirectField.setLabelText(PropertyMessages.property_redirect);
redirectField
.setDialogFieldChangeListener((getDefaultChangeListener()));
List redirectList;
redirectList = new ArrayList();
redirectList.add(Boolean.TRUE.toString());
redirectList.add(Boolean.FALSE.toString());
redirectField.setItems((String[]) redirectList.toArray(new String[0]));
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.DialogFieldGroup#refreshData()
*/
public void refreshData() {
if (pfLink != null) {
fromOutcomeField.setTextWithoutUpdate(pfLink.getOutcome());
fromActionField.setTextWithoutUpdate(pfLink.getFromaction());
if (pfLink.isRedirect()) {
redirectField.setTextWithoutUpdate(Boolean.TRUE.toString());
} else {
redirectField.setTextWithoutUpdate(Boolean.FALSE.toString());
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.DialogFieldGroup#layoutDialogFields(org.eclipse.ui.forms.widgets.FormToolkit,
* org.eclipse.swt.widgets.Composite)
*/
public void layoutDialogFields(FormToolkit toolkit, Composite parent) {
Composite top;
if (toolkit == null) {
top = new Composite(parent, SWT.NONE);
} else {
top = toolkit.createComposite(parent);
}
FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
parent.setLayout(fillLayout);
int numberOfColumns = 4;
GridLayout layout = new GridLayout(numberOfColumns, false);
top.setLayout(layout);
fromActionField.doFillIntoGrid(toolkit, top, numberOfColumns);
fromOutcomeField.doFillIntoGrid(toolkit, top, numberOfColumns);
redirectField.doFillIntoGrid(toolkit, top, numberOfColumns);
LayoutUtil.setHorizontalGrabbing(fromOutcomeField.getTextControl(
toolkit, top));
GridData data = new GridData();
data.widthHint = ITabbedPropertiesConstants.BROWSE_WIDTH;
data.heightHint = ITabbedPropertiesConstants.BROWSE_HEIGHT;
fromOutcomeField.getChangeControl(toolkit, top).setLayoutData(data);
}
/**
* @param elem
*/
public void setPropertyProvider(PageflowLink elem) {
pfLink = elem;
this.refreshData();
}
/**
* @return the outcome field
*/
public StringButtonDialogField getFromOutcomeField() {
return fromOutcomeField;
}
/**
* @return the fromAction field
*/
public StringDialogField getFromActionField() {
return fromActionField;
}
/**
* @return the redirect field
*/
public ComboDialogField getRedirectField() {
return redirectField;
}
/**
* @return the redirect value
*/
public Integer getRedirectValue() {
if (redirectField.getText().equalsIgnoreCase(Boolean.TRUE.toString())) {
return LinkGroup.P_VALUE_TRUE;
}
return LinkGroup.P_VALUE_FALSE;
}
}