// ============================================================================
//
// 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.repository.ui.login.connections;
import java.util.List;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.talend.commons.ui.runtime.image.EImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.ui.swt.advanced.dataeditor.AbstractDataTableEditorView;
import org.talend.commons.ui.swt.advanced.dataeditor.ExtendedToolbarView;
import org.talend.commons.ui.swt.extended.table.ExtendedTableModel;
import org.talend.commons.ui.swt.tableviewer.TableViewerCreator;
import org.talend.commons.ui.swt.tableviewer.TableViewerCreatorColumn;
import org.talend.commons.ui.swt.tableviewer.behavior.IColumnImageProvider;
import org.talend.commons.ui.swt.tableviewer.selection.ILineSelectionListener;
import org.talend.commons.ui.swt.tableviewer.selection.LineSelectionEvent;
import org.talend.commons.utils.data.bean.IBeanPropertyAccessors;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.model.general.ConnectionBean;
import org.talend.core.ui.branding.IBrandingService;
import org.talend.repository.i18n.Messages;
/**
* DOC smallet class global comment. Detailled comment <br/>
*
* $Id: talend.epf 1 2006-09-29 17:06:40 +0000 (ven., 29 sept. 2006) nrousseau $
*
*/
public class ConnectionsListComposite extends Composite {
private FormToolkit toolkit;
private AbstractDataTableEditorView<ConnectionBean> table;
private ConnectionFormComposite connectionsFormComposite;
private List<ConnectionBean> list;
private ExtendedTableModel<ConnectionBean> model;
private IBrandingService brandingService = (IBrandingService) GlobalServiceRegister.getDefault().getService(
IBrandingService.class);
/**
* DOC smallet ConnectionsComposite constructor comment.
*
* @param parent
* @param style
*/
public ConnectionsListComposite(Composite parent, int style) {
super(parent, style);
// PreferenceManipulator prefManipulator = new
// PreferenceManipulator(CorePlugin.getDefault().getPreferenceStore());
// list = prefManipulator.readConnections();
list = ConnectionUserPerReader.getInstance().readConnections();
if (list.isEmpty()) {
boolean isOnlyRemoteConnection = brandingService.getBrandingConfiguration().isOnlyRemoteConnection();
if (!isOnlyRemoteConnection) {
list.add(ConnectionBean.getDefaultConnectionBean());
} else {
list.add(ConnectionBean.getDefaultRemoteConnectionBean());
}
}
model = new ExtendedTableModel<ConnectionBean>(null, list);
toolkit = new FormToolkit(getDisplay());
Form form = toolkit.createForm(this);
Composite formBody = form.getBody();
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
setLayout(layout);
form.setLayoutData(new GridData(GridData.FILL_BOTH));
FormLayout formLayout = new FormLayout();
formBody.setLayout(formLayout);
Group group = new Group(formBody, SWT.NONE);
group.setText(Messages.getString("ConnectionsListComposite.groupText.connection")); //$NON-NLS-1$
group.setBackground(formBody.getBackground());
FormData data = new FormData();
data.left = new FormAttachment(0, ConnectionsDialog.HSPACE);
data.right = new FormAttachment(100, -ConnectionsDialog.HSPACE);
data.top = new FormAttachment(0, ConnectionsDialog.VSPACE);
data.bottom = new FormAttachment(100, -ConnectionsDialog.VSPACE);
group.setLayoutData(data);
group.setLayout(new FillLayout());
table = new AbstractDataTableEditorView<ConnectionBean>(group, SWT.NONE, model, false, true, false) {
@Override
protected void setTableViewerCreatorOptions(TableViewerCreator<ConnectionBean> newTableViewerCreator) {
super.setTableViewerCreatorOptions(newTableViewerCreator);
newTableViewerCreator.setHeaderVisible(false);
newTableViewerCreator.setVerticalScroll(true);
newTableViewerCreator.setReadOnly(true);
}
@Override
protected ExtendedToolbarView initToolBar() {
return new ConnectionsListButtonsToolBar(getMainComposite(), SWT.NONE, getExtendedTableViewer());
}
@Override
protected void createColumns(TableViewerCreator<ConnectionBean> tableViewerCreator, Table table) {
TableViewerCreatorColumn nameColumn = new TableViewerCreatorColumn(tableViewerCreator);
nameColumn.setTitle(Messages.getString("ConnectionsListComposite.nameColumnTitle.name")); //$NON-NLS-1$
nameColumn.setBeanPropertyAccessors(new IBeanPropertyAccessors<ConnectionBean, String>() {
public String get(ConnectionBean bean) {
return bean.getName();
}
public void set(ConnectionBean bean, String value) {
bean.setName(value);
}
});
nameColumn.setWeight(20);
nameColumn.setModifiable(!isReadOnly());
nameColumn.setMinimumWidth(20);
nameColumn.setCellEditor(new TextCellEditor(tableViewerCreator.getTable()));
TableViewerCreatorColumn completeColumn = new TableViewerCreatorColumn(tableViewerCreator);
completeColumn.setTitle(Messages.getString("ConnectionsListComposite.comleteColumnTitle.complete")); //$NON-NLS-1$
completeColumn.setBeanPropertyAccessors(new IBeanPropertyAccessors<ConnectionBean, Boolean>() {
public Boolean get(ConnectionBean bean) {
return bean.isComplete();
}
public void set(ConnectionBean bean, Boolean value) {
bean.setComplete(value);
}
});
completeColumn.setWeight(5);
completeColumn.setModifiable(false);
completeColumn.setMinimumWidth(5);
completeColumn.setImageProvider(new StatusImageProvider());
completeColumn.setDisplayedValue(""); //$NON-NLS-1$
// CheckboxTableEditorContent checkboxTableEditorContent = new CheckboxTableEditorContent();
// comleteColumn.setTableEditorContent(checkboxTableEditorContent);
// completeColumn.setCellEditor(new TextCellEditor(tableViewerCreator.getTable()));
}
};
addListeners();
}
private void addListeners() {
}
public ConnectionFormComposite getConnectionsFormComposite() {
return connectionsFormComposite;
}
public void setConnectionsFormComposite(ConnectionFormComposite connectionsFormComposite) {
this.connectionsFormComposite = connectionsFormComposite;
table.getTableViewerCreator().getSelectionHelper().addAfterSelectionListener(new ILineSelectionListener() {
public void handle(LineSelectionEvent e) {
ISelection sel = e.source.getTableViewer().getSelection();
IStructuredSelection sel2 = (IStructuredSelection) sel;
ConnectionBean selected = (ConnectionBean) sel2.getFirstElement();
setSelectedConnection(selected);
}
});
if (!list.isEmpty()) {
setSelectedConnection(list.get(0));
}
}
private void setSelectedConnection(ConnectionBean selected) {
connectionsFormComposite.setConnection(selected);
}
public void refresh(ConnectionBean toRefresh) {
table.getTableViewerCreator().getTableViewer().refresh(toRefresh);
table.getTableViewerCreator().refreshTableEditorControls();
}
public List<ConnectionBean> getList() {
return list;
}
/**
* Manage ok/nok image in second column to show is the connection is complete/uncomplete.
*/
private class StatusImageProvider implements IColumnImageProvider {
public Image getImage(Object bean) {
ConnectionBean connectionBean = (ConnectionBean) bean;
if (connectionBean.isComplete()) {
return ImageProvider.getImage(EImage.OK);
} else {
return ImageProvider.getImage(EImage.ERROR_ICON);
}
}
}
}