Package com.subgraph.vega.ui.http.builder

Source Code of com.subgraph.vega.ui.http.builder.RequestAddressEditor

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

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
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.swt.SWT;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
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.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;

import com.subgraph.vega.api.http.requests.IHttpRequestBuilder;

public class RequestAddressEditor extends Composite implements IHttpBuilderPart {
  private String requestSchemes[] = {
    "http",
    "https",
  };

  private IHttpRequestBuilder requestBuilder;
  private ComboViewer requestScheme;
  private Text requestHost;
  private Text requestPort;

  public RequestAddressEditor(Composite parent, final IHttpRequestBuilder requestBuilder) {
    super(parent, SWT.NONE);
    this.requestBuilder = requestBuilder;

    final GridLayout controlLayout = new GridLayout(3, false);
    controlLayout.marginWidth = 0;
    controlLayout.marginHeight = 0;
    controlLayout.marginLeft = 0;
    controlLayout.marginTop = 0;
    controlLayout.marginRight = 0;
    controlLayout.marginBottom = 0;
    setLayout(controlLayout);

    final Composite schemeControl = new Composite(this, SWT.NONE);
    schemeControl.setLayout(new GridLayout(2, false));
    schemeControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    Label label = new Label(schemeControl, SWT.NONE);
    label.setText("Scheme:");
    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    requestScheme = new ComboViewer(schemeControl, SWT.READ_ONLY);
    requestScheme.setContentProvider(new ArrayContentProvider());
    requestScheme.setLabelProvider(new LabelProvider() {
      public String getText(Object element) {
        return (String)element;
      }
    });
    requestScheme.setInput(requestSchemes);
    requestScheme.setSelection(new StructuredSelection(requestSchemes[0]));
    requestScheme.addSelectionChangedListener(createSelectionChangedListenerRequestScheme());

    final Composite hostControl = new Composite(this, SWT.NONE);
    hostControl.setLayout(new GridLayout(2, false));
    hostControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    label = new Label(hostControl, SWT.NONE);
    label.setText("Host:");
    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    requestHost = new Text(hostControl, SWT.BORDER | SWT.SINGLE);
    requestHost.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    final Composite portControl = new Composite(this, SWT.NONE);
    portControl.setLayout(new GridLayout(2, false));
    portControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    label = new Label(portControl, SWT.NONE);
    label.setText("Port:");
    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    requestPort = new Text(portControl, SWT.BORDER | SWT.SINGLE);
    final FontMetrics requestPortFm = new GC(requestPort).getFontMetrics();
    GridData requestPortGd = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    requestPortGd.widthHint = requestPortFm.getAverageCharWidth() * 7;
    requestPort.setLayoutData(requestPortGd);
    requestPort.addListener(SWT.Verify, new Listener() {
        public void handleEvent(Event e) {
            String string = e.text;
            char[] chars = new char[string.length()];
            string.getChars(0, chars.length, chars, 0);
            for (int i = 0; i < chars.length; i++) {
              if (!('0' <= chars[i] && chars[i] <= '9')) {
                e.doit = false;
                return;
              }
            }
        }
    });
   
    refresh();
  }
 
  @Override
  public Control getControl() {
    return this;
  }

  @Override
  public void setEditable(boolean editable) {
    requestScheme.getCombo().setEnabled(editable);
    requestHost.setEditable(editable);
    requestPort.setEditable(editable);
  }

  @Override
  public void refresh() {
    requestScheme.setSelection(new StructuredSelection(requestBuilder.getScheme()));
    requestHost.setText(requestBuilder.getHost());
    requestPort.setText(Integer.toString(requestBuilder.getHostPort()));
  }

  @Override
  public void processContents() {
    final String scheme = (String)((IStructuredSelection) requestScheme.getSelection()).getFirstElement();
    requestBuilder.setScheme(scheme);
    requestBuilder.setHost(requestHost.getText().trim());
    try {
      requestBuilder.setHostPort(Integer.parseInt(requestPort.getText().trim()));
    } catch (NumberFormatException e) {
      throw new IllegalArgumentException("Invalid host port");
    }
  }

  private ISelectionChangedListener createSelectionChangedListenerRequestScheme() {
    return new ISelectionChangedListener() {
      public void selectionChanged(final SelectionChangedEvent e) {
        final String scheme = (String)((IStructuredSelection)requestScheme.getSelection()).getFirstElement();
        if (scheme.equals("https")) {
          requestPort.setText("443");
        } else {
          requestPort.setText("80");
        }
      }
    };
  }
 
}
TOP

Related Classes of com.subgraph.vega.ui.http.builder.RequestAddressEditor

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.