/*******************************************************************************
* 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.jsf.ui.editor.form;
import org.jboss.tools.common.model.ui.attribute.XAttributeSupport;
import org.jboss.tools.common.model.ui.attribute.adapter.XChildrenTableStructuredAdapter;
import org.jboss.tools.common.model.ui.attribute.editor.IFieldEditor;
import org.jboss.tools.common.model.ui.attribute.editor.IPropertyEditor;
import org.jboss.tools.common.model.ui.attribute.editor.JavaHyperlinkLineFieldEditor;
import org.jboss.tools.common.model.ui.attribute.editor.TableStructuredEditor;
import org.jboss.tools.common.model.ui.attribute.editor.TableStructuredFieldEditor;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.jsf.ui.JsfUiPlugin;
import org.jboss.tools.jsf.ui.editor.FacesConfigEditorMessages;
import org.jboss.tools.common.model.ui.forms.ExpandableForm;
import org.jboss.tools.common.model.ui.widgets.IWidgetSettings;
import org.jboss.tools.common.model.ui.widgets.WhiteSettings;
/**
* @author igels
*
*/
public class ListEntries extends ExpandableForm {
private XAttributeSupport support;
private XModelObject xmo;
private TableStructuredEditor tableEditor;
private XChildrenTableStructuredAdapter tableAdapter;
private IPropertyEditor valueClass;
private IWidgetSettings settings = WhiteSettings.getWhite();
public ListEntries() {
support = new XAttributeSupport(settings);
this.setCollapsable(Boolean.TRUE.booleanValue());
}
public void dispose() {
super.dispose();
if (support != null)
support.dispose();
support = null;
if (tableEditor != null)
tableEditor.dispose();
tableEditor = null;
if (tableAdapter != null)
tableAdapter.dispose();
tableAdapter = null;
}
protected Control createClientArea(Composite parent,
IWidgetSettings settings) {
Composite composite = new Composite(parent, SWT.NONE);
settings.setupControl(composite);
GridLayout layout = new GridLayout(2, Boolean.FALSE.booleanValue());
layout.horizontalSpacing = 5;
layout.verticalSpacing = 5;
layout.marginHeight = 5;
layout.marginWidth = 5;
composite.setLayout(layout);
Control[] control;
GridData gd;
String description = FacesConfigEditorMessages.LISTENTRIESFORM_DESCRIPTION;
if (description != null && description.length() > 0) {
Label label = new Label(composite, SWT.WRAP);
settings.setupControl(label);
label.setText(description);
gd = new GridData();
gd.horizontalSpan = 2;
label.setLayoutData(gd);
}
if (xmo == null)
return composite;
if (valueClass != null)
putFieldEditorInToComposit(composite, valueClass);
TableStructuredFieldEditor tbEd = (TableStructuredFieldEditor) tableEditor
.getFieldEditor(composite);
control = ((IFieldEditor) tbEd).getControls(composite);
tbEd.getTableViewer().setLabelProvider(new XMOTableLabelProvider());
control[0].dispose(); // cannot show label
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
control[1].setLayoutData(gd);
return composite;
}
private void putFieldEditorInToComposit(Composite composite,
IPropertyEditor propertyEditor) {
if (propertyEditor != null) {
JavaHyperlinkLineFieldEditor sb = new JavaHyperlinkLineFieldEditor(
settings);
sb.setLabelText(propertyEditor.getLabelText());
sb.setPropertyEditor(propertyEditor);
sb.fillIntoGrid(composite, 2);
support.registerFieldEditor(propertyEditor.getAttributeName(), sb);
}
}
public void initialize(Object model) {
this.setHeadingText(FacesConfigEditorMessages.LISTENTRIESFORM_HEADER);
this.xmo = (XModelObject) model;
if (xmo == null) {
JsfUiPlugin.getPluginLog().logInfo(
"Error to create form " //$NON-NLS-1$
+ FacesConfigEditorMessages.APPLICATIONCONFIGFORM_HEADER
+ ". Model object cannot be null.", new Exception()); //$NON-NLS-1$
return;
}
this.model = xmo.getModel();
this.support.init(xmo);
this.support.setAutoStore(Boolean.TRUE.booleanValue());
valueClass = support.getPropertyEditorByName("value-class"); //$NON-NLS-1$
/* TRIAL_JSF */
this.tableAdapter = new XChildrenTableStructuredAdapter();
this.tableAdapter.setShownEntities(new String[] { "JSFListEntry" }); //$NON-NLS-1$
this.tableAdapter.getActionMapping().clear();
this.tableAdapter.getActionMapping().put(
TableStructuredEditor.ADD_ACTION, "CreateActions.AddEntry"); //$NON-NLS-1$
this.tableAdapter.getActionMapping().put(
TableStructuredEditor.REMOVE_ACTION, "DeleteActions.Delete"); //$NON-NLS-1$
this.tableAdapter.getActionMapping().put(
TableStructuredEditor.EDIT_ACTION, "Properties.Properties"); //$NON-NLS-1$
this.tableAdapter.getActionMapping().put(
TableStructuredEditor.UP_ACTION, "%internal%"); //$NON-NLS-1$
this.tableAdapter.getActionMapping().put(
TableStructuredEditor.DOWN_ACTION, "%internal%"); //$NON-NLS-1$
this.tableAdapter.setShownProperties(new String[] { "value" }); //$NON-NLS-1$
this.tableAdapter
.setColumnLabels(new String[] { FacesConfigEditorMessages.LISTENTRIESFORM_ENTRY_COLUMN_LABEL });
this.tableAdapter.setWidths(new int[] { 100 });
this.tableAdapter.setModelObject(xmo);
this.tableEditor = new TableStructuredEditor(settings);
this.tableEditor.setLabelText(""); //$NON-NLS-1$
this.tableEditor.setInput(this.tableAdapter);
}
public void update() {
if (support != null) {
support.load();
support.updateEnablementByModelObject();
}
}
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
if (support != null) {
support.updateEnablementByModelObject();
}
}
public class XMOTableLabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
XModelObject xmo = (XModelObject) element;
String value = xmo.getAttributeValue("null-value"); //$NON-NLS-1$
if ("true".equals(value)) { //$NON-NLS-1$
return "[null-value]"; //$NON-NLS-1$
}
return xmo.getAttributeValue("value"); //$NON-NLS-1$
}
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
}
/**
* @see org.jboss.tools.common.model.ui.forms.IForm#doGlobalAction(java.lang.String)
*/
public boolean doGlobalAction(String actionId) {
return support.doGlobalAction(actionId);
}
}