// ============================================================================
//
// 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.dialogs;
import java.awt.Panel;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
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.Label;
import org.eclipse.ui.IWorkbenchPartSite;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.models.TreeParent;
import com.amalto.workbench.providers.ServerTreeContentProvider;
import com.amalto.workbench.providers.ServerTreeLabelProvider;
public class DataModelSelectDialog extends org.eclipse.jface.dialogs.Dialog {
// The ending| bug:21784
private static final long serialVersionUID = 1L;
// Modified by hbhong,to fix bug 21784|Add a TreeParent parameter to constructor
private final TreeParent treeParent;
private IWorkbenchPartSite site;
private String clusterName;// cluster for default datamodel selection
protected Label schemaLabel = null;
private String title = Messages.DataModelSelectDialog_Title;
private String[] xpaths;
protected Panel panel;
protected Button add;
protected SelectionListener listener;
private ServerTreeContentProvider contentProvider;
protected TreeViewer domViewer;
public DataModelSelectDialog(IWorkbenchPartSite iWorkbenchPartSite, TreeParent treeParent2, String clusterName) {
super(iWorkbenchPartSite.getShell());
this.site = iWorkbenchPartSite;
this.treeParent = treeParent2;
this.clusterName = clusterName;
}
@Override
protected Control createDialogArea(Composite parent) {
parent.getShell().setText(Messages.DataModelSelectDialog_SelectDataModel);
Composite composite = (Composite) super.createDialogArea(parent);
GridLayout layout = (GridLayout) composite.getLayout();
layout.makeColumnsEqualWidth = false;
schemaLabel = new Label(composite, SWT.NONE);
schemaLabel.setText(title);
GridData dg = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1);
domViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.MULTI);
domViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
((GridData) domViewer.getControl().getLayoutData()).heightHint = 400;
((GridData) domViewer.getControl().getLayoutData()).widthHint = 400;
changeToResource();
selectDataModel();
return composite;
}
private void changeToResource() {
TreeParent parent = null;
// Modified by hbhong,to fix bug 21784
TreeObject[] children = treeParent.getChildren();
for (TreeObject element : children) {
parent = (TreeParent)element;
if (parent.getType() == TreeObject.DATA_MODEL) {
break;
}
}
// The ending| bug:21784
contentProvider = new ServerTreeContentProvider(site, parent);
setTreeContentProvider(contentProvider);
domViewer.setLabelProvider(new ServerTreeLabelProvider());
domViewer.setSorter(new ViewerSorter() {
@Override
public int category(Object element) {
if (element instanceof TreeParent) {
TreeParent category = (TreeParent) element;
if (category.getType() == TreeObject.CATEGORY_FOLDER) {
return -1;
}
}
return 0;
}
});
domViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent e) {
StructuredSelection sel = (StructuredSelection) e.getSelection();
List<String> xpathList = new ArrayList<String>();
Object[] selections = sel.toArray();
for (Object obj : selections) {
TreeObject treeObj = (TreeObject) obj;
if (treeObj != null && treeObj.getType() == TreeObject.DATA_MODEL) {
xpathList.add(treeObj.getDisplayName());
}
}
xpaths = xpathList.toArray(new String[0]);
if (getButton(IDialogConstants.OK_ID) != null) {
getButton(IDialogConstants.OK_ID).setEnabled(xpathList.size() > 0);
}
}
});
domViewer.setInput(site);
}
private void selectDataModel() {
Object input = domViewer.getInput();
TreeObject[] elements = (TreeObject[]) contentProvider.getElements(input);
selectDefaultDataModel(elements);
domViewer.addTreeListener(new ITreeViewerListener() {
public void treeExpanded(TreeExpansionEvent event) {
TreeParent parent = (TreeParent) event.getElement();
TreeObject[] children = parent.getChildren();
selectDefaultDataModel(children);
}
public void treeCollapsed(TreeExpansionEvent event) {//
}
});
}
private void selectDefaultDataModel(TreeObject[] children) {
for (TreeObject treeObj : children) {
if (treeObj.getType() == TreeObject.DATA_MODEL && clusterName.equals(treeObj.getName())) {
domViewer.setSelection(new StructuredSelection(treeObj));
break;
}
}
}
private void setTreeContentProvider(ServerTreeContentProvider treeContentProvider) {
if (this.domViewer.getContentProvider() != null) {
this.domViewer.getContentProvider().dispose();
}
domViewer.setContentProvider(treeContentProvider);
}
@Override
protected Control createButtonBar(Composite parent) {
Control btnBar = super.createButtonBar(parent);
getButton(IDialogConstants.OK_ID).setText(Messages.DataModelSelectDialog_Ok);
return btnBar;
}
public String[] getXpath() {
return xpaths;
}
}