Package com.subgraph.vega.ui.http.intercept.config

Source Code of com.subgraph.vega.ui.http.intercept.config.ConfigureInterceptionContent

/*******************************************************************************
* 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.ui.http.intercept.config;

import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
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.ComboViewer;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
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.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.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.events.IEvent;
import com.subgraph.vega.api.events.IEventHandler;
import com.subgraph.vega.api.http.proxy.HttpInterceptorLevel;
import com.subgraph.vega.api.http.proxy.IHttpInterceptor;
import com.subgraph.vega.api.http.proxy.IProxyTransaction.TransactionDirection;
import com.subgraph.vega.api.model.IModel;
import com.subgraph.vega.api.model.IWorkspace;
import com.subgraph.vega.api.model.conditions.ConditionSetChanged;
import com.subgraph.vega.api.model.conditions.IHttpCondition;
import com.subgraph.vega.api.model.conditions.IHttpConditionManager;
import com.subgraph.vega.api.model.conditions.IHttpConditionSet;
import com.subgraph.vega.ui.http.Activator;
import com.subgraph.vega.ui.http.conditions.ConditionInput;
import com.subgraph.vega.ui.util.dialogs.IConfigDialogContent;

public class ConfigureInterceptionContent implements IConfigDialogContent {
  private static final Image IMAGE_CHECKED = Activator.getImageDescriptor("icons/checked.png").createImage();
  private static final Image IMAGE_UNCHECKED = Activator.getImageDescriptor("icons/unchecked.png").createImage();
  private final IModel model;
  private final TransactionDirection direction;
  private final IEventHandler conditionSetEventHandler;
  private ComboViewer comboViewerInterceptorLevel;
  private TableViewer tableViewerBreakpoints;
  private ConditionInput conditionInput;
  private IHttpInterceptor interceptor;
  private IHttpConditionSet conditionSet;
  private Composite composite;
 
  public ConfigureInterceptionContent(IModel model, TransactionDirection direction) {
    this.model = model;
    final IWorkspace workspace = model.getCurrentWorkspace();
    final IHttpConditionManager conditionManager = (workspace == null) ? (null) : (workspace.getHttpConditionMananger());
    this.conditionInput = new ConditionInput(conditionManager);
    this.direction = direction;
    this.conditionSetEventHandler = createConditionSetEventHandler();
    this.conditionSet = model.addConditionSetTracker(getConditionSetName(), conditionSetEventHandler);
  }
  private IEventHandler createConditionSetEventHandler() {
    return new IEventHandler() {
      @Override
      public void handleEvent(IEvent event) {
        if(event instanceof ConditionSetChanged)
          onConditionSetChanged((ConditionSetChanged) event);
      }     
    };
  }
  @Override
  public Composite createContents(Composite parent) {
    composite = new Composite(parent, SWT.NONE);
    composite.setLayout(new GridLayout(1, true));
    composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    createInterceptorOptions(composite).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
    createBreakpointsEditor(composite).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    interceptor = Activator.getDefault().getProxyService().getInterceptor();
    comboViewerInterceptorLevel.setSelection(new StructuredSelection(interceptor.getInterceptLevel(direction)));
    setConditionSetInput();
    return composite;
  }

  @Override
  public String getTitle() {
    return "Interceptor Options";
  }

  @Override
  public String getMessage() {
    return "Set up breakpoint for interceptor";
  }

  @Override
  public Control getFocusControl() {
    return composite;
  }

  @Override
  public void onClose() {
    model.removeConditionSetTracker(getConditionSetName(), conditionSetEventHandler);
  }

  @Override
  public void onOk() { 
  }
 
  private String getConditionSetName() {
    switch(direction) {
    case DIRECTION_REQUEST:
      return IHttpConditionManager.CONDITION_SET_BREAKPOINTS_REQUEST;
    case DIRECTION_RESPONSE:
      return IHttpConditionManager.CONDITION_SET_BREAKPOINTS_RESPONSE;
    }
    return null;
  }

  private void setConditionSetInput() {
    if(tableViewerBreakpoints == null || tableViewerBreakpoints.getContentProvider() == null)
      return;
    if(conditionSet == null)
      tableViewerBreakpoints.setInput(null);
    else
      tableViewerBreakpoints.setInput(conditionSet.getAllConditions());
  }
 
  private void onConditionSetChanged(ConditionSetChanged event) {
    conditionSet = event.getConditionSet();
    setConditionSetInput();
  }

  protected Control createDialogArea(Composite parent) {
   
    parent.setLayout(new GridLayout(1, true));
    createInterceptorOptions(parent).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
    createBreakpointsEditor(parent).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
    interceptor = Activator.getDefault().getProxyService().getInterceptor();
    comboViewerInterceptorLevel.setSelection(new StructuredSelection(interceptor.getInterceptLevel(direction)));
    setConditionSetInput();
    return parent;
  }

  void dispose() {
    model.removeConditionSetTracker(getConditionSetName(), conditionSetEventHandler);
  }

  public TransactionDirection getDirection() {
    return direction;
  }

  private Composite createInterceptorOptions(Composite parent) {
    final Group rootControl = new Group(parent, SWT.NONE);
    rootControl.setText("Interceptor Options");
    rootControl.setLayout(new GridLayout(2, false));

    final Label label = new Label(rootControl, SWT.NONE);
    label.setText("Intercept for:");

    comboViewerInterceptorLevel = new ComboViewer(rootControl, SWT.READ_ONLY);
    comboViewerInterceptorLevel.setContentProvider(new ArrayContentProvider());
    comboViewerInterceptorLevel.setLabelProvider(new LabelProvider() {
      public String getText(Object element) {
        return ((HttpInterceptorLevel) element).getName();
      }
    });
    comboViewerInterceptorLevel.setInput(HttpInterceptorLevel.values());
    comboViewerInterceptorLevel.addSelectionChangedListener(createSelectionChangedListenerComboViewerInterceptorLevel());
   
    return rootControl;
  }

  private ISelectionChangedListener createSelectionChangedListenerComboViewerInterceptorLevel() {
    return new ISelectionChangedListener() {
      public void selectionChanged(final SelectionChangedEvent e) {
        HttpInterceptorLevel level = (HttpInterceptorLevel) ((IStructuredSelection) comboViewerInterceptorLevel.getSelection()).getFirstElement();
        if (level != null) {
          interceptor.setInterceptLevel(direction, level);
        }
      }
    };
  }
  private Composite createBreakpointsEditor(Composite parent) {
    final Group rootControl = new Group(parent, SWT.NONE);
    rootControl.setText("Breakpoints");
    rootControl.setLayout(new GridLayout(2, false));

    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
    final Composite compTable = createTableBreakpoints(rootControl, gd, 7);
    compTable.setLayoutData(gd);
    final Composite compTableButtons = createTableBreakpointsButtons(rootControl);
    compTableButtons.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));

    final Composite compCreate = createCreatorBreakpoints(rootControl);
    compCreate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    final Composite compCreateButtons = createCreatorBreakpointsButtons(rootControl);
    compCreateButtons.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));

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

    tableViewerBreakpoints = new TableViewer(rootControl, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
    createTableBreakpointsColumns(tableViewerBreakpoints, tcl);
    tableViewerBreakpoints.setContentProvider(new ArrayContentProvider());
    final Table table = tableViewerBreakpoints.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    gd.heightHint = table.getItemHeight() * heightInRows;

    return rootControl;
  }

  private void createTableBreakpointsColumns(TableViewer viewer, TableColumnLayout layout) {
    final String[] titles = { "", "Type", "Matches", "Pattern", };
    final ColumnLayoutData[] layoutData = {
      new ColumnPixelData(16, false, true),
      new ColumnPixelData(150, true, true),
      new ColumnPixelData(150, true, true),
      new ColumnWeightData(100, 100, true),
    };
    final EditingSupport editorList[] = {
        new BreakpointEnabledEditingSupport(viewer),
        new BreakpointTypeEditingSupport(viewer),
        new BreakpointMatchTypeEditingSupport(viewer),
        new BreakpointPatternEditingSupport(viewer),
    };
    final ColumnLabelProvider providerList[] = {
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          return null;
        }

        @Override
        public Image getImage(Object element) {
          if(((IHttpCondition) element).isEnabled()) {
            return IMAGE_CHECKED;
          } else {
            return IMAGE_UNCHECKED;
          }
        }
      },
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          return ((IHttpCondition) element).getType().getName();
        }
      },
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          IHttpCondition condition = (IHttpCondition) element;
          return condition.getMatchAction().getLabel();
        }
      },   
      new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
          IHttpCondition condition = (IHttpCondition) element;
          return condition.getMatchAction().getArgumentAsString();
        }
      },
    };

    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 createTableBreakpointsButtons(Composite parent) {
    final Composite rootControl = new Composite(parent, SWT.NONE);
    rootControl.setLayout(new GridLayout(1, true));

    Button button = new Button(rootControl, SWT.PUSH);
    button.setText("remove");
    button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    button.addSelectionListener(createSelectionListenerButtonRemove());

    return rootControl;
  }
 
  private SelectionListener createSelectionListenerButtonRemove() {
    return new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection selection = (IStructuredSelection) tableViewerBreakpoints.getSelection();
        for(Object ob: selection.toList()) {
          if((ob instanceof IHttpCondition) && (conditionSet != null))
            conditionSet.removeCondition((IHttpCondition) ob, true);     
        }
        tableViewerBreakpoints.refresh(true);
      }
    };
  }

 
  private Composite createCreatorBreakpoints(Composite parent) {
    final Composite rootControl = new Composite(parent, SWT.NONE);
    rootControl.setLayout(new GridLayout(3, false));
    conditionInput.createConditionTypeCombo(rootControl);
    conditionInput.createConditionMatchCombo(rootControl);
    conditionInput.createInputPanel(rootControl);
    return rootControl;
  }

  private Composite createCreatorBreakpointsButtons(Composite parent) {
    final Composite rootControl = new Composite(parent, SWT.NONE);
    rootControl.setLayout(new GridLayout(1, true));

    Button button = new Button(rootControl, SWT.PUSH);
    button.setText("create");
    button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    button.addSelectionListener(createSelectionListenerButtonCreateBreakpoint());

    return rootControl;
  }
 
 
  private SelectionListener createSelectionListenerButtonCreateBreakpoint() {
    return new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        final IHttpCondition breakpoint = conditionInput.createConditionFromData();
        if(breakpoint == null)
          return;
        if(conditionSet != null)
          conditionSet.appendCondition(breakpoint, true);
        conditionInput.reset();
        tableViewerBreakpoints.refresh(true);
      }
    };
  }

}
TOP

Related Classes of com.subgraph.vega.ui.http.intercept.config.ConfigureInterceptionContent

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.