Package com.subgraph.vega.ui.http.requesteditviewer

Source Code of com.subgraph.vega.ui.http.requesteditviewer.RequestEditView

/*******************************************************************************
* 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.requesteditviewer;

import java.net.URISyntaxException;

import org.apache.http.client.methods.HttpUriRequest;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.part.ViewPart;

import com.subgraph.vega.api.analysis.IContentAnalyzer;
import com.subgraph.vega.api.analysis.IContentAnalyzerFactory;
import com.subgraph.vega.api.http.requests.IHttpRequestBuilder;
import com.subgraph.vega.api.http.requests.IHttpRequestEngine;
import com.subgraph.vega.api.http.requests.IHttpRequestEngineFactory;
import com.subgraph.vega.api.http.requests.IHttpResponse;
import com.subgraph.vega.api.model.IWorkspace;
import com.subgraph.vega.api.model.requests.IRequestLogRecord;
import com.subgraph.vega.api.model.requests.IRequestOrigin;
import com.subgraph.vega.ui.http.Activator;
import com.subgraph.vega.ui.http.builder.HeaderEditor;
import com.subgraph.vega.ui.http.builder.IHttpBuilderPart;
import com.subgraph.vega.ui.http.builder.RequestEditor;
import com.subgraph.vega.ui.httpeditor.HttpMessageEditor;

public class RequestEditView extends ViewPart {
  public final static String VIEW_ID = "com.subgraph.vega.views.requestEdit";
  private IHttpRequestEngine requestEngine;
  private IHttpRequestBuilder requestBuilder;
  private IContentAnalyzer contentAnalyzer;
  private SashForm parentComposite;
  private IHttpBuilderPart requestBuilderPartCurr;
  private RequestEditor requestEditor;
  private HeaderEditor requestHeaderEditor;
  private TabFolder requestTabFolder;
  private TabItem requestTabItem;
  private TabItem requestHeaderTabItem;
  private TabItem requestTabFolderItem;
  private HttpMessageEditor responseViewer;

  public RequestEditView() {
    super();
    final IContentAnalyzerFactory contentAnalyzerFactory = Activator.getDefault().getContentAnalyzerFactoryService();
    // XXX we should be watching for workspace events
    final IWorkspace workspace = Activator.getDefault().getModel().getCurrentWorkspace();
    if(workspace != null) {
      contentAnalyzer = contentAnalyzerFactory.createContentAnalyzer(workspace.getScanAlertRepository().getProxyScanInstance());
      contentAnalyzer.setDefaultAddToRequestLog(true);
      contentAnalyzer.setAddLinksToModel(true);
    }
    IRequestOrigin requestOrigin = workspace.getRequestLog().getRequestOriginRequestEditor();
    IHttpRequestEngineFactory requestEngineFactory = Activator.getDefault().getHttpRequestEngineFactoryService();
    requestEngine = requestEngineFactory.createRequestEngine(IHttpRequestEngine.EngineConfigType.CONFIG_PROXY, requestEngineFactory.createConfig(), requestOrigin);
    requestBuilder = requestEngineFactory.createRequestBuilder();
  }
 
  @Override
  public void createPartControl(Composite parent) {
    parentComposite = new SashForm(parent, SWT.VERTICAL);

    createRequestEditor(parentComposite);
    createResponseViewer(parentComposite);
   
    parentComposite.setWeights(new int[] {50, 50});
    parentComposite.pack();
  }

  @Override
  public void setFocus() {
    if (parentComposite != null) {
      parentComposite.setFocus();
    }
  }

  public void setRequest(IRequestLogRecord record) throws URISyntaxException {
    if (record != null) {
      requestBuilder.setFromRequest(record);
    } else {
      requestBuilder.clear();
    }

    if (requestBuilderPartCurr != null) {
      requestBuilderPartCurr.refresh();
    }
  }

  private void displayError(String text) {
    MessageBox messageDialog = new MessageBox(parentComposite.getShell(), SWT.ICON_WARNING | SWT.OK);
    messageDialog.setText("Error");
    if (text == null) {
      text = "Unexpected error occurred";
    }
    messageDialog.setMessage(text);
    messageDialog.open();
  }
 
  void displayExceptionError(Exception e) {
    if (e.getMessage() != null) {
      displayError(e.getMessage());
    } else {
      displayError(e.getCause().getMessage());
    }
  }

  public void sendRequest() {
    if (requestBuilderPartCurr != null) {
      try {
        requestBuilderPartCurr.processContents();
      } catch (Exception e) {
        displayExceptionError(e);
        return;
      }
    }

    HttpUriRequest uriRequest;
    try {
      uriRequest = requestBuilder.buildRequest(true);
    } catch (Exception e) {
      displayExceptionError(e);
      return;
    }

    final SendRequestTask sendTask = new SendRequestTask(uriRequest, this, requestEngine);
    sendTask.start();
  }
 
  void processResponse(IHttpResponse response) {
    displayResponse(response);
    if(contentAnalyzer != null && response != null) {
      contentAnalyzer.processResponse(response);
    }
  }
 
  private void displayResponse(final IHttpResponse response) {
    if(parentComposite == null || parentComposite.isDisposed()) {
      return;
    }
    parentComposite.getDisplay().syncExec(new Runnable() {
      @Override
      public void run() {
        if(response != null) {
          responseViewer.displayHttpResponse(response.getRawResponse());
        }
        if(requestBuilderPartCurr != null) {
          requestBuilderPartCurr.refresh();
        }
      }
    });
  }

  private Composite createRequestEditor(Composite parent) {
    final Composite rootControl = new Composite(parent, SWT.NONE);
    rootControl.setLayout(new FillLayout());

    requestTabFolder = new TabFolder(rootControl, SWT.TOP);

    requestTabItem = new TabItem(requestTabFolder, SWT.NONE);
    requestTabItem.setText("Request");
    requestEditor = new RequestEditor(requestTabFolder, requestBuilder);
    requestTabItem.setControl(requestEditor);
    requestTabItem.setData(requestEditor);

    requestHeaderTabItem = new TabItem(requestTabFolder, SWT.NONE);
    requestHeaderTabItem.setText("Headers");
    requestHeaderEditor = new HeaderEditor(requestTabFolder, requestBuilder, 0);
    requestHeaderTabItem.setControl(requestHeaderEditor);
    requestHeaderTabItem.setData(requestHeaderEditor);

    requestTabFolder.addSelectionListener(createRequestTabFolderSelectionListener());
    requestTabFolderItem = requestTabFolder.getSelection()[0];
    requestBuilderPartCurr = (IHttpBuilderPart) requestTabFolderItem.getData();
   
    return rootControl;
  }

  private SelectionListener createRequestTabFolderSelectionListener() {
    return new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        TabItem[] selection = requestTabFolder.getSelection();
        if (selection != null) {
          if (requestBuilderPartCurr != null) {
            try {
              requestBuilderPartCurr.processContents();
            } catch (Exception ex) {
              requestTabFolder.setSelection(requestTabFolderItem);
              displayExceptionError(ex);
              return;
            }
          }

          requestTabFolderItem = selection[0];
          requestBuilderPartCurr = (IHttpBuilderPart) requestTabFolderItem.getData();
          requestBuilderPartCurr.refresh();
        }
      }
    };
  }
 
  private Composite createResponseViewer(Composite parent) {
    final Group rootControl = new Group(parent, SWT.NONE);
    rootControl.setText("Response");
    rootControl.setLayout(new FillLayout());

    responseViewer = new HttpMessageEditor(rootControl);
    responseViewer.setEditable(false);

    return rootControl;
  }

}
TOP

Related Classes of com.subgraph.vega.ui.http.requesteditviewer.RequestEditView

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.