// ============================================================================ // // Copyright (C) 2006-2016 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.mdm.repository.ui.contributor; import java.text.SimpleDateFormat; import java.util.List; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; 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.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.talend.commons.exception.PersistenceException; import org.talend.core.model.properties.Project; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.RepositoryObject; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.mdm.repository.i18n.Messages; import org.talend.repository.ProjectManager; /** * DOC jsxie class global comment. Detailled comment */ public class ViewObjectPropertyVersionComposite extends Composite { protected TabbedPropertySheetWidgetFactory widgetFactory; protected IRepositoryViewObject repositoryObject; protected static final SimpleDateFormat FORMATTER = new SimpleDateFormat(); private ISelection selection; private TableViewer tableViewer; public IRepositoryViewObject getRepositoryObject() { return repositoryObject; } public void setRepositoryObject(IRepositoryViewObject repositoryObject) { this.repositoryObject = repositoryObject; } public ViewObjectPropertyVersionComposite(Composite parent, int style) { super(parent, style); this.widgetFactory = new TabbedPropertySheetWidgetFactory(); FormLayout layout = new FormLayout(); setLayout(layout); FormData thisFormData = new FormData(); thisFormData.left = new FormAttachment(0, 0); thisFormData.right = new FormAttachment(100, 0); thisFormData.top = new FormAttachment(0, 0); thisFormData.bottom = new FormAttachment(100, 0); setLayoutData(thisFormData); Composite composite = widgetFactory.createFlatFormComposite(this); composite.setLayoutData(thisFormData); tableViewer = new TableViewer(composite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); final Table table = tableViewer.getTable(); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); table.setHeaderVisible(true); table.setLinesVisible(true); final String[] columnProperties = new String[] { Messages.Property_version, Messages.Property_creationdate, Messages.Property_modifydate, Messages.Property_status }; final TableColumn column1 = new TableColumn(table, SWT.NONE); tableLayout.addColumnData(new ColumnPixelData(125, true)); column1.setText(columnProperties[0]); final TableColumn column2 = new TableColumn(table, SWT.NONE); tableLayout.addColumnData(new ColumnPixelData(125, true)); column2.setText(columnProperties[1]); final TableColumn column3 = new TableColumn(table, SWT.NONE); tableLayout.addColumnData(new ColumnPixelData(125, true)); column3.setText(columnProperties[2]); final TableColumn column4 = new TableColumn(table, SWT.NONE); tableLayout.addColumnData(new ColumnWeightData(1, 150, true)); column4.setText(columnProperties[3]); tableViewer.setColumnProperties(columnProperties); Object layoutData = parent.getLayoutData(); if (layoutData instanceof GridData) { GridData gridData = (GridData) layoutData; gridData.grabExcessVerticalSpace = true; gridData.verticalAlignment = SWT.FILL; } FormData formData = new FormData(); formData.left = new FormAttachment(0); formData.top = new FormAttachment(0); formData.right = new FormAttachment(100,0); formData.bottom = new FormAttachment(100,0); table.setLayoutData(formData); formData.height=80; tableViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { IRepositoryViewObject repositoryObject = ((IRepositoryViewObject) inputElement); if (repositoryObject.getProperty() == null) { return null; } try { Project project = ProjectManager.getInstance().getProject(repositoryObject.getProperty()); List<IRepositoryViewObject> allVersion = ProxyRepositoryFactory.getInstance().getAllVersion( new org.talend.core.model.general.Project(project), repositoryObject.getId(), repositoryObject.getProperty().getItem().getState().getPath(), ERepositoryObjectType.getItemType(repositoryObject.getProperty().getItem())); return allVersion.toArray(); } catch (PersistenceException e) { return null; } } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); tableViewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { RepositoryObject repositoryNode = (RepositoryObject) element; switch (columnIndex) { case 0: return repositoryNode.getVersion(); case 1: if (repositoryNode.getCreationDate() != null) { return FORMATTER.format(repositoryNode.getCreationDate()); } else { return null; } case 2: if (repositoryNode.getModificationDate() != null) { return FORMATTER.format(repositoryNode.getModificationDate()); } else { return null; } case 3: if (repositoryNode.getStatusCode() != null) { return repositoryNode.getStatusCode(); } else { return null; } default: return null; } } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); } public void setData() { if (tableViewer.getContentProvider() != null) { if (repositoryObject != null && repositoryObject.getProperty() != null) { tableViewer.setInput(repositoryObject); } else { tableViewer.setInput(null); } } } public void refresh() { Display.getDefault().syncExec(new Runnable() { public void run() { getParent().layout(); } }); } public ISelection getSelection() { return this.selection; } }