Package com.subgraph.vega.internal.ui.macros.macrodialog

Source Code of com.subgraph.vega.internal.ui.macros.macrodialog.MacroItemEditor

/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.internal.ui.macros.macrodialog;

import java.util.Iterator;

import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

import com.subgraph.vega.api.http.requests.IHttpRequestBuilder;
import com.subgraph.vega.api.model.macros.IHttpMacroItem;
import com.subgraph.vega.api.model.macros.IHttpMacroItemParam;
import com.subgraph.vega.ui.http.builder.BuilderParseException;
import com.subgraph.vega.ui.http.builder.IHttpBuilderPart;
import com.subgraph.vega.ui.util.dialogs.ErrorDialog;

public class MacroItemEditor extends Composite implements IHttpBuilderPart {
  private IHttpRequestBuilder requestBuilder;
  private IHttpMacroItem macroItem;
  private Button useCookiesButton;
  private Button keepCookiesButton;
  private TableViewer paramsTableViewer;
  private boolean paramsTableHasSelection;
  private Button createButton;
  private Button removeButton;
  private Button moveUpButton;
  private Button moveDownButton;

  public MacroItemEditor(Composite parent, IHttpRequestBuilder requestBuilder) {
    super(parent, SWT.NONE);
    this.requestBuilder = requestBuilder;
    setLayout(new GridLayout(1, false));

    createConfigGroup(this).setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
    createParamsGroup(this).setLayoutData(new GridData(GridData.FILL_BOTH));
  }

  @Override
  public Control getControl() {
    return this;
  }

  @Override
  public void setEditable(boolean editable) {
    useCookiesButton.setEnabled(editable);
    keepCookiesButton.setEnabled(editable);
    createButton.setEnabled(editable);
    removeButton.setEnabled(editable && paramsTableHasSelection);
    moveUpButton.setEnabled(editable && paramsTableHasSelection);
    moveDownButton.setEnabled(editable && paramsTableHasSelection);
  }

  @Override
  public void refresh() {
    try {
      if (macroItem != null) {
        macroItem.updateFromRequestBuilder(requestBuilder);
      }
    } catch (Exception e) {
      ErrorDialog.displayError(getShell(), "An unexpected error occurred while processing the request");
      e.printStackTrace();
      return;
    }
    if (macroItem != null) {
      useCookiesButton.setSelection(macroItem.getUseCookies());
      keepCookiesButton.setSelection(macroItem.getKeepCookies());
    } else {
      useCookiesButton.setSelection(false);
      keepCookiesButton.setSelection(false);
    }
    paramsTableViewer.setInput(macroItem);
  }

  @Override
  public void processContents() throws BuilderParseException {
    if (macroItem != null) {
      try {
        macroItem.setRequestBuilder(requestBuilder, null);
      } catch (Exception e) {
        ErrorDialog.displayError(getShell(), "An unexpected error occurred while processing the request");
        e.printStackTrace();
        return;
      }
      macroItem.setUseCookies(useCookiesButton.getSelection());
      macroItem.setKeepCookies(keepCookiesButton.getSelection());
    }
  }

  public void setMacroItem(IHttpMacroItem macroItem) {
    this.macroItem = macroItem;
  }
 
  private Composite createConfigGroup(Composite parent) {
    Group rootControl = new Group(parent, SWT.NONE);
    rootControl.setLayout(new GridLayout(2, false));
    rootControl.setText("Configuration");

    useCookiesButton = new Button(rootControl, SWT.CHECK);
    Label label = new Label(rootControl, SWT.NONE);
    label.setText("Use cookies in the request that were already set");

    keepCookiesButton = new Button(rootControl, SWT.CHECK);
    label = new Label(rootControl, SWT.NONE);
    label.setText("Keep cookies from the response");
   
    return rootControl;
  }

  private Composite createParamsGroup(Composite parent) {
    Group rootControl = new Group(parent, SWT.NONE);
    rootControl.setLayout(new GridLayout(2, false));
    rootControl.setText("Request Parameters");

    GridData gd = new GridData(GridData.FILL_BOTH);
    createParamsTable(rootControl, gd, 8).setLayoutData(gd);
    createParamsButtons(rootControl).setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
   
    return rootControl;
  }

