com.amalto.workbench.dialogs.MenuEntryDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.amalto.workbench.dialogs.MenuEntryDialog.java

Source

// ============================================================================
//
// Copyright (C) 2006-2017 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.LinkedHashMap;
import java.util.List;
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.IDialogConstants;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionListener;
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.Control;
import org.eclipse.swt.widgets.Label;
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 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.utils.HttpClientUtil;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.webservices.WSMenuEntry;
import com.amalto.workbench.webservices.WSMenuMenuEntriesDescriptions;
import com.amalto.workbench.widgets.FileSelectWidget;

public class MenuEntryDialog extends Dialog {

    private static Log log = LogFactory.getLog(MenuEntryDialog.class);

    private Text idText = null;

    private Text contextText = null;

    private FileSelectWidget iconPathText;

    private Text applicationNameText = null;

    protected Composite descriptionsComposite;

    protected Text labelText;

    protected Combo languagesCombo;

    protected TableViewer descriptionsViewer;

    private WSMenuEntry wsMenuEntry = null;

    protected LinkedHashMap<String, String> descriptionsMap = new LinkedHashMap<String, String>();

    private SelectionListener caller = null;

    private String title = "";//$NON-NLS-1$

    private boolean isChanged = true;

    private String uripre = "";//$NON-NLS-1$

    private final boolean isLocal;

    private TreeObject treeObject;

    /**
     * @param parentShell
     */
    public MenuEntryDialog(WSMenuEntry wsMenuEntry, SelectionListener caller, Shell parentShell, String title,
            String uripre, boolean isLocal, TreeObject treeObject) {
        super(parentShell);
        this.wsMenuEntry = wsMenuEntry;
        this.caller = caller;
        this.title = title;
        this.uripre = uripre;
        this.isLocal = isLocal;
        this.treeObject = treeObject;
        // feed the descritions hashmap used by the labels Table
        List<WSMenuMenuEntriesDescriptions> descriptions = wsMenuEntry.getDescriptions();
        if (descriptions != null) {
            for (WSMenuMenuEntriesDescriptions description : descriptions) {
                descriptionsMap.put(description.getLanguage().toLowerCase(), description.getLabel());
            }
        }
    }

    public MenuEntryDialog(WSMenuEntry wsMenuEntry, SelectionListener caller, Shell parentShell, String title,
            boolean isChanged, String uripre, boolean isLocal, TreeObject treeObject) {
        super(parentShell);
        this.wsMenuEntry = wsMenuEntry;
        this.caller = caller;
        this.title = title;
        this.isChanged = isChanged;
        this.uripre = uripre;
        this.isLocal = isLocal;
        this.treeObject = treeObject;
        // feed the descritions hashmap used by the labels Table
        List<WSMenuMenuEntriesDescriptions> descriptions = wsMenuEntry.getDescriptions();
        if (descriptions != null) {
            for (WSMenuMenuEntriesDescriptions description : descriptions) {
                descriptionsMap.put(description.getLanguage().toLowerCase(), description.getLabel());
            }
        }
    }

