// ============================================================================
//
// 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 com.amalto.workbench.editors;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Image;
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.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.amalto.workbench.dialogs.DOMViewDialog;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.EImage;
import com.amalto.workbench.image.ImageCache;
import com.amalto.workbench.models.IXObjectModelListener;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.providers.XObjectBrowserInput;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSDataClusterPK;
import com.amalto.workbench.webservices.WSDroppedItem;
import com.amalto.workbench.webservices.WSDroppedItemPK;
import com.amalto.workbench.webservices.WSFindAllDroppedItemsPKs;
import com.amalto.workbench.webservices.WSItemPK;
import com.amalto.workbench.webservices.WSLoadDroppedItem;
import com.amalto.workbench.webservices.WSRecoverDroppedItem;
import com.amalto.workbench.webservices.WSRemoveDroppedItem;
import com.amalto.workbench.widgets.WidgetFactory;
public class ItemsTrashBrowserMainPage extends AMainPage implements IXObjectModelListener {
private static Log log = LogFactory.getLog(ItemsTrashBrowserMainPage.class);
protected static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");//$NON-NLS-1$
protected Text searchText;
protected TableViewer resultsViewer;
protected boolean[] ascending = { true, false, false, false, false };
public ItemsTrashBrowserMainPage(FormEditor editor) {
super(editor, ItemsTrashBrowserMainPage.class.getName(), Messages.ItemsTrashBrowserMainPage_0
+ ((XObjectBrowserInput) editor.getEditorInput()).getName());
// listen to events
((XObjectBrowserInput) editor.getEditorInput()).addListener(this);
}
@Override
protected void createCharacteristicsContent(FormToolkit toolkit, Composite charComposite) {
// Everything is implemented in createFormContent
}
@Override
protected void createFormContent(IManagedForm managedForm) {
try {
// sets the title
managedForm.getForm().setText(this.getTitle());
// get the toolkit
FormToolkit toolkit = managedForm.getToolkit();
// get the body
Composite composite = managedForm.getForm().getBody();
composite.setLayout(new GridLayout(9, false));
/***
* Search Text
*/
Label descriptionLabel = toolkit.createLabel(composite, Messages.ItemsTrashBrowserMainPage_1, SWT.NULL);
descriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
searchText = toolkit.createText(composite, "*", SWT.BORDER);//$NON-NLS-1$
searchText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
// searchText.addModifyListener(this);
searchText.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if ((e.stateMask == 0) && (e.character == SWT.CR)) {
ItemsTrashBrowserMainPage.this.resultsViewer.setInput(getResults(true));
ItemsTrashBrowserMainPage.this.resultsViewer.getTable().setFocus();
}
}// keyReleased
}// keyListener
);
// search
Button bSearch = toolkit.createButton(composite, "", SWT.CENTER);//$NON-NLS-1$
bSearch.setImage(ImageCache.getCreatedImage(EImage.BROWSE.getPath()));
bSearch.setToolTipText(Messages.ItemsTrashBrowserMainPage_2);
bSearch.setLayoutData(new GridData(SWT.NONE, SWT.CENTER, false, false, 1, 1));
bSearch.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
ItemsTrashBrowserMainPage.this.resultsViewer.setInput(getResults(true));
};
});
/***
* Create Table
*/
final Table table = createTable(composite);
resultsViewer = new TableViewer(table);
resultsViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 9, 1));
((GridData) resultsViewer.getControl().getLayoutData()).heightHint = 500;
resultsViewer.setContentProvider(new ArrayContentProvider());
resultsViewer.setLabelProvider(new ClusterTableLabelProvider());
resultsViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
resultsViewer.setSelection(event.getSelection());
try {
new DisplayDroppedItemAction(ItemsTrashBrowserMainPage.this.getSite().getShell(), resultsViewer).run();
} catch (Exception e) {
MessageDialog.openError(ItemsTrashBrowserMainPage.this.getSite().getShell(), Messages._Error,
Messages.ItemsTrashBrowserMainPage_4 + e.getClass().getName()
+ Messages.ItemsTrashBrowserMainPage_5 + e.getLocalizedMessage());
}
}
});
hookKeyboard();
hookContextMenu();
managedForm.reflow(true); // nothng will show on the form if not called
searchText.setFocus();
// adapt body add mouse/focus listener for child
WidgetFactory factory = WidgetFactory.getWidgetFactory();
factory.adapt(managedForm.getForm().getBody());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}// createFormContent
/**
* Create the Table
*/
private Table createTable(Composite parent) {
int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
final Table table = new Table(parent, style);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessVerticalSpace = true;
gridData.horizontalSpan = 5;
table.setLayoutData(gridData);
table.setLinesVisible(true);
table.setHeaderVisible(true);
// 1st column
final TableColumn column = new TableColumn(table, SWT.LEFT, 0);
column.setText(Messages.ItemsTrashBrowserMainPage_6);
column.setWidth(150);
column.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[0] = !ascending[0];
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(0, ascending[0]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[0] = !ascending[0];
table.setSortColumn(column);
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(0, ascending[0]));
if (ascending[0]) {
table.setSortDirection(SWT.UP);
} else {
table.setSortDirection(SWT.DOWN);
}
}
});
// 2nd column
final TableColumn column1 = new TableColumn(table, SWT.LEFT, 1);
column1.setText(Messages.ItemsTrashBrowserMainPage_7);
column1.setWidth(150);
// Add listener to column so tasks are sorted by description when clicked
column1.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[1] = !ascending[1];
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(1, ascending[1]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[1] = !ascending[1];
table.setSortColumn(column1);
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(1, ascending[1]));
if (ascending[1]) {
table.setSortDirection(SWT.UP);
} else {
table.setSortDirection(SWT.DOWN);
}
}
});
// 3rd column
final TableColumn column2 = new TableColumn(table, SWT.LEFT, 2);
column2.setText(Messages.ItemsTrashBrowserMainPage_8);
column2.setWidth(150);
// Add listener to column so tasks are sorted by description when clicked
column2.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[2] = !ascending[2];
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(2, ascending[2]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[2] = !ascending[2];
table.setSortColumn(column2);
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(2, ascending[2]));
if (ascending[2]) {
table.setSortDirection(SWT.UP);
} else {
table.setSortDirection(SWT.DOWN);
}
}
});
// 4th column
final TableColumn column3 = new TableColumn(table, SWT.LEFT, 3);
column3.setText(Messages.ItemsTrashBrowserMainPage_9);
column3.setWidth(150);
// Add listener to column so tasks are sorted by description when clicked
column3.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
table.setSortDirection(SWT.UP);
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(3, ascending[3]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[3] = !ascending[3];
table.setSortColumn(column3);
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(3, ascending[3]));
if (ascending[3]) {
table.setSortDirection(SWT.UP);
} else {
table.setSortDirection(SWT.DOWN);
}
}
});
// 5th column
final TableColumn column4 = new TableColumn(table, SWT.LEFT, 4);
column4.setText(Messages.ItemsTrashBrowserMainPage_10);
column4.setWidth(150);
// Add listener to column so tasks are sorted by description when clicked
column4.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[4] = !ascending[4];
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(4, ascending[4]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[4] = !ascending[4];
table.setSortColumn(column4);
ItemsTrashBrowserMainPage.this.resultsViewer.setSorter(new TableSorter(4, ascending[4]));
if (ascending[4]) {
table.setSortDirection(SWT.UP);
} else {
table.setSortDirection(SWT.DOWN);
}
}
});
return table;
}
@Override
protected void createActions() {
}
/*********************************
* IXObjectModelListener interface
*********************************/
public void handleEvent(int type, TreeObject parent, TreeObject child) {
refreshData();
}
@Override
protected void refreshData() {
try {
searchText.setFocus();
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(this.getSite().getShell(), Messages.ItemsTrashBrowserMainPage_11,
Messages.ItemsTrashBrowserMainPage_12 + e.getLocalizedMessage());
}
}
@Override
protected void commit() {
try {
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(this.getSite().getShell(), Messages.ItemsTrashBrowserMainPage_13,
Messages.ItemsTrashBrowserMainPage_14 + e.getLocalizedMessage());
}
}
private void hookKeyboard() {
resultsViewer.getControl().addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if (e.keyCode == SWT.DEL) {
new RemoveAction(ItemsTrashBrowserMainPage.this.getSite().getShell(),
ItemsTrashBrowserMainPage.this.resultsViewer).run();
}
}
});
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager();
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
// ItemsTrashBrowserMainPage.this.fillContextMenu(manager);
manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new RestoreAction(ItemsTrashBrowserMainPage.this
.getSite().getShell(), ItemsTrashBrowserMainPage.this.resultsViewer));
manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new RemoveAction(ItemsTrashBrowserMainPage.this
.getSite().getShell(), ItemsTrashBrowserMainPage.this.resultsViewer));
}
});
Menu menu = menuMgr.createContextMenu(resultsViewer.getControl());
resultsViewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, resultsViewer);
}
protected void fillContextMenu(IMenuManager manager) {
return;
}
protected LineItem[] getResults(boolean showResultInfo) {
Cursor waitCursor = null;
try {
Display display = getEditor().getSite().getPage().getWorkbenchWindow().getWorkbench().getDisplay();
waitCursor = new Cursor(display, SWT.CURSOR_WAIT);
this.getSite().getShell().setCursor(waitCursor);
TMDMService service = Util.getMDMService(getXObject());
String search = searchText.getText();
List<WSDroppedItemPK> results = null;
if (search != null && search.length() > 0) {
results = service.findAllDroppedItemsPKs(new WSFindAllDroppedItemsPKs(search)).getWsDroppedItemPK();
}
if ((results == null) || (results.isEmpty())) {
if (showResultInfo) {
MessageDialog.openInformation(this.getSite().getShell(), Messages.ItemsTrashBrowserMainPage_15,
Messages.ItemsTrashBrowserMainPage_16);
return new LineItem[0];
}
} else {
LineItem[] res = new LineItem[results.size()];
for (int i = 0; i < results.size(); i++) {
WSDroppedItemPK wsDroppedItemPK = results.get(i);
WSItemPK refWSItemPK = wsDroppedItemPK.getWsItemPK();
// if(revison==null||revison.equals(""))revison="head";
res[i] = new LineItem(refWSItemPK.getWsDataClusterPK().getPk(), refWSItemPK.getConceptName(), refWSItemPK
.getIds().toArray(new String[0]), null, wsDroppedItemPK.getPartPath());
}
return res;
}
return new LineItem[0];
} catch (Exception e) {
log.error(e.getMessage(), e);
if ((e.getLocalizedMessage() != null) && e.getLocalizedMessage().contains("10000")) {
MessageDialog.openError(this.getSite().getShell(), Messages.ItemsTrashBrowserMainPage_17,
Messages.ItemsTrashBrowserMainPage_18);
} else {
if (!Util.handleConnectionException(this, e, null)) {
MessageDialog.openError(this.getSite().getShell(), Messages.ItemsTrashBrowserMainPage_19,
e.getLocalizedMessage());
}
}
return null;
} finally {
try {
this.getSite().getShell().setCursor(null);
waitCursor.dispose();
} catch (Exception e) {
}
}
}
/***************************************************************
* Display Dropped Item Action
*
***************************************************************/
class DisplayDroppedItemAction extends Action {
protected Shell shell = null;
protected Viewer viewer;
public DisplayDroppedItemAction(Shell shell, Viewer viewer) {
super();
this.shell = shell;
this.viewer = viewer;
setImageDescriptor(ImageCache.getImage("icons/edit_obj.gif"));//$NON-NLS-1$
setText(Messages.ItemsTrashBrowserMainPage_20);
setToolTipText(Messages.ItemsTrashBrowserMainPage_21);
}
@Override
public void run() {
try {
super.run();
IStructuredSelection selection = ((IStructuredSelection) viewer.getSelection());
LineItem li = (LineItem) selection.getFirstElement();
WSDroppedItem wsDroppedItem = Util.getMDMService(getXObject()).loadDroppedItem(
new WSLoadDroppedItem(new WSDroppedItemPK(li.getPartPath(), new WSItemPK(li.getConcept(), Arrays
.asList(li.getIds()), new WSDataClusterPK(li.getDataCluster())))
));
// mask
String projection = wsDroppedItem.getProjection();
Pattern pLoad = Pattern.compile(".*?(<c>.*?</t>).*?(<p>(.*)</p>|<p/>).*", Pattern.DOTALL);//$NON-NLS-1$
Matcher m = pLoad.matcher(projection);
if (m.matches()) {
if (m.group(2) == null || m.group(2).equals("<p/>")) {//$NON-NLS-1$
projection = "";//$NON-NLS-1$
} else {
projection = m.group(3);
}
}
String userName = wsDroppedItem.getInsertionUserName() == null ? "undefine" : wsDroppedItem//$NON-NLS-1$
.getInsertionUserName();
String droppedTime = wsDroppedItem.getInsertionTime() == null ? "undefine" : sdf.format(wsDroppedItem//$NON-NLS-1$
.getInsertionTime());
String desc = Messages.ItemsTrashBrowserMainPage_22 + userName + Messages.ItemsTrashBrowserMainPage_23
+ droppedTime;
final DOMViewDialog d = new DOMViewDialog(ItemsTrashBrowserMainPage.this.getSite().getShell(),
Util.parse(projection), false, null, DOMViewDialog.TREE_VIEWER, null, desc);
d.addListener(new Listener() {
public void handleEvent(Event event) {
if (event.button == DOMViewDialog.BUTTON_CLOSE) {
d.close();
}// if
}// handleEvent
});
d.setBlockOnOpen(true);
d.open();
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(shell, Messages._Error, Messages.ItemsTrashBrowserMainPage_25 + e.getLocalizedMessage());
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}
/***************************************************************
* Restore Dropped Item Action
*
***************************************************************/
class RestoreAction extends Action {
protected Shell shell = null;
protected Viewer viewer;
public RestoreAction(Shell shell, Viewer viewer) {
super();
this.shell = shell;
this.viewer = viewer;
setImageDescriptor(ImageCache.getImage("icons/add_obj.gif"));//$NON-NLS-1$
setText(Messages.ItemsTrashBrowserMainPage_26);
setToolTipText(Messages.ItemsTrashBrowserMainPage_26);
}
@Override
public void run() {
try {
super.run();
IStructuredSelection selection = ((IStructuredSelection) viewer.getSelection());
List<?> list = selection.toList();
if (list != null && list.size() > 0) {
TMDMService service = Util.getMDMService(getXObject());
for (Object obj : list) {
LineItem li = (LineItem) obj;
WSDroppedItemPK wsDroppedItemPK = new WSDroppedItemPK(li.getPartPath(), new WSItemPK(li.getConcept(),
Arrays.asList(li.getIds()), new WSDataClusterPK(li.getDataCluster())));
service.recoverDroppedItem(new WSRecoverDroppedItem(wsDroppedItemPK));
}
// refresh the search
ItemsTrashBrowserMainPage.this.resultsViewer.setInput(getResults(false));
}
} catch (Exception e) {
if (!Util.handleConnectionException(shell, e, null)) {
MessageDialog.openError(shell, Messages._Error,
Messages.ItemsTrashBrowserMainPage_29 + e.getLocalizedMessage());
}
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}
/***************************************************************
* Delete Dropped Item Action
*
***************************************************************/
class RemoveAction extends Action {
protected Shell shell = null;
protected Viewer viewer;
public RemoveAction(Shell shell, Viewer viewer) {
super();
this.shell = shell;
this.viewer = viewer;
setImageDescriptor(ImageCache.getImage("icons/delete_obj.gif"));//$NON-NLS-1$
setText(Messages.ItemsTrashBrowserMainPage_30);
setToolTipText(Messages.ItemsTrashBrowserMainPage_30);
}
@Override
public void run() {
try {
super.run();
// retrieve the item
IStructuredSelection selection = ((IStructuredSelection) viewer.getSelection());
List<?> list = selection.toList();
if (list != null && list.size() > 0) {
if (!MessageDialog.openConfirm(this.shell, Messages.ItemsTrashBrowserMainPage_32,
Messages.ItemsTrashBrowserMainPage_33)) {
return;
}
TMDMService service = Util.getMDMService(getXObject());
for (Object obj : list) {
LineItem li = (LineItem) obj;
WSDroppedItemPK wsDroppedItemPK = new WSDroppedItemPK(li.getPartPath(), new WSItemPK(li.getConcept(),
Arrays.asList(li.getIds()), new WSDataClusterPK(li.getDataCluster())));
// run
service.removeDroppedItem(new WSRemoveDroppedItem(wsDroppedItemPK));
}
// refresh the search
ItemsTrashBrowserMainPage.this.resultsViewer.setInput(getResults(false));
}
} catch (Exception e) {
log.error(e.getMessage(), e);
if (!Util.handleConnectionException(shell, e, null)) {
MessageDialog.openError(shell, Messages._Error,
Messages.ItemsTrashBrowserMainPage_35 + e.getLocalizedMessage());
}
}
}
@Override
public void runWithEvent(Event event) {
super.runWithEvent(event);
}
}
/***************************************************************
* Table Label Provider
*
***************************************************************/
class ClusterTableLabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
LineItem li = (LineItem) element;
switch (columnIndex) {
case 0:
return li.getDataCluster();
case 1:
return li.getConcept();
case 2:
return Util.joinStrings(li.getIds(), ".");//$NON-NLS-1$
case 3:
return li.getRevision();
case 4:
return li.getPartPath();
default:
return "???????";//$NON-NLS-1$
}
}
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
}
/***************************************************************
* Table Sorter
*
***************************************************************/
class TableSorter extends ViewerSorter {
int column = 0;
boolean asc = true;
public TableSorter(int column, boolean ascending) {
super();
this.column = column;
this.asc = ascending;
}
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
LineItem li1 = (LineItem) e1;
LineItem li2 = (LineItem) e2;
int res = 0;
switch (column) {
case 0:
res = li1.getDataCluster().compareToIgnoreCase(li2.getDataCluster());
break;
case 1:
res = li1.getConcept().compareToIgnoreCase(li2.getConcept());
break;
case 2:
res = Util.joinStrings(li1.getIds(), ".").compareToIgnoreCase(Util.joinStrings(li2.getIds(), "."));//$NON-NLS-1$//$NON-NLS-2$
break;
case 3:
res = li1.getRevision().compareToIgnoreCase(li2.getRevision());
break;
case 4:
res = li1.getPartPath().compareToIgnoreCase(li2.getPartPath());
break;
default:
res = 0;
}
if (asc) {
return res;
} else {
return -res;
}
}
}
/***************************************************************
* A Line Item Bean
*
***************************************************************/
class LineItem {
private String dataCluster;
private String concept;
private String[] ids;
private String revision;
private String partPath;
public LineItem(String dataCluster, String concept, String[] ids, String revision, String partPath) {
super();
this.concept = concept;
this.dataCluster = dataCluster;
this.ids = ids;
this.partPath = partPath;
this.revision = revision;
}
public String getDataCluster() {
return dataCluster;
}
public void setDataCluster(String dataCluster) {
this.dataCluster = dataCluster;
}
public String getConcept() {
return concept;
}
public void setConcept(String concept) {
this.concept = concept;
}
public String[] getIds() {
return ids;
}
public void setIds(String[] ids) {
this.ids = ids;
}
public String getRevision() {
return revision;
}
public void setRevision(String revision) {
this.revision = revision;
}
public String getPartPath() {
return partPath;
}
public void setPartPath(String partPath) {
this.partPath = partPath;
}
}
}