  private Composite createParamsTable(Composite parent, GridData gd, int heightInRows) {
    final Composite rootControl = new Composite(parent, SWT.NONE);
    final TableColumnLayout tcl = new TableColumnLayout();
    rootControl.setLayout(tcl);

    paramsTableViewer = new TableViewer(rootControl, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
    paramsTableViewer.setContentProvider(new MacroItemParamsTableContentProvider());
    paramsTableViewer.addSelectionChangedListener(createParamsTableSelectionChangedListener());
    createParamsTableColumns(paramsTableViewer, tcl);
    final Table table = paramsTableViewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    gd.heightHint = table.getItemHeight() * heightInRows;

    return rootControl;
  }

  private ISelectionChangedListener createParamsTableSelectionChangedListener() {
    return new ISelectionChangedListener() {
      @Override
      public void selectionChanged(SelectionChangedEvent event) {
        paramsTableHasSelection = !event.getSelection().isEmpty();
        removeButton.setEnabled(paramsTableHasSelection);
        moveUpButton.setEnabled(paramsTableHasSelection);
        moveDownButton.setEnabled(paramsTableHasSelection);
      }
    };
  }

  private void createParamsTableColumns(TableViewer viewer, TableColumnLayout layout) {
    final String[] titles = { "Name", "Source", "Value", };
    final ColumnLayoutData[] layoutData = {
      new ColumnPixelData(70, true, true),
      new ColumnPixelData(140, true, true),
      new ColumnWeightData(100, 100, true),
    };
    final EditingSupport editorList[] = {
      null,
      new MacroItemParamValueSourceEditingSupport(viewer),
      new MacroItemParamValueEditingSupport(viewer),
    };
    final ColumnLabelProvider providerList[] = {
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          return ((IHttpMacroItemParam) element).getName();
        }
      },
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          return ((IHttpMacroItemParam) element).getValueSource().getDescription();
        }
      },
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          return ((IHttpMacroItemParam) element).getValue();
        }
      },
    };
    for (int i = 0; i < titles.length; i++) {
      final TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
      final TableColumn c = column.getColumn();
      layout.setColumnData(c, layoutData[i]);
      c.setText(titles[i]);
      c.setMoveable(true);
      column.setEditingSupport(editorList[i]);
      column.setLabelProvider(providerList[i]);
   
  }
 
  private Composite createParamsButtons(Composite parent) {
    final Composite rootControl = new Composite(parent, SWT.NONE);
    rootControl.setLayout(new GridLayout(1, true));

    createButton = new Button(rootControl, SWT.PUSH);
    createButton.setText("create");
    createButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    createButton.addSelectionListener(createCreateButtonSelectionListener());
    removeButton = new Button(rootControl, SWT.PUSH);
    removeButton.setText("remove");
    removeButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    removeButton.addSelectionListener(createRemoveButtonSelectionListener());
    moveUpButton = new Button(rootControl, SWT.PUSH);
    moveUpButton.setText("move up");
    moveUpButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    moveUpButton.addSelectionListener(createMoveUpButtonSelectionListener());
    moveDownButton = new Button(rootControl, SWT.PUSH);
    moveDownButton.setText("move down");
    moveDownButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
    moveDownButton.addSelectionListener(createMoveDownButtonSelectionListener());
   
    return rootControl;
  }

  private SelectionListener createCreateButtonSelectionListener() {
    return new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {

      }
    };
  }
 
  private SelectionListener createRemoveButtonSelectionListener() {
    return new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = (IStructuredSelection) paramsTableViewer.getSelection();
        for (Iterator<?> i = selection.iterator(); i.hasNext();) {
          macroItem.removeParam((IHttpMacroItemParam) i.next());
        }
        paramsTableViewer.refresh();
      }
    };
  }

  private SelectionListener createMoveUpButtonSelectionListener() {
    return new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = (IStructuredSelection) paramsTableViewer.getSelection();
        for (Iterator<?> i = selection.iterator(); i.hasNext();) {
          int idx = macroItem.indexOfParam((IHttpMacroItemParam) i.next());
          if (idx != 0) {
            macroItem.swapParams(idx - 1, idx);
          } else {
            break;
          }
        }
        paramsTableViewer.refresh();
      }
    };
  }

  private SelectionListener createMoveDownButtonSelectionListener() {
    return new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = (IStructuredSelection) paramsTableViewer.getSelection();
        int idx[] = new int[selection.size()];
        int offset = 1;
        for (Iterator<?> i = selection.iterator(); i.hasNext(); offset++) {
          idx[idx.length - offset] = macroItem.indexOfParam((IHttpMacroItemParam) i.next());
        }

        if (idx[0] + 1 != macroItem.paramsSize()) {
          for (int i = 0; i < idx.length; i++) {
            macroItem.swapParams(idx[i], idx[i] + 1);
          }
        }
        paramsTableViewer.refresh();
      }
    };
  }
 
}
TOP

Related Classes of com.subgraph.vega.internal.ui.macros.macrodialog.MacroItemEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.