    @Override
    protected Control createDialogArea(Composite parent) {

        // Should not really be here but well,....
        parent.getShell().setText(this.title);

        Composite composite = (Composite) super.createDialogArea(parent);

        GridLayout layout = (GridLayout) composite.getLayout();
        layout.numColumns = 3;
        // layout.verticalSpacing = 10;

        Label idLabel = new Label(composite, SWT.NONE);
        idLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        idLabel.setText(Messages.MenuEntryDialog_Id);
        if (this.isChanged) {
            idText = new Text(composite, SWT.NONE);
        } else {
            idText = new Text(composite, SWT.NONE | SWT.READ_ONLY);
        }

        idText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
        ((GridData) idText.getLayoutData()).widthHint = 300;
        idText.setDoubleClickEnabled(false);

        Label contextLabel = new Label(composite, SWT.NONE);
        contextLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        contextLabel.setText(Messages.MenuEntryDialog_Context);

        contextText = new Text(composite, SWT.NONE);
        contextText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
        contextText.setDoubleClickEnabled(false);

        Label applicationNameLabel = new Label(composite, SWT.NONE);
        applicationNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        applicationNameLabel.setText(Messages.MenuEntryDialog_Application);

        applicationNameText = new Text(composite, SWT.NONE);
        applicationNameText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
        Label iconPathLabel = new Label(composite, SWT.NONE);
        iconPathLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        iconPathLabel.setText(Messages.MenuEntryDialog_IconPath);
        iconPathText = new FileSelectWidget(composite, "", new String[] { "*.png", "*.gif", "*.jpg" }, "", true);//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$ //$NON-NLS-5$

        // Labels
        descriptionsComposite = new Composite(composite, SWT.BORDER);
        descriptionsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
        descriptionsComposite.setLayout(new GridLayout(3, false));

        Label descriptionsLabel = new Label(descriptionsComposite, SWT.NULL);
        descriptionsLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
        descriptionsLabel.setText(Messages.MenuEntryDialog_MenuEntryLabels);

        languagesCombo = new Combo(descriptionsComposite, SWT.READ_ONLY | SWT.DROP_DOWN | SWT.SINGLE);
        languagesCombo.setLayoutData(new GridData(SWT.BEGINNING, SWT.NONE, false, false, 1, 1));
        Set<String> languages = Util.lang2iso.keySet();
        for (Object element : languages) {
            String language = (String) element;
            languagesCombo.add(language);
        }
        languagesCombo.addModifyListener(new ModifyListener() {

            public void modifyText(ModifyEvent e) {
            }
        });
        languagesCombo.select(0);

        labelText = new Text(descriptionsComposite, SWT.BORDER | SWT.SINGLE);
        labelText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
        labelText.addKeyListener(new KeyListener() {

            public void keyPressed(KeyEvent e) {
            }

            public void keyReleased(KeyEvent e) {
                if ((e.stateMask == 0) && (e.character == SWT.CR)) {
                    String isoCode = Util.lang2iso.get(languagesCombo.getText());
                    descriptionsMap.put(isoCode, labelText.getText());
                    descriptionsViewer.refresh();
                }
            }
        });

        Button addLabelButton = new Button(descriptionsComposite, SWT.PUSH);
        addLabelButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
        addLabelButton.setImage(ImageCache.getCreatedImage(EImage.ADD_OBJ.getPath()));
        addLabelButton.setToolTipText(Messages.MenuEntryDialog_Add);
        addLabelButton.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
            };

            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                String isoCode = Util.lang2iso.get(languagesCombo.getText());
                descriptionsMap.put(isoCode, labelText.getText());
                descriptionsViewer.refresh();
            };
        });

        final String LANGUAGE = Messages.MenuEntryDialog_Language;
        final String LABEL = Messages.MenuEntryDialog_Label;

        descriptionsViewer = new TableViewer(descriptionsComposite,
                SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
        descriptionsViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
        ((GridData) descriptionsViewer.getControl().getLayoutData()).heightHint = 100;
        // Set up the underlying table
        Table table = descriptionsViewer.getTable();
        // table.setLayoutData(new GridData(GridData.FILL_BOTH));

        new TableColumn(table, SWT.LEFT).setText(LANGUAGE);
        new TableColumn(table, SWT.CENTER).setText(LABEL);
        table.getColumn(0).setWidth(150);
        table.getColumn(1).setWidth(150);
        for (int i = 2, n = table.getColumnCount(); i < n; i++) {
            table.getColumn(i).pack();
        }

        table.setHeaderVisible(true);
        table.setLinesVisible(true);

        // Create the cell editors --> We actually discard those later: not natural for an user
        CellEditor[] editors = new CellEditor[2];
        editors[0] = new TextCellEditor(table);
        editors[1] = new TextCellEditor(table);
        descriptionsViewer.setCellEditors(editors);

        // set the content provider
        descriptionsViewer.setContentProvider(new IStructuredContentProvider() {

            public void dispose() {
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            public Object[] getElements(Object inputElement) {
                // System.out.println("getElements() ");
                LinkedHashMap<String, String> descs = (LinkedHashMap<String, String>) inputElement;
                Set<String> languages = descs.keySet();
                ArrayList<DescriptionLine> lines = new ArrayList<DescriptionLine>();
                for (Object element : languages) {
                    String language = (String) element;
                    DescriptionLine line = new DescriptionLine(Util.iso2lang.get(language), descs.get(language));
                    lines.add(line);
                }
                // we return an instance line made of a Sring and a boolean
                return lines.toArray(new DescriptionLine[lines.size()]);
            }
        });

        // set the label provider
        descriptionsViewer.setLabelProvider(new ITableLabelProvider() {

            public boolean isLabelProperty(Object element, String property) {
                return false;
            }

            public void dispose() {
            }

            public void addListener(ILabelProviderListener listener) {
            }

            public void removeListener(ILabelProviderListener listener) {
            }

            public String getColumnText(Object element, int columnIndex) {
                // System.out.println("getColumnText() "+columnIndex);
                DescriptionLine line = (DescriptionLine) element;
                switch (columnIndex) {
                case 0:
                    return line.getLanguage();
                case 1:
                    return line.getLabel();
                }
                return "";//$NON-NLS-1$
            }

            public Image getColumnImage(Object element, int columnIndex) {
                return null;
            }
        });

        // Set the column properties
        descriptionsViewer.setColumnProperties(new String[] { LANGUAGE, LABEL });

        // set the Cell Modifier
        descriptionsViewer.setCellModifier(new ICellModifier() {

            public boolean canModify(Object element, String property) {
                // if (INSTANCE_ACCESS.equals(property)) return true; Deactivated
                return false;
            }

            public void modify(Object element, String property, Object value) {
                // System.out.println("modify() "+element.getClass().getName()+": "+property+": "+value);
                // DescriptionLine line =
                // (DescriptionLine)((IStructuredSelection)instancesViewer.getSelection()).getFirstElement();
                // deactivated: editing in places is not natural for users
            }

            public Object getValue(Object element, String property) {
                // System.out.println("getValue() "+property);
                DescriptionLine line = (DescriptionLine) element;
                if (LANGUAGE.equals(property)) {
                    return line.getLanguage();
                }
                if (LABEL.equals(property)) {
                    return line.getLabel();
                }
                return null;
            }
        });

        // Listen for changes in the selection of the viewer to display additional parameters
        descriptionsViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(SelectionChangedEvent event) {
            }
        });

        // display for Delete Key events to delete an instance
        descriptionsViewer.getTable().addKeyListener(new KeyListener() {

            public void keyPressed(KeyEvent e) {
            }

            public void keyReleased(KeyEvent e) {
                // System.out.println("Table keyReleased() ");
                if ((e.stateMask == 0) && (e.character == SWT.DEL) && (descriptionsViewer.getSelection() != null)) {
                    DescriptionLine line = (DescriptionLine) ((IStructuredSelection) descriptionsViewer
                            .getSelection()).getFirstElement();
                    String isoCode = Util.lang2iso.get(line.getLanguage());
                    LinkedHashMap<String, String> descs = (LinkedHashMap<String, String>) descriptionsViewer
                            .getInput();
                    descs.remove(isoCode);
                    descriptionsViewer.refresh();
                }
            }
        });

        descriptionsViewer.refresh();

        if (wsMenuEntry != null) {
            idText.setText(wsMenuEntry.getId() == null ? "" : wsMenuEntry.getId());//$NON-NLS-1$
            contextText.setText(wsMenuEntry.getContext() == null ? "" : wsMenuEntry.getContext());//$NON-NLS-1$
            applicationNameText.setText(wsMenuEntry.getApplication() == null ? "" : wsMenuEntry.getApplication());//$NON-NLS-1$
            iconPathText.setFilename(wsMenuEntry.getIcon() == null ? "" : wsMenuEntry.getIcon());//$NON-NLS-1$
            descriptionsViewer.setInput(descriptionsMap);
        }

        idText.setFocus();

        return composite;
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        super.createButtonsForButtonBar(parent);
        getButton(IDialogConstants.OK_ID).addSelectionListener(this.caller);
        getButton(IDialogConstants.CANCEL_ID).addSelectionListener(this.caller);
    }

    @Override
    protected void okPressed() {
        setReturnCode(OK);
        getButton(IDialogConstants.OK_ID).setData("dialog", MenuEntryDialog.this);//$NON-NLS-1$
        if (!isLocal) {
            try {
                String icon = "";//$NON-NLS-1$
                // if(!wsMenuEntry.getIcon().equalsIgnoreCase(getIconPathText().getText())){
                if (wsMenuEntry.getIcon() != null) {
                    if (!wsMenuEntry.getIcon().equalsIgnoreCase(getIconPathText().getText())) {
                        HttpClientUtil.uploadImageFile(
                                uripre + "/imageserver/secure/ImageDeleteServlet?uri=" + wsMenuEntry.getIcon(), "", //$NON-NLS-1$//$NON-NLS-2$
                                null, null, treeObject.getUsername(), treeObject.getPassword(), null);
                        if (!"".equalsIgnoreCase(getIconPathText().getText())) {
                            icon = HttpClientUtil.uploadImageFile(
                                    uripre + "/imageserver/secure/ImageUploadServlet?changeFileName=false", //$NON-NLS-1$
                                    getIconPathText().getText(),
                                    null, null, treeObject.getUsername(), treeObject.getPassword(), null);
                        }
                        getIconPathText().setText(icon);
                    }
                } else if (!"".equalsIgnoreCase(getIconPathText().getText())) {//$NON-NLS-1$
                    icon = HttpClientUtil.uploadImageFile(
                            uripre + "/imageserver/secure/ImageUploadServlet?changeFileName=false", //$NON-NLS-1$
                            getIconPathText().getText(), null, null, treeObject.getUsername(), treeObject.getPassword(), null);
                    getIconPathText().setText(icon);
                }
                // ResourcesUtil.postPicFromFile(getIdText().getText(), getIconPathText().getText(),uripre);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
        // no close let Action Handler handle it
    }

    @Override
    protected void cancelPressed() {
        setReturnCode(CANCEL);
        getButton(IDialogConstants.CANCEL_ID).setData("dialog", MenuEntryDialog.this);//$NON-NLS-1$
        // no close let Action Handler handle it
    }

    /**************************************************************************************************
     * Public getters read by caller
     ***************************************************************************************************/

    public Text getApplicationNameText() {
        return applicationNameText;
    }

    public Text getIconPathText() {
        return iconPathText.getText();
    }

    public Text getContextText() {
        return contextText;
    }

    public Text getIdText() {
        return idText;
    }

    public TableViewer getDescriptionsTableViewer() {
        return descriptionsViewer;
    }

    /**************************************************************************************************
     * A table viewer line
     ***************************************************************************************************/
    class DescriptionLine {

        private String language;

        private String label;

        public DescriptionLine(String language, String label) {
            super();
            this.language = language;
            this.label = label;
        }

        public String getLabel() {
            return label;
        }

        public void setLabel(String label) {
            this.label = label;
        }

        public String getLanguage() {
            return language;
        }

        public void setLanguage(String language) {
            this.language = language;
        }

    }

}