/*******************************************************************************
* 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.eclipse.jface.preference.FieldEditor;
import org.eclipse.swt.SWT;
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 ApplicationConfigForm extends ExpandableForm {
private XAttributeSupport support;
private XModelObject xmo;
private ChildTable messageBundleTable;
private ChildTable resourceBundleTable;
private IWidgetSettings settings = WhiteSettings.getWhite();
public ApplicationConfigForm() {
support = new XAttributeSupport(settings);
this.setCollapsable(Boolean.TRUE.booleanValue());
}
public void dispose() {
super.dispose();
if (support!=null) support.dispose();
support = null;
if(messageBundleTable != null) {
messageBundleTable.dispose();
messageBundleTable = null;
}
if(resourceBundleTable != null) {
resourceBundleTable.dispose();
resourceBundleTable = 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);
GridData gd;
String description = FacesConfigEditorMessages.APPLICATIONCONFIGFORM_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);
}
String[] attributes = new String[]{"action-listener", "navigation-handler", "view-handler", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"state-manager"}; //$NON-NLS-1$
if(xmo == null) return composite;
for (int i = 0; i < attributes.length; i++) {
IPropertyEditor editor = support.getPropertyEditorByName(attributes[i]);
putFieldEditorInToComposit(composite, editor);
}
IPropertyEditor editor = support.getPropertyEditorByName("default-render-kit-id"); //$NON-NLS-1$
FieldEditor f = editor.getFieldEditor(composite);
f.fillIntoGrid(composite, 2);
support.registerFieldEditor(editor.getAttributeName(), f);
if(messageBundleTable != null) messageBundleTable.fill(composite);
if(resourceBundleTable != null) resourceBundleTable.fill(composite);
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.APPLICATIONCONFIGFORM_HEADER);
if(model == null) {
JsfUiPlugin.getPluginLog().logInfo("Error to create form "+FacesConfigEditorMessages.APPLICATIONCONFIGFORM_HEADER +". Model object cannot be null.", new Exception()); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
this.xmo = ((XModelObject)model).getChildByPath("application"); //$NON-NLS-1$
if(xmo == null) {
JsfUiPlugin.getPluginLog().logInfo("Error to create form "+FacesConfigEditorMessages.APPLICATIONCONFIGFORM_HEADER+". Model object cannot be null.", new Exception()); //$NON-NLS-1$ //$NON-NLS-2$
return;
}
this.support.init(xmo);
this.support.setAutoStore(Boolean.TRUE.booleanValue());
messageBundleTable = new ChildTable();
messageBundleTable.create(
"JSFMessageBundle", //$NON-NLS-1$
new String[]{"message-bundle"}, //$NON-NLS-1$
new String[]{FacesConfigEditorMessages.APPLICATIONCONFIGFORM_MESSAGEBUNDLE_COLUMN_LABEL},
new int[]{100},
"CreateActions.AddMessageBundle"); //$NON-NLS-1$
if(xmo.getModelEntity().getChild("JSFResourceBundle") != null) { //$NON-NLS-1$
resourceBundleTable = new ChildTable();
resourceBundleTable.create(
"JSFResourceBundle", //$NON-NLS-1$
new String[]{"base-name", "var"}, //$NON-NLS-1$ //$NON-NLS-2$
new String[]{"Resource Bundle", "Var"}, //$NON-NLS-1$ //$NON-NLS-2$
new int[]{70, 30},
"CreateActions.AddResourceBundle"); //$NON-NLS-1$
}
/*TRIAL_JSF*/
}
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
if (this.support!=null) {
support.updateEnablementByModelObject();
}
}
private long timeStamp = -1;
public void update() {
long ts = (xmo == null) ? -1 : xmo.getTimeStamp();
if(ts == timeStamp) return;
timeStamp = ts;
if(support != null) {
support.load();
}
}
/*TRIAL_JSF_CLASS*/
public boolean doGlobalAction(String actionId) {
return support.doGlobalAction(actionId);
}
class ChildTable {
private TableStructuredEditor tableEditor;
private XChildrenTableStructuredAdapter tableAdapter;
void dispose() {
if (tableEditor!=null) tableEditor.dispose();
tableEditor = null;
if (tableAdapter!=null) tableAdapter.dispose();
tableAdapter = null;
}
public void create(String childEntity, String[] attributes, String[] attributeLabels, int[] widths, String createActionPath) {
tableAdapter = new XChildrenTableStructuredAdapter();
tableAdapter.setShownEntities(new String[]{childEntity});
tableAdapter.getActionMapping().clear();
tableAdapter.getActionMapping().put(TableStructuredEditor.ADD_ACTION, createActionPath);
tableAdapter.getActionMapping().put(TableStructuredEditor.REMOVE_ACTION, "DeleteActions.Delete"); //$NON-NLS-1$
tableAdapter.getActionMapping().put(TableStructuredEditor.EDIT_ACTION, "Properties.Properties"); //$NON-NLS-1$
tableAdapter.getActionMapping().put(TableStructuredEditor.UP_ACTION, "%internal%"); //$NON-NLS-1$
tableAdapter.getActionMapping().put(TableStructuredEditor.DOWN_ACTION, "%internal%"); //$NON-NLS-1$
tableAdapter.setShownProperties(attributes);
tableAdapter.setColumnLabels(attributeLabels);
tableAdapter.setWidths(widths);
tableAdapter.setModelObject(xmo);
tableEditor = new TableStructuredEditor(settings);
tableEditor.setLabelText(""); //$NON-NLS-1$
tableEditor.setInput(this.tableAdapter);
}
void fill(Composite composite) {
Control[] control = ((IFieldEditor)tableEditor.getFieldEditor(composite)).getControls(composite);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
control[1].setLayoutData(gd);
}
}
}