// ============================================================================
//
// 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.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
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.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.ITableLabelProvider;
import org.eclipse.jface.viewers.ListViewer;
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.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Combo;
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.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.editors.actions.DeleteItemsAction;
import com.amalto.workbench.editors.actions.EditItemAction;
import com.amalto.workbench.editors.actions.ExecuteRoutingOrdersAction;
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.utils.XtentisException;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSGetRoutingOrderV2ByCriteriaWithPaging;
import com.amalto.workbench.webservices.WSGetServicesList;
import com.amalto.workbench.webservices.WSRoutingEngineV2Action;
import com.amalto.workbench.webservices.WSRoutingEngineV2ActionCode;
import com.amalto.workbench.webservices.WSRoutingEngineV2Status;
import com.amalto.workbench.webservices.WSRoutingOrderV2;
import com.amalto.workbench.webservices.WSRoutingOrderV2SearchCriteriaWithPaging;
import com.amalto.workbench.webservices.WSRoutingOrderV2Status;
import com.amalto.workbench.webservices.WSServicesListItem;
import com.amalto.workbench.widgets.CalendarSelectWidget;
import com.amalto.workbench.widgets.IPagingListener;
import com.amalto.workbench.widgets.PageingToolBar;
import com.amalto.workbench.widgets.WidgetFactory;
public class RoutingEngineV2BrowserMainPage extends AMainPage implements IXObjectModelListener, IPagingListener {
/**
*
*/
private static final String BLANK = ""; //$NON-NLS-1$
private static Log log = LogFactory.getLog(RoutingEngineV2BrowserMainPage.class);
protected static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");//$NON-NLS-1$
protected Label statusLabel;
protected Text fromText;
protected Text toText;
protected Combo statusCombo;
protected Text idText;
protected Combo serviceCombo;
protected Text anyFieldText;
protected Text documentTypeText;
protected TableViewer resultsViewer;
protected ListViewer wcListViewer;
protected Button suspendButton;
private PageingToolBar pageToolBar;
protected boolean[] ascending = { true, false, false, false };
private Button stopButton;
private Button startButton;
public RoutingEngineV2BrowserMainPage(FormEditor editor) {
super(editor, RoutingEngineV2BrowserMainPage.class.getName(), ((XObjectBrowserInput) editor.getEditorInput()).getName());
// listen to events
((XObjectBrowserInput) editor.getEditorInput()).addListener(this);
}
@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(1, false));
// Create a Router status holder
Composite statusComposite = toolkit.createComposite(composite, SWT.NONE);
statusComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
statusComposite.setLayout(new GridLayout(5, false));
// status
Label descriptionLabel = toolkit.createLabel(statusComposite,
Messages.RoutingEngineV2BrowserMainPage_EventManagerStatus, SWT.NULL);
descriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
statusLabel = toolkit.createLabel(statusComposite, " ", SWT.NULL);//$NON-NLS-1$
statusLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
startButton = toolkit.createButton(statusComposite, BLANK, SWT.PUSH);
startButton.setImage(ImageCache.getCreatedImage(EImage.RUN_EXC.getPath()));
startButton.setToolTipText(Messages.RoutingEngineV2BrowserMainPage_Start);
startButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
startButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
startSubscriptionEngine();
updateButtons();
};
});
stopButton = toolkit.createButton(statusComposite, BLANK, SWT.PUSH);
stopButton.setImage(ImageCache.getCreatedImage(EImage.STOP.getPath()));
stopButton.setToolTipText(Messages.RoutingEngineV2BrowserMainPage_Stop);
stopButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
stopButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
stopSubscriptionEngine();
updateButtons();
};
});
suspendButton = toolkit.createButton(statusComposite, BLANK, SWT.PUSH);
suspendButton.setImage(ImageCache.getCreatedImage(EImage.SUSPEND.getPath()));
suspendButton.setToolTipText(Messages.RoutingEngineV2BrowserMainPage_Suspend);
suspendButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
suspendButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
suspendSubscriptionEngine();
updateButtons();
};
});
Composite separator = toolkit.createCompositeSeparator(composite);
separator.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
((GridData) separator.getLayoutData()).heightHint = 2;
// first Line of routing Orders
Composite firstLineComposite = toolkit.createComposite(composite);
firstLineComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
firstLineComposite.setLayout(new GridLayout(9, false));
// Routing Orders Label
Label routingOrdersLabel = toolkit.createLabel(firstLineComposite,
Messages.RoutingEngineV2BrowserMainPage_RoutingOrders, SWT.NULL);
routingOrdersLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 9, 1));
// from
Label fromLabel = toolkit.createLabel(firstLineComposite, Messages.RoutingEngineV2BrowserMainPage_From, SWT.NULL);
fromLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
CalendarSelectWidget fromCalendar = new CalendarSelectWidget(toolkit, firstLineComposite, true);
fromText = fromCalendar.getText();
// to
Label toLabel = toolkit.createLabel(firstLineComposite, Messages.RoutingEngineV2BrowserMainPage_To, SWT.NULL);
toLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
CalendarSelectWidget toCalendar = new CalendarSelectWidget(toolkit, firstLineComposite, false);
toText = toCalendar.getText();
Label statusLab = toolkit.createLabel(firstLineComposite, Messages.RoutingEngineV2BrowserMainPage_Status, SWT.NULL);
statusLab.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
statusCombo = new Combo(firstLineComposite, SWT.READ_ONLY | SWT.DROP_DOWN | SWT.MULTI);
statusCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
statusCombo.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if ((e.stateMask == 0) && (e.character == SWT.CR)) {
doSearch();
}
}// keyReleased
}// keyListener
);
statusCombo.add("FAILED");//$NON-NLS-1$
statusCombo.add("COMPLETED");//$NON-NLS-1$
statusCombo.select(0);
// to
Button bSearch = toolkit.createButton(firstLineComposite, BLANK, SWT.CENTER);
bSearch.setImage(ImageCache.getCreatedImage(EImage.BROWSE.getPath()));
bSearch.setToolTipText(Messages.RoutingEngineV2BrowserMainPage_Search);
bSearch.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
bSearch.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
pageToolBar.reset();
doSearch();
};
});
// Second Line of routing Orders
Composite searchLineComposite = toolkit.createComposite(composite);
searchLineComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
searchLineComposite.setLayout(new GridLayout(4, false));
// document type
Label documentTypeLabel = toolkit.createLabel(searchLineComposite,
Messages.RoutingEngineV2BrowserMainPage_DocumentType, SWT.NULL);
documentTypeLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
// DocumentType
documentTypeText = toolkit.createText(searchLineComposite, BLANK, SWT.BORDER);
documentTypeText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
((GridData) documentTypeText.getLayoutData()).widthHint = 120;
documentTypeText.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if ((e.stateMask == 0) && (e.character == SWT.CR)) {
doSearch();
}
}// keyReleased
}// keyListener
);
// ID
Label idLabel = toolkit.createLabel(searchLineComposite, Messages.RoutingEngineV2BrowserMainPage_ItemIDs, SWT.NULL);
idLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
// ID
idText = toolkit.createText(searchLineComposite, BLANK, SWT.BORDER);
idText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
idText.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if ((e.stateMask == 0) && (e.character == SWT.CR)) {
doSearch();
}
}// keyReleased
}// keyListener
);
// service
Label serviceLabel = toolkit.createLabel(searchLineComposite, Messages.RoutingEngineV2BrowserMainPage_Service,
SWT.NULL);
serviceLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
// service
serviceCombo = new Combo(searchLineComposite, SWT.READ_ONLY | SWT.DROP_DOWN | SWT.MULTI);
serviceCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
serviceCombo.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if ((e.stateMask == 0) && (e.character == SWT.CR)) {
doSearch();
}
}// keyReleased
}// keyListener
);
serviceCombo.add(BLANK);
// WSServicesListItem[] servicesList = Util.getPort(getXObject()).getServicesList(new
// WSGetServicesList("en")).getItem();
List<WSServicesListItem> servicesList = getMDMService().getServicesList(new WSGetServicesList("en")).getItem(); //$NON-NLS-1$
if ((servicesList != null) && (servicesList.size() > 0)) {
String[] services = new String[servicesList.size()];
for (int i = 0; i < servicesList.size(); i++) {
services[i] = servicesList.get(i).getJndiName().replaceFirst("amalto/local/service/", BLANK);//$NON-NLS-1$
}
Arrays.sort(services);
for (String service : services) {
serviceCombo.add(service);
}
}
serviceCombo.select(0);
// any Field
Label anyFieldLabel = toolkit.createLabel(searchLineComposite, Messages.RoutingEngineV2BrowserMainPage_AnyField,
SWT.NULL);
anyFieldLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
// anyField
anyFieldText = toolkit.createText(searchLineComposite, BLANK, SWT.BORDER);
anyFieldText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
anyFieldText.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if ((e.stateMask == 0) && (e.character == SWT.CR)) {
doSearch();
}
}// keyReleased
}// keyListener
);
// pageToolBar
pageToolBar = new PageingToolBar(composite);
pageToolBar.getComposite().setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 9, 1));
pageToolBar.getComposite().setVisible(false);
pageToolBar.setPageingListener(this);
final Table table = createTable(composite);
resultsViewer = new TableViewer(table);
resultsViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 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 EditItemAction(RoutingEngineV2BrowserMainPage.this.getSite().getShell(), resultsViewer).run();
} catch (Exception e) {
MessageDialog.openError(
RoutingEngineV2BrowserMainPage.this.getSite().getShell(),
Messages._Error,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorMsg, e.getClass().getName(),
e.getLocalizedMessage()));
}
}
});
hookContextMenu();
managedForm.reflow(true); // nothing will show on the form if not called
// adapt body add mouse/focus listener for child
WidgetFactory factory = WidgetFactory.getWidgetFactory();
factory.adapt(managedForm.getForm().getBody());
updateButtons();
} 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 = 3;
table.setLayoutData(gridData);
table.setLinesVisible(true);
table.setHeaderVisible(true);
// 1st column
final TableColumn column0 = new TableColumn(table, SWT.LEFT, 0);
column0.setText(Messages.RoutingEngineV2BrowserMainPage_Document);
column0.setWidth(150);
column0.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[0] = !ascending[0];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(0, ascending[0]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[0] = !ascending[0];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(0, ascending[0]));
table.setSortColumn(column0);
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.RoutingEngineV2BrowserMainPage_Date);
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];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(1, ascending[1]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[1] = !ascending[1];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(1, ascending[1]));
table.setSortColumn(column1);
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.RoutingEngineV2BrowserMainPage_Service);
column2.setWidth(100);
// 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];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(2, ascending[2]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[2] = !ascending[2];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(2, ascending[2]));
table.setSortColumn(column2);
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.RoutingEngineV2BrowserMainPage_Message);
column3.setWidth(300);
// 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) {
ascending[3] = !ascending[3];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(3, ascending[3]));
}
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
ascending[3] = !ascending[3];
RoutingEngineV2BrowserMainPage.this.resultsViewer.setSorter(new TableSorter(3, ascending[3]));
table.setSortColumn(column3);
if (ascending[3]) {
table.setSortDirection(SWT.UP);
} else {
table.setSortDirection(SWT.DOWN);
}
}
});
return table;
}
@Override
protected void createCharacteristicsContent(FormToolkit toolkit, Composite charComposite) {
// Everything is implemented in createFormContent
}// createCharacteristicsContent
@Override
protected void refreshData() {
try {
WSRoutingEngineV2Status status = getServerRoutingStatus();
statusLabel.setText(status.value());
idText.setFocus();
} catch (Exception e) {
updateButtons();
log.error(e.getMessage(), e);
if (!Util.handleConnectionException(this.getSite().getShell(), e,
Messages.RoutingEngineV2BrowserMainPage_ErrorRefreshingPage)) {
MessageDialog.openError(this.getSite().getShell(), Messages.RoutingEngineV2BrowserMainPage_ErrorRefreshingPage,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorRefreshingPageXX, e.getLocalizedMessage()));
}
}
}
protected WSRoutingEngineV2Status getServerRoutingStatus() throws XtentisException {
TMDMService service = getMDMService();
WSRoutingEngineV2Status status = service.routingEngineV2Action(new WSRoutingEngineV2Action(
WSRoutingEngineV2ActionCode.STATUS));
return status;
}
protected void updateButtons() {
try {
WSRoutingEngineV2Status status = getServerRoutingStatus();
startButton.setEnabled(status != WSRoutingEngineV2Status.RUNNING);
suspendButton.setEnabled(status != WSRoutingEngineV2Status.SUSPENDED);
stopButton.setEnabled(status != WSRoutingEngineV2Status.STOPPED);
statusLabel.setText(status.value());
} catch (XtentisException e) {
startButton.setEnabled(true);
suspendButton.setEnabled(false);
stopButton.setEnabled(false);
statusLabel.setText("FAILED"); //$NON-NLS-1$
log.debug(e.getMessage(), e);
}
}
@Override
protected void commit() {
try {
// Nothing to do
} catch (Exception e) {
log.error(e.getMessage(), e);
MessageDialog.openError(this.getSite().getShell(), Messages.RoutingEngineV2BrowserMainPage_ErrorCommitingPage,
Messages.RoutingEngineV2BrowserMainPage_ErrorCommitingPageXX + e.getLocalizedMessage());
}
}
@Override
protected void createActions() {
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager();
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new EditItemAction(
RoutingEngineV2BrowserMainPage.this.getSite().getShell(),
RoutingEngineV2BrowserMainPage.this.resultsViewer));
manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new DeleteItemsAction(
RoutingEngineV2BrowserMainPage.this.getSite().getShell(), RoutingEngineV2BrowserMainPage.this,
RoutingEngineV2BrowserMainPage.this.resultsViewer));
manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new ExecuteRoutingOrdersAction(
RoutingEngineV2BrowserMainPage.this.getSite().getShell(), RoutingEngineV2BrowserMainPage.this,
RoutingEngineV2BrowserMainPage.this.resultsViewer, true));
manager.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new ExecuteRoutingOrdersAction(
RoutingEngineV2BrowserMainPage.this.getSite().getShell(), RoutingEngineV2BrowserMainPage.this,
RoutingEngineV2BrowserMainPage.this.resultsViewer, false // asynchronously
));
}
});
Menu menu = menuMgr.createContextMenu(resultsViewer.getControl());
resultsViewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, resultsViewer);
}
protected void fillContextMenu(IMenuManager manager) {
// IStructuredSelection selection=((IStructuredSelection)viewer.getSelection());
return;
}
public void doSearch() {
resultsViewer.setInput(getResults());
resultsViewer.getTable().setFocus();
pageToolBar.getComposite().setVisible(true);
pageToolBar.getComposite().layout(true);
pageToolBar.getComposite().getParent().layout(true);
doSearchSort();//
}
/**
* this method will be call when search action is activated or page is changed every time
*/
private void doSearchSort() {
Table table = resultsViewer.getTable();
TableColumn sortColumn = table.getSortColumn();
if (sortColumn != null) {
List<TableColumn> columns = Arrays.asList(table.getColumns());
int index = columns.indexOf(sortColumn);
sort(index, sortColumn);
}
}
private void sort(int index, TableColumn column) {
resultsViewer.setSorter(new TableSorter(index, ascending[index]));
Table table = resultsViewer.getTable();
if (ascending[index]) {
table.setSortColumn(column);
table.setSortDirection(SWT.DOWN);
} else {
table.setSortColumn(column);
table.setSortDirection(SWT.UP);
}
}
protected WSRoutingOrderV2[] getResults() {
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 = getMDMService();
long from = -1;
long to = -1;
Pattern pattern = Pattern.compile("^\\d{4}\\d{2}\\d{2} \\d{2}:\\d{2}:\\d{2}$");//$NON-NLS-1$
if (!BLANK.equals(fromText.getText())) {
String dateTimeText = fromText.getText().trim();
Matcher matcher = pattern.matcher(dateTimeText);
if (!matcher.matches()) {
MessageDialog.openWarning(this.getSite().getShell(), Messages.Warning,
Messages.RoutingEngineV2BrowserMainPage_FormatIllegal);
return new WSRoutingOrderV2[0];
}
try {
Date d = sdf.parse(fromText.getText());
from = d.getTime();
} catch (ParseException pe) {
}
}
if (!BLANK.equals(toText.getText())) {
String dateTimeText = toText.getText().trim();
Matcher matcher = pattern.matcher(dateTimeText);
if (!matcher.matches()) {
MessageDialog.openWarning(this.getSite().getShell(), Messages.Warning,
Messages.RoutingEngineV2BrowserMainPage_FormatIllegal);
return new WSRoutingOrderV2[0];
}
try {
Date d = sdf.parse(toText.getText());
to = d.getTime();
} catch (ParseException pe) {
}
}
long timeCreatedMin = -1;
long timeCreatedMax = -1;
long timeScheduledMin = -1;
long timeScheduledMax = -1;
long timeLastRunStartedMin = -1;
long timeLastRunStartedMax = -1;
long timeLastRunCompletedMin = -1;
long timeLastRunCompletedMax = -1;
WSRoutingOrderV2Status status = null;
String statusText = statusCombo.getItem(statusCombo.getSelectionIndex());
if ("COMPLETED".equals(statusText)) {//$NON-NLS-1$
timeLastRunCompletedMin = from;
timeLastRunCompletedMax = to;
status = WSRoutingOrderV2Status.COMPLETED;
} else if ("FAILED".equals(statusText)) {//$NON-NLS-1$
timeLastRunCompletedMin = from;
timeLastRunCompletedMax = to;
status = WSRoutingOrderV2Status.FAILED;
} else {
throw new XtentisException(Messages.RoutingEngineV2BrowserMainPage_ExceptionInfo + statusText
+ Messages.RoutingEngineV2BrowserMainPage_ExceptionInfoA);
}
String serviceJNDI = serviceCombo.getItem(serviceCombo.getSelectionIndex());
if (BLANK.equals(serviceJNDI)) {
serviceJNDI = null;
}
int start = pageToolBar.getStart();
int limit = pageToolBar.getLimit();
List<WSRoutingOrderV2> wsRoutingOrder = service.getRoutingOrderV2ByCriteriaWithPaging(
new WSGetRoutingOrderV2ByCriteriaWithPaging(new WSRoutingOrderV2SearchCriteriaWithPaging("*" //$NON-NLS-1$
.equals(anyFieldText.getText())
|| BLANK.equals(anyFieldText.getText()) ? null : anyFieldText.getText(),
"*".equals(documentTypeText.getText()) || BLANK.equals(documentTypeText.getText()) ? null //$NON-NLS-1$
: documentTypeText.getText(),
"*".equals(idText.getText()) || BLANK.equals(idText.getText()) ? null //$NON-NLS-1$
: idText.getText(), limit, null, null, serviceJNDI, null, start, status, timeCreatedMax,
timeCreatedMin, timeLastRunCompletedMax, timeLastRunCompletedMin, timeLastRunStartedMax,
timeLastRunStartedMin, timeScheduledMax, timeScheduledMin, true))).getWsRoutingOrder();
if (wsRoutingOrder.size() == 1) {
MessageDialog.openInformation(this.getSite().getShell(), Messages.RoutingEngineV2BrowserMainPage_Info,
Messages.RoutingEngineV2BrowserMainPage_SorryNoResult);
return new WSRoutingOrderV2[0];
}
int totalSize = Integer.parseInt(wsRoutingOrder.get(0).getName());
pageToolBar.setTotalsize(totalSize);
pageToolBar.refreshUI();
WSRoutingOrderV2[] resultOrderV2s = new WSRoutingOrderV2[wsRoutingOrder.size() - 1];
System.arraycopy(wsRoutingOrder.toArray(new WSRoutingOrderV2[0]), 1, resultOrderV2s, 0, resultOrderV2s.length);
return resultOrderV2s;
} catch (Exception e) {
log.error(e.getMessage(), e);
if ((e.getLocalizedMessage() != null) && e.getLocalizedMessage().contains("10000")) {
MessageDialog.openError(this.getSite().getShell(), Messages.RoutingEngineV2BrowserMainPage_TooManyResults,
Messages.RoutingEngineV2BrowserMainPage_ErrorMsg1);
} else if (!Util.handleConnectionException(this.getSite().getShell(), e, null)) {
MessageDialog.openError(this.getSite().getShell(), Messages.ErrorTitle1, e.getLocalizedMessage());
}
return null;
} finally {
try {
this.getSite().getShell().setCursor(null);
if (waitCursor != null) {
waitCursor.dispose();
}
} catch (Exception e) {
// do nothing
}
}
}
/*********************************
* IXObjectModelListener interface
*/
public void handleEvent(int type, TreeObject parent, TreeObject child) {
refreshData();
}
/***************************************************************
* Table Label Provider
*
* @author bgrieder
*
***************************************************************/
class ClusterTableLabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
WSRoutingOrderV2 ro = (WSRoutingOrderV2) element;
switch (columnIndex) {
case 0:
return ro.getWsItemPK().getConceptName() + "[" + Util.joinStrings(ro.getWsItemPK().getIds(), ".") + "]";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
case 1:
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(ro.getTimeLastRunCompleted());
return sdf.format(cal.getTime());
case 2:
return ro.getServiceJNDI().replaceFirst("amalto/local/service/", BLANK);//$NON-NLS-1$
case 3:
return ro.getMessage();
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
*
* @author bgrieder
*
***************************************************************/
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) {
WSRoutingOrderV2 ro1 = (WSRoutingOrderV2) e1;
WSRoutingOrderV2 ro2 = (WSRoutingOrderV2) e2;
int res = 0;
switch (column) {
case 0: // id
String d1 = ro1.getWsItemPK().getConceptName() + "[" + Util.joinStrings(ro1.getWsItemPK().getIds(), ".") + "]";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
String d2 = ro2.getWsItemPK().getConceptName() + "[" + Util.joinStrings(ro2.getWsItemPK().getIds(), ".") + "]";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
res = d1.compareToIgnoreCase(d2);
break;
case 1: // date
if (WSRoutingOrderV2Status.ACTIVE.equals(ro1.getStatus())) {
res = (int) (ro1.getTimeCreated() - ro2.getTimeCreated());
} else {
res = (int) (ro1.getTimeLastRunCompleted() - ro2.getTimeLastRunCompleted());
}
break;
case 2: // service
res = ro1.getServiceJNDI().compareToIgnoreCase(ro2.getServiceJNDI());
break;
case 3: // message
res = ro1.getMessage().compareToIgnoreCase(ro2.getMessage());
break;
default:
res = 0;
}
if (asc) {
return res;
} else {
return -res;
}
}
}
private void startSubscriptionEngine() {
try {
WSRoutingEngineV2Status status = getServerRoutingStatus();
TMDMService service = getMDMService();
if (status == WSRoutingEngineV2Status.STOPPED) {
service.routingEngineV2Action(new WSRoutingEngineV2Action(WSRoutingEngineV2ActionCode.START));
} else if (status == WSRoutingEngineV2Status.SUSPENDED) {
service.routingEngineV2Action(new WSRoutingEngineV2Action(WSRoutingEngineV2ActionCode.RESUME));
}
} catch (Exception e) {
log.error(e.getMessage(), e);
if (!Util.handleConnectionException(this.getSite().getShell(), e, null)) {
MessageDialog.openError(this.getSite().getShell(), Messages._Error,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorMsg7, e.getLocalizedMessage()));
}
}
}
private void stopSubscriptionEngine() {
try {
TMDMService service = getMDMService();
service.routingEngineV2Action(new WSRoutingEngineV2Action(WSRoutingEngineV2ActionCode.STOP));
} catch (Exception e) {
log.error(e.getMessage(), e);
if (!Util.handleConnectionException(this.getSite().getShell(), e, null)) {
MessageDialog.openError(this.getSite().getShell(), Messages._Error,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorMsg8, e.getLocalizedMessage()));
}
}
}
private void suspendSubscriptionEngine() {
try {
TMDMService service = getMDMService();
service.routingEngineV2Action(new WSRoutingEngineV2Action(WSRoutingEngineV2ActionCode.SUSPEND));
} catch (Exception e) {
log.error(e.getMessage(), e);
if (!Util.handleConnectionException(this.getSite().getShell(), e, null)) {
MessageDialog.openError(this.getSite().getShell(), Messages._Error,
Messages.bind(Messages.RoutingEngineV2BrowserMainPage_ErrorMsg9, e.getLocalizedMessage()));
}
}
}
@Override
public Object getAdapter(Class adapter) {
if (adapter == TMDMService.class) {
TMDMService mdmService = null;
try {
mdmService = getMDMService();
} catch (XtentisException e) {
log.error(e.getMessage(), e);
}
return mdmService;
}
return super.getAdapter(adapter);
}
}