// ============================================================================
//
// 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.dialog;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.IRepositoryObject;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.model.IRepositoryNode.EProperties;
/**
* DOC wchen class global comment. Detailled comment
*/
public class PastSelectorDialog extends Dialog {
private List<IRepositoryViewObject> versions;
private Set<IRepositoryViewObject> selectedVersionItems = new HashSet<IRepositoryViewObject>();
private Table table;
private RepositoryNode sourceNode;
private Button selectAll;
private Button selectNone;
/**
* DOC talend PastSelectorDialog constructor comment.
*
* @param parentShell
*/
public PastSelectorDialog(Shell parentShell, List<IRepositoryViewObject> versions, RepositoryNode sourceNode) {
super(parentShell);
setShellStyle(getShellStyle() | SWT.RESIZE);
this.versions = versions;
this.sourceNode = sourceNode;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(sourceNode.getProperties(EProperties.LABEL) + " " + sourceNode.getObject().getVersion()
+ " - Version list");
newShell.setSize(600, 300);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
table = new Table(composite, SWT.NONE | SWT.CHECK);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn version = new TableColumn(table, SWT.NONE);
version.setWidth(100);
version.setText("Version");
TableColumn cretationTime = new TableColumn(table, SWT.NONE);
cretationTime.setWidth(200);
cretationTime.setText("Creation Time");
TableColumn modificationTime = new TableColumn(table, SWT.NONE);
modificationTime.setWidth(200);
modificationTime.setText("Modification Time");
for (IRepositoryViewObject object : versions) {
// if (object.getVersion().equals(sourceNode.getObject().getVersion())) {
// continue;
// }
TableItem item = new TableItem(table, SWT.NONE);
item.setData(object);
item.setText(0, object.getVersion());
item.setText(1, object.getCreationDate().toString());
if (object.getModificationDate() != null) {
item.setText(2, object.getModificationDate().toString());
}
}
Composite buttonContainer = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
buttonContainer.setLayout(layout);
buttonContainer.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
selectAll = new Button(buttonContainer, SWT.PUSH);
selectAll.setText("Select All");
selectNone = new Button(buttonContainer, SWT.PUSH);
selectNone.setText("Select None");
table.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (e.detail == SWT.CHECK) {
TableItem tableItem = (TableItem) e.item;
Property property = ((IRepositoryObject) tableItem.getData()).getProperty();
if (property != null && property.getItem() != null) {
if (tableItem.getChecked()) {
// selectedVersionItems.add(property.getItem());
selectedVersionItems.add((IRepositoryObject) tableItem.getData());
} else {
// selectedVersionItems.remove(property.getItem());
selectedVersionItems.remove(tableItem.getData());
}
}
}
checkSelectedItems();
}
});
selectAll.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
for (int i = 0; i < table.getItemCount(); i++) {
table.getItem(i).setChecked(true);
IRepositoryObject data = (IRepositoryObject) table.getItem(i).getData();
selectedVersionItems.add(data);
}
checkSelectedItems();
}
});
selectNone.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
for (int i = 0; i < table.getItemCount(); i++) {
table.getItem(i).setChecked(false);
selectedVersionItems.remove(table.getItem(i).getData());
}
checkSelectedItems();
}
});
return composite;
}
public Set<IRepositoryViewObject> getSelectedVersionItems() {
return this.selectedVersionItems;
}
private void checkSelectedItems() {
this.getOKButton().setEnabled(!selectedVersionItems.isEmpty());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
this.getOKButton().setEnabled(false);
}
}