// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.core.ui.editor.properties.connections;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
import org.talend.core.model.metadata.IMetadataTable;
import org.talend.core.model.metadata.editor.MetadataTableEditor;
import org.talend.core.model.process.EComponentCategory;
import org.talend.core.model.process.EConnectionType;
import org.talend.core.model.process.EParameterFieldType;
import org.talend.core.model.process.Element;
import org.talend.core.model.process.IConnectionCategory;
import org.talend.core.model.process.IElementParameter;
import org.talend.core.ui.metadata.dialog.CustomTableManager;
import org.talend.core.ui.metadata.dialog.MetadataDialog;
import org.talend.core.ui.metadata.editor.MetadataTableEditorView;
import org.talend.designer.core.ui.editor.connections.Connection;
import org.talend.designer.core.ui.editor.properties.controllers.AbstractElementPropertySectionController;
import org.talend.designer.core.ui.views.properties.MultipleThreadDynamicComposite;
/**
* DOC yzhang class global comment. Detailled comment <br/>
*
* $Id: talend.epf 1 2006-09-29 17:06:40Z nrousseau $
*
*/
public class MainConnectionComposite extends MultipleThreadDynamicComposite {
private MetadataTableEditorView metadataTableEditorView;
private MetadataTableEditor metadataTableEditor;
public MainConnectionComposite(Composite parentComposite, int styles, EComponentCategory section, Element element) {
super(parentComposite, styles, section, element, true);
}
@Override
public void addComponents(boolean forceRedraw) {
if (conSchema()) {
disposeChildren();
curRowSize = 0;
List<? extends IElementParameter> listParam = ((Connection) elem).getSource().getElementParameters();
generator.initController(this);
for (IElementParameter cur : listParam) {
if (cur.getCategory() == this.section) {
if ((cur.getFieldType() == EParameterFieldType.SCHEMA_TYPE)
&& (cur.getContext().equals(((Connection) elem).getConnectorName()))) {
AbstractElementPropertySectionController contorller = generator.getController(
EParameterFieldType.SCHEMA_TYPE, this);
contorller.createControl(composite, cur, 1, 1, 0, null);
}
}
}
if (((Connection) elem).getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
FormData data = new FormData();
data.left = new FormAttachment(0, ITabbedPropertyConstants.HSPACE);
data.right = new FormAttachment(100, -ITabbedPropertyConstants.HSPACE);
data.top = new FormAttachment(0, curRowSize + ITabbedPropertyConstants.VSPACE);
data.width = 300; // to correct bug of table growing indefinitly
/*
* On windows it will adjust automatically the size depends the number of columns. Seems this system
* doesn't work on linux
*/
int tableHeight = 160;
data.height = tableHeight; // fix bug 3893.
IMetadataTable outputMetaTable = ((Connection) elem).getMetadataTable();
if (outputMetaTable != null && this.section == EComponentCategory.BASIC) {
// Composite compositeEditorView = new Composite(composite, SWT.BORDER);
// compositeEditorView.setLayoutData(data);
metadataTableEditor = new MetadataTableEditor(outputMetaTable, "Schema from " //$NON-NLS-1$
+ ((Connection) elem).getSource().getElementName() + " output "); //$NON-NLS-1$
metadataTableEditorView = new MetadataTableEditorView(composite, SWT.NONE, metadataTableEditor, true, false,
true, false);
MetadataDialog.initializeMetadataTableView(metadataTableEditorView, ((Connection) elem).getSource(),
outputMetaTable);
metadataTableEditorView.initGraphicComponents();
metadataTableEditorView.getExtendedTableViewer().setCommandStack(getCommandStack());
CustomTableManager.addCustomManagementToTable(metadataTableEditorView, true);
Composite compositeEditorView = metadataTableEditorView.getMainComposite();
compositeEditorView.setLayoutData(data);
// compositeEditorView.getParent().layout();
// Table table = metadataTableEditorView.getTable();
// int currentHeightEditor = table.getHeaderHeight() + outputMetaTable.getListColumns().size()
// * table.getItemHeight() + table.getItemHeight() + 50;
curRowSize = tableHeight + ITabbedPropertyConstants.VSPACE + curRowSize;
}
}
super.addComponents(forceRedraw, false, curRowSize);
} else if (conIf()) {
super.addComponents(forceRedraw);
} else if (resumingIf()) {
super.addComponents(forceRedraw);
} else {
disposeChildren();
}
}
private boolean conIf() {
Connection connection = (Connection) elem;
return (connection.getLineStyle() == EConnectionType.RUN_IF) || (connection.getLineStyle() == EConnectionType.ROUTE_WHEN)
|| (connection.getLineStyle() == EConnectionType.ITERATE) || (connection.getLineStyle() == EConnectionType.ROUTE_CATCH);
}
private boolean resumingIf() {
Connection connection = (Connection) elem;
return (connection.getLineStyle() == EConnectionType.ON_SUBJOB_OK)
|| (connection.getLineStyle() == EConnectionType.ON_SUBJOB_ERROR);
}
private boolean conSchema() {
Connection connection = (Connection) elem;
return connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA);
}
}