// ============================================================================ // // 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.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.image.ImageCache; public class QueryParametersDialog extends Dialog { private static Log log = LogFactory.getLog(QueryParametersDialog.class); public final static int BUTTON_OK = 10; public final static int BUTTON_CANCEL = 5; protected int buttonPressed = BUTTON_CANCEL; protected String[] parameters; private LinkedHashMap<Integer, Text> map; /** * @param parentShell */ public QueryParametersDialog(Shell parentShell, String[] parameters) { super(parentShell); this.parameters = parameters; } protected Control createDialogArea(Composite parent) { try { // Should not really be here but well,.... parent.getShell().setText(Messages.QueryParametersDialog_); Composite composite = (Composite) super.createDialogArea(parent); GridLayout layout = (GridLayout) composite.getLayout(); layout.numColumns = 2; map = new LinkedHashMap<Integer, Text>(); for (int i = 0; i < parameters.length; i++) { Label nameLabel = new Label(composite, SWT.NULL); nameLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1)); nameLabel.setText("%" + i + " ");//$NON-NLS-1$//$NON-NLS-2$ // name Text nameText = new Text(composite, SWT.BORDER); nameText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); nameText.setText(parameters[i]); map.put(new Integer(i), nameText); } return composite; } catch (Exception e) { log.error(e.getMessage(), e); MessageDialog.openError(this.getShell(), Messages._Error, Messages.QueryParametersDialog_ErroMsg + e.getLocalizedMessage()); return null; } } protected void createButtonsForButtonBar(Composite parent) { createButton(parent, BUTTON_OK, Messages.QueryParametersDialog_Ok, false); createButton(parent, BUTTON_CANCEL, Messages.Cancel, false); } @Override protected void buttonPressed(int buttonId) { this.buttonPressed = buttonId; switch (buttonId) { case BUTTON_OK: { // fill parameters back Set<Integer> keys = map.keySet(); int i = 0; for (Iterator iter = keys.iterator(); iter.hasNext();) { Integer key = (Integer) iter.next(); parameters[i++] = (map.get(key)).getText(); } close(); break; } case BUTTON_CANCEL: close(); } } /** * DOM Tree Content Provider * * @author bgrieder * */ class DOMTreeContentProvider implements IStructuredContentProvider, ITreeContentProvider { public DOMTreeContentProvider() { } public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { return getChildren(parent); } public Object getParent(Object child) { // if (child instanceof Element) { return ((Element) child).getParentNode(); // } // return null; } public Object[] getChildren(Object parent) { if (parent instanceof Document) return new Object[] { ((Document) parent).getDocumentElement() }; if (parent instanceof Element) { NodeList nl = ((Element) parent).getChildNodes(); if (nl == null) return null; ArrayList<Element> list = new ArrayList<Element>(); for (int i = 0; i < nl.getLength(); i++) { if (nl.item(i) instanceof Element) list.add((Element) nl.item(i)); } if (list.size() == 0) return null; else return list.toArray(new Element[list.size()]); } return null; } public boolean hasChildren(Object parent) { if (parent instanceof Document) return true; if (parent instanceof Element) return ((Element) parent).getChildNodes().getLength() > 1; return false; } } /** * DOM Tree Label Provider * * @author bgrieder * */ class DOMTreeLabelProvider extends LabelProvider { public String getText(Object obj) { if (obj instanceof Element) { Element e = (Element) obj; if (((Element) obj).getChildNodes().getLength() > 1) return e.getLocalName(); else return e.getLocalName() + ": " + e.getTextContent();//$NON-NLS-1$ } return "?? " + obj.getClass().getName() + " : " + obj.toString();//$NON-NLS-1$//$NON-NLS-2$ } public Image getImage(Object obj) { if (obj instanceof Element) { if (((Element) obj).getChildNodes().getLength() > 1) return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER); else return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); } return ImageCache.getImage("icons/small_warn.gif").createImage();//$NON-NLS-1$ // return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); } }// Class DOM Tree Label Provider public int getButtonPressed() { return buttonPressed; } public String[] getParameters() { return parameters; } }