// ============================================================================ // // 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.lang.reflect.InvocationTargetException; import java.net.URLEncoder; import java.rmi.ServerException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.xml.ws.WebServiceException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ILabelProviderListener; 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.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; 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.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.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.forms.widgets.FormToolkit; import com.amalto.workbench.dialogs.DataModelSelectDialog; import com.amalto.workbench.exadapter.ExAdapterManager; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; import com.amalto.workbench.models.TreeObject; import com.amalto.workbench.models.TreeParent; import com.amalto.workbench.providers.XtentisServerObjectsRetriever; import com.amalto.workbench.utils.LineItem; import com.amalto.workbench.utils.MDMServerDef; import com.amalto.workbench.utils.UserInfo; import com.amalto.workbench.utils.Util; import com.amalto.workbench.utils.XtentisException; import com.amalto.workbench.webservices.TMDMService; import com.amalto.workbench.webservices.WSDataCluster; import com.amalto.workbench.webservices.WSDataClusterPK; import com.amalto.workbench.webservices.WSDataModel; import com.amalto.workbench.webservices.WSDataModelPK; import com.amalto.workbench.webservices.WSGetConceptsInDataCluster; import com.amalto.workbench.webservices.WSGetDataCluster; import com.amalto.workbench.webservices.WSGetDataModel; import com.amalto.workbench.webservices.WSGetItemPKsByCriteria; import com.amalto.workbench.webservices.WSGetItemPKsByFullCriteria; import com.amalto.workbench.webservices.WSItemPKsByCriteriaResponseResults; import com.amalto.workbench.webservices.WSStringArray; import com.amalto.workbench.widgets.CalendarSelectWidget; import com.amalto.workbench.widgets.IPagingListener; import com.amalto.workbench.widgets.PageingToolBar; import com.amalto.workbench.widgets.WidgetFactory; /** * created by liusongbo on 2013-1-24 */ public class DataClusterComposite extends Composite implements IPagingListener { private static final Log log = LogFactory.getLog(DataClusterComposite.class); protected static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");//$NON-NLS-1$ private Text fromText; private Text toText; private Combo conceptCombo; private Text keyText; private Text searchText; private Button checkFTSearchButton; private PageingToolBar pageToolBar; private TableViewer resultsViewer; private boolean isMaster; // show master data or staging data // // protected boolean[] ascending = { true, false, false }; private TreeObject model; private AFormPage page; private IWorkbenchPartSite site; private Map<MDMServerDef, TreeParent> serverMap = new HashMap<MDMServerDef, TreeParent>(); private IDataClusterCompositeExAdapter exAdapter; public DataClusterComposite(Composite parent, int style, TreeObject model, boolean isMaster, IWorkbenchPartSite site) { super(parent, style); this.model = model; this.site = site; this.isMaster = isMaster; initAdapter(); setLayout(new GridLayout()); create(this); } public DataClusterComposite(Composite parent, int style, TreeObject model, boolean isMaster, AFormPage page, IWorkbenchPartSite site) { super(parent, style); this.page = page; this.site = site; this.model = model; this.isMaster = isMaster; initAdapter(); setLayout(new GridLayout()); create(this); } private void initAdapter() { exAdapter = ExAdapterManager.getAdapter(this, IDataClusterCompositeExAdapter.class); } private void create(Composite composite) { createFirstPart(composite); createSecondPart(composite); createPageToolbar(composite); createSearchResultPart(composite); // adapt body add mouse/focus listener for child FormToolkit toolkit = WidgetFactory.getWidgetFactory();// managedForm.getToolkit(); toolkit.adapt(composite); } protected void createFirstPart(Composite composite) { FormToolkit toolkit = WidgetFactory.getWidgetFactory(); // We do not implement IFormPart: we do not care about lifecycle management Composite compFirstLine = toolkit.createComposite(composite, SWT.NONE); compFirstLine.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); compFirstLine.setLayout(new GridLayout(10, false)); // from Label fromLabel = toolkit.createLabel(compFirstLine, Messages.DataClusterBrowserMainPage_1, SWT.NULL); fromLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); CalendarSelectWidget fromCalendar = new CalendarSelectWidget(toolkit, compFirstLine, true); fromText = fromCalendar.getText(); fromText.addKeyListener(keylistener); // to Label toLabel = toolkit.createLabel(compFirstLine, Messages.DataClusterBrowserMainPage_2, SWT.NULL); toLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); CalendarSelectWidget toCalendar = new CalendarSelectWidget(toolkit, compFirstLine, false); toText = toCalendar.getText(); toText.addKeyListener(keylistener); Label conceptLabel = toolkit.createLabel(compFirstLine, Messages.DataClusterBrowserMainPage_3, SWT.NULL); conceptLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); conceptCombo = new Combo(compFirstLine, SWT.READ_ONLY | SWT.DROP_DOWN | SWT.MULTI); conceptCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); // ((GridData) conceptCombo.getLayoutData()).widthHint = 180; conceptCombo.addKeyListener(keylistener); // refresh // search Button refreshBun = toolkit.createButton(compFirstLine, "", SWT.CENTER); //$NON-NLS-1$ refreshBun.setImage(ImageCache.getCreatedImage(EImage.REFRESH.getPath())); refreshBun.setToolTipText(Messages.XObjectBrowser_Refresh); refreshBun.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); refreshBun.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { refreshData(); }; }); // search Button bSearch = toolkit.createButton(compFirstLine, "", SWT.CENTER); //$NON-NLS-1$ bSearch.setImage(ImageCache.getCreatedImage(EImage.BROWSE.getPath())); bSearch.setToolTipText(Messages.DataClusterBrowserMainPage_4); bSearch.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); bSearch.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { pageToolBar.reset(); doSearch(); }; }); } protected Composite createSecondPart(Composite composite) { FormToolkit toolkit = WidgetFactory.getWidgetFactory(); Composite compSecondLine = toolkit.createComposite(composite, SWT.NONE); compSecondLine.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); compSecondLine.setLayout(new GridLayout(9, false)); createSearchPart(compSecondLine); if (exAdapter != null) { exAdapter.createSecondPart(compSecondLine); } return compSecondLine; } protected void createSearchPart(Composite compSecondLine) { FormToolkit toolkit = WidgetFactory.getWidgetFactory(); Label keyLabel = toolkit.createLabel(compSecondLine, Messages.DataClusterBrowserMainPage_5, SWT.NULL); keyLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); keyText = toolkit.createText(compSecondLine, "", SWT.BORDER);//$NON-NLS-1$ keyText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); keyText.addKeyListener(keylistener); /*** * Search Text */ Label descriptionLabel = toolkit.createLabel(compSecondLine, Messages.DataClusterBrowserMainPage_6, SWT.NULL); descriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); searchText = toolkit.createText(compSecondLine, "", SWT.BORDER);//$NON-NLS-1$ searchText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); // searchText.addModifyListener(this); searchText.addKeyListener(keylistener); searchText.setFocus(); checkFTSearchButton = toolkit.createButton(compSecondLine, Messages.DataClusterBrowserMainPage_7, SWT.CHECK); checkFTSearchButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); checkFTSearchButton.setEnabled(isMaster); } protected void createPageToolbar(Composite composite) { pageToolBar = new PageingToolBar(composite); pageToolBar.getComposite().setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 9, 1)); pageToolBar.getComposite().setVisible(false); pageToolBar.setPageingListener(this); } protected void createSearchResultPart(Composite composite) { int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION; resultsViewer = new TableViewer(composite, style); initTable(resultsViewer.getTable()); resultsViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); // ((GridData) resultsViewer.getControl().getLayoutData()).heightHint = DEFAULT_VIEWER_HEIGHT; resultsViewer.setContentProvider(new ArrayContentProvider()); resultsViewer.setLabelProvider(new ClusterTableLabelProvider()); } private KeyListener keylistener = new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if ((e.stateMask == 0) && (e.character == SWT.CR)) { resultsViewer.setInput(getResults(true)); resultsViewer.getTable().setFocus(); pageToolBar.getComposite().setVisible(true); pageToolBar.getComposite().layout(true); pageToolBar.getComposite().getParent().layout(true); readjustViewerHeight(); } }// keyReleased }; private void readjustViewerHeight() { resultsViewer.refresh(); } public void doSearch() { if (exAdapter != null) { exAdapter.doSearch(resultsViewer); } else { if (resultsViewer.getTable().getColumnCount() == 4) { resultsViewer.getTable().getColumn(3).dispose(); } } resultsViewer.setInput(getResults(true)); resultsViewer.getTable().setFocus(); pageToolBar.getComposite().setVisible(true); pageToolBar.getComposite().layout(true); pageToolBar.getComposite().getParent().layout(true); doSearchSort();// readjustViewerHeight(); } /** * 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 LineItem[] getResults(boolean showResultInfo) { Cursor waitCursor = null; try { waitCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT); getSite().getShell().setCursor(waitCursor); TMDMService service = Util.getMDMService(getXObject()); 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 (!"".equals(fromText.getText())) {//$NON-NLS-1$ String dateTimeText = fromText.getText().trim(); Matcher matcher = pattern.matcher(dateTimeText); if (!matcher.matches()) { MessageDialog .openWarning(this.getSite().getShell(), Messages.Warning, Messages.DataClusterBrowserMainPage_21); return new LineItem[0]; } try { Date d = sdf.parse(fromText.getText()); from = d.getTime(); } catch (ParseException pe) { } } if (!"".equals(toText.getText())) { //$NON-NLS-1$ String dateTimeText = toText.getText().trim(); Matcher matcher = pattern.matcher(dateTimeText); if (!matcher.matches()) { MessageDialog .openWarning(this.getSite().getShell(), Messages.Warning, Messages.DataClusterBrowserMainPage_23); return new LineItem[0]; } try { Date d = sdf.parse(toText.getText()); to = d.getTime(); } catch (ParseException pe) { } } String concept = conceptCombo.getText(); if ("*".equals(concept) | "".equals(concept)) { //$NON-NLS-1$ //$NON-NLS-2$ concept = null; } if (concept != null) { concept = concept.replaceAll("\\[.*\\]", "").trim();//$NON-NLS-1$//$NON-NLS-2$ } String keys = keyText.getText(); if ("*".equals(keys) | "".equals(keys)) { //$NON-NLS-1$ //$NON-NLS-2$ keys = null; } boolean useFTSearch = isMaster ? checkFTSearchButton.getSelection() : false; String search = searchText.getText(); if ("*".equals(search) | "".equals(search)) { //$NON-NLS-1$ //$NON-NLS-2$ search = null; } int start = pageToolBar.getStart(); int limit = pageToolBar.getLimit(); // see 0015909 String clusterName = URLEncoder.encode(getXObject().toString(), "utf-8");//$NON-NLS-1$ WSDataClusterPK clusterPk = new WSDataClusterPK(clusterName + getPkAddition()); // @temp yguo, get item with taskid or get taskid by specify wsitempk. List<WSItemPKsByCriteriaResponseResults> results = service.getItemPKsByFullCriteria( new WSGetItemPKsByFullCriteria(useFTSearch, new WSGetItemPKsByCriteria(concept, search, from, null, keys, limit, start, to, clusterPk))).getResults(); if (showResultInfo && (results.size() == 1)) { MessageDialog.openInformation(this.getSite().getShell(), Messages.DataClusterBrowserMainPage_24, Messages.DataClusterBrowserMainPage_25); return new LineItem[0]; } if (results.size() == 1) { return new LineItem[0]; } int totalSize = 0; List<LineItem> ress = new ArrayList<LineItem>(); for (int i = 0; i < results.size(); i++) { WSItemPKsByCriteriaResponseResults result = results.get(i); if (i == 0) { totalSize = Integer.parseInt(Util.parse(result.getWsItemPK().getConceptName()).getDocumentElement() .getTextContent()); continue; } ress.add(new LineItem(result.getDate(), result.getWsItemPK().getConceptName(), result.getWsItemPK().getIds() .toArray(new String[0]), result.getTaskId())); } pageToolBar.setTotalsize(totalSize); pageToolBar.refreshUI(); return ress.toArray(new LineItem[ress.size()]); } catch (Exception e) { log.error(e.getMessage(), e); if ((e.getLocalizedMessage() != null) && e.getLocalizedMessage().contains("10000")) { //$NON-NLS-1$ MessageDialog.openError(this.getSite().getShell(), Messages.DataClusterBrowserMainPage_26, Messages.DataClusterBrowserMainPage_27); } else if (!Util.handleConnectionException(this.getSite().getShell(), e, Messages.DataClusterBrowserMainPage_28)) { MessageDialog.openError(this.getSite().getShell(), Messages.DataClusterBrowserMainPage_28, e.getLocalizedMessage()); } return null; } finally { try { this.getSite().getShell().setCursor(null); waitCursor.dispose(); } catch (Exception e) { } } } private long parseTime(String timeStr) { try { Date d = sdf.parse(timeStr); long time = d.getTime(); return time; } catch (ParseException pe) { log.error(pe.getMessage(), pe); } return -1L; } private TreeObject getXObject() { return model; } /** * Create the Table */ private void initTable(final Table table) { // final Table table = new Table(parent, style); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.grabExcessHorizontalSpace = true; gridData.grabExcessVerticalSpace = true; // gridData.horizontalSpan = 3; gridData.heightHint = 200; table.setLayoutData(gridData); table.setLinesVisible(true); table.setHeaderVisible(true); // table.setSortDirection(0); // 1st column final TableColumn column = new TableColumn(table, SWT.LEFT, 0); // table.setSortColumn(column); // table.setSortDirection(SWT.UP); column.setText(Messages.DataClusterBrowserMainPage_13); column.setWidth(150); // column.setImage(getDefaultImage());//============ column.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) { ascending[0] = !ascending[0]; resultsViewer.setSorter(new TableSorter(0, ascending[0])); } public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { ascending[0] = !ascending[0]; resultsViewer.setSorter(new TableSorter(0, ascending[0])); if (ascending[0]) { table.setSortColumn(column); table.setSortDirection(SWT.DOWN); } else { table.setSortColumn(column); table.setSortDirection(SWT.UP); } } }); // 2nd column final TableColumn column1 = new TableColumn(table, SWT.LEFT, 1); // table.setSortColumn(column1); column1.setText(Messages.DataClusterBrowserMainPage_14); 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]; resultsViewer.setSorter(new TableSorter(1, ascending[1])); } public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { ascending[1] = !ascending[1]; resultsViewer.setSorter(new TableSorter(1, ascending[1])); if (ascending[1]) { table.setSortColumn(column1); table.setSortDirection(SWT.DOWN); } else { table.setSortColumn(column1); table.setSortDirection(SWT.UP); } } }); // 3rd column final TableColumn column2 = new TableColumn(table, SWT.LEFT, 2); // table.setSortColumn(column2); column2.setText(Messages.DataClusterBrowserMainPage_15); 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]; resultsViewer.setSorter(new TableSorter(2, ascending[2])); } public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { ascending[2] = !ascending[2]; resultsViewer.setSorter(new TableSorter(2, ascending[2])); if (ascending[2]) { table.setSortColumn(column2); table.setSortDirection(SWT.DOWN); } else { table.setSortColumn(column2); table.setSortDirection(SWT.UP); } } }); // return table; } protected boolean refreshData() { try { if (conceptCombo.isDisposed()) { return false; } if (getXObject().getEndpointAddress() == null) { return false; } TMDMService service = Util.getMDMService(getXObject()); WSDataCluster cluster = null; if (getXObject().getWsObject() == null) { // then fetch from server cluster = service.getDataCluster(new WSGetDataCluster((WSDataClusterPK) getXObject().getWsKey())); getXObject().setWsObject(cluster); } else { // it has been opened by an editor - use the object there // added for TMDM-3064 // the following may throw ServerException to identify the data continer not exist on the server cluster = service.getDataCluster(new WSGetDataCluster(new WSDataClusterPK(getXObject().getName()))); // if you could go to next line, that means the data container is on the server specified cluster = (WSDataCluster) getXObject().getWsObject(); } // add by myli; fix the bug:0013077: if the data is too much, just get the entities from the model instead // of from the container. String clusterName = URLEncoder.encode(cluster.getName(), "utf-8");//$NON-NLS-1$ // WSString countStr = port.count(new WSCount(new WSDataClusterPK(cluster.getName()), "*", null, 100)); //$NON-NLS-1$ // long count = Long.parseLong(countStr.getValue()); WSStringArray conceptsInDataCluster = service.getConceptsInDataCluster(new WSGetConceptsInDataCluster( new WSDataClusterPK(clusterName))); if (conceptsInDataCluster != null) { List<String> concepts = conceptsInDataCluster.getStrings(); conceptCombo.removeAll(); conceptCombo.add("*");//$NON-NLS-1$ for (String concept : concepts) { conceptCombo.add(concept); } } else { boolean selected = doSelectDataModelForEntityRecords(clusterName); if (!selected) { return false; } } conceptCombo.select(0); searchText.setFocus(); } catch (ServerException e) { log.error(e.getMessage(), e); MessageDialog.openError(getSite().getShell(), Messages._Error, Messages.DataClusterBrowser_dataContainerError); return false; } catch (WebServiceException e) { log.error(e.getMessage(), e); if (!Util.handleConnectionException(getSite().getShell(), e, null)) { MessageDialog.openError(getSite().getShell(), Messages._Error, Messages.DataClusterBrowser_connectionError); } return false; } catch (Exception e) { log.error(e.getMessage(), e); MessageDialog.openError(this.getSite().getShell(), Messages._Error, Messages.bind(Messages.DataClusterBrowser_error, e.getLocalizedMessage())); return false; } return true; } /** * @param clusterName * @throws XtentisException * @throws Exception */ private boolean doSelectDataModelForEntityRecords(String clusterName) throws XtentisException, Exception { // if (false) { // Modified by hbhong,to fix bug 21784| TreeParent treeParent = (TreeParent) getAdapter(TreeParent.class); DataModelSelectDialog dialog = new DataModelSelectDialog(getSite(), treeParent, clusterName); // The ending| bug:21784 dialog.setBlockOnOpen(true); dialog.open(); if (dialog.getReturnCode() == Window.OK) { List<String> allConcept = new ArrayList<String>(); String[] xpaths = dialog.getXpath(); for (String xpath : xpaths) { WSDataModel dm = Util.getMDMService(this.getXObject()).getDataModel(new WSGetDataModel(new WSDataModelPK(xpath))); if (dm == null) { return false; } List<String> concepts = Util.getConcepts(Util.getXSDSchema(dm.getXsdSchema())); allConcept.addAll(concepts); } String[] concepts = allConcept.toArray(new String[0]); TreeObject object = null; TreeObject[] children = treeParent.getChildren(); for (TreeObject element : children) { object = element; if (object.getType() == TreeObject.DATA_MODEL) { break; } } String revision = "";//$NON-NLS-1$ if (object != null) { // TMDM-2606: Don't expect data model to contain revision name (CE edition doesn't support // revisions). if (object.getDisplayName().contains(Messages.DataClusterBrowserMainPage_16) && object.getDisplayName().contains(Messages.DataClusterBrowserMainPage_17)) { revision = object.getDisplayName().substring(object.getDisplayName().indexOf("[") + 1,//$NON-NLS-1$ object.getDisplayName().indexOf("]"));//$NON-NLS-1$ } } for (int i = 0; i < concepts.length; i++) { String concept = concepts[i]; if (revision == null || revision.equals("")) { //$NON-NLS-1$ revision = "HEAD";//$NON-NLS-1$ } concepts[i] = concept + " " + "[" + revision + "]";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ } conceptCombo.removeAll(); conceptCombo.add("*");//$NON-NLS-1$ for (String concept : concepts) { conceptCombo.add(concept); } } else { conceptCombo.add("*");//$NON-NLS-1$ } return true; } private IWorkbenchPartSite getSite() { return site; } private Object getAdapter(Class<?> adapter) { if (page != null) { return page.getAdapter(adapter); } TreeParent treeParent = Util.getServerTreeParent(getXObject()); if (treeParent == null || treeParent.getChildren().length == 0) { TreeParent serverRoot = getRealTreeParent(); if (serverRoot != null) { treeParent = serverRoot; } } return treeParent; } private TreeParent getRealTreeParent() { TreeParent treeParent = null; TreeObject xObject = getXObject(); if (xObject != null) { TreeParent serverRoot = xObject.getServerRoot(); UserInfo user = serverRoot.getUser(); String serverName = serverRoot.getName(); String password = user.getPassword(); String url = user.getServerUrl(); String username = user.getUsername(); final XtentisServerObjectsRetriever retriever = new XtentisServerObjectsRetriever(serverName, url, username, password); retriever.setRetriveWSObject(true); try { retriever.run(new NullProgressMonitor()); treeParent = retriever.getServerRoot();// get the real server root as the treeParent } catch (InvocationTargetException e) { log.error(e.getMessage(), e); } catch (InterruptedException e) { log.error(e.getMessage(), e); } } return treeParent; } public TableViewer getResultsViewer() { return resultsViewer; } private String getPkAddition() { if (isMaster) { return ""; //$NON-NLS-1$ } return IDataClusterConstants.PK_ADDITION; } /*************************************************************** * 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) { LineItem li = (LineItem) element; switch (columnIndex) { case 0: return sdf.format(new Date(li.getTime())); case 1: return li.getConcept(); case 2: return Util.joinStrings(li.getIds(), "."); //$NON-NLS-1$ case 3: return li.getTaskId(); 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) { LineItem li1 = (LineItem) e1; LineItem li2 = (LineItem) e2; int res = 0; switch (column) { case 0: res = (int) (li1.getTime() - li2.getTime()); break; case 1: res = li1.getConcept().compareToIgnoreCase(li2.getConcept()); break; case 2: res = Util .joinStrings(li1.getIds(), ".").compareToIgnoreCase(Util.joinStrings(li2.getIds(), Messages.DataClusterBrowserMainPage_130)); //$NON-NLS-1$ break; default: res = 0; } if (asc) { return res; } else { return -res; } } } // ///////// public void changeToServer(MDMServerDef serverDef) { conceptCombo.removeAll(); model.setServerRoot(getServerRoot(serverDef)); resultsViewer.setInput(new LineItem[0]); setEnabled(false); } public boolean changeToDataContainer(TreeObject dataContainer) { dataContainer.setServerRoot(model.getServerRoot()); this.model = dataContainer; resultsViewer.setInput(new LineItem[0]); boolean refreshed = refreshData(); setEnabled(refreshed); return refreshed; } public TreeObject getDataContainer() { return model; } private TreeParent getServerRoot(MDMServerDef serverDef) { if (serverDef == null) { return null; } if (serverMap.containsKey(serverDef)) { return serverMap.get(serverDef); } String serverName = serverDef.getName(); String username = serverDef.getUser(); String password = serverDef.getPasswd(); String endpointaddress = serverDef.getUrl(); TreeParent serverRoot = new TreeParent(serverName, null, TreeObject._SERVER_, endpointaddress, username + ":" + (password == null ? "" : password));//$NON-NLS-1$//$NON-NLS-2$ UserInfo user = new UserInfo(); user.setUsername(username); user.setPassword(password); user.setServerUrl(endpointaddress); serverRoot.setUser(user); serverMap.put(serverDef, serverRoot); return serverRoot; } }