org.chromium.debug.ui/src/org/chromium/debug/ui/launcher/ChromiumRemoteTab.java
changeset 2 e4420d2515f1
equal deleted inserted replaced
1:ef76fc2ac88c 2:e4420d2515f1
       
     1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
       
     2 // Use of this source code is governed by a BSD-style license that can be
       
     3 // found in the LICENSE file.
       
     4 
       
     5 package org.chromium.debug.ui.launcher;
       
     6 
       
     7 import org.chromium.debug.core.ChromiumDebugPlugin;
       
     8 import org.eclipse.core.runtime.CoreException;
       
     9 import org.eclipse.debug.core.ILaunchConfiguration;
       
    10 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
       
    11 import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
       
    12 import org.eclipse.debug.ui.DebugUITools;
       
    13 import org.eclipse.debug.ui.IDebugUIConstants;
       
    14 import org.eclipse.jface.preference.BooleanFieldEditor;
       
    15 import org.eclipse.jface.preference.FieldEditor;
       
    16 import org.eclipse.jface.preference.IntegerFieldEditor;
       
    17 import org.eclipse.jface.preference.PreferenceStore;
       
    18 import org.eclipse.jface.util.IPropertyChangeListener;
       
    19 import org.eclipse.jface.util.PropertyChangeEvent;
       
    20 import org.eclipse.swt.SWT;
       
    21 import org.eclipse.swt.graphics.Image;
       
    22 import org.eclipse.swt.layout.GridData;
       
    23 import org.eclipse.swt.layout.GridLayout;
       
    24 import org.eclipse.swt.widgets.Composite;
       
    25 
       
    26 /**
       
    27  * The "Remote" tab for the Chromium JavaScript launch tab group.
       
    28  */
       
    29 public class ChromiumRemoteTab extends AbstractLaunchConfigurationTab {
       
    30 
       
    31   private static final String PORT_FIELD_NAME = "port_field"; //$NON-NLS-1$
       
    32   private static final String ADD_NETWORK_CONSOLE_FIELD_NAME =
       
    33       "add_network_console_field"; //$NON-NLS-1$
       
    34 
       
    35    // However, recommended range is [1024, 32767].
       
    36   private static final int minimumPortValue = 0;
       
    37   private static final int maximumPortValue = 65535;
       
    38 
       
    39   private IntegerFieldEditor debugPort;
       
    40   private BooleanFieldEditor addNetworkConsole;
       
    41   private final PreferenceStore store = new PreferenceStore();
       
    42 
       
    43   public void createControl(Composite parent) {
       
    44     Composite composite = createDefaultComposite(parent);
       
    45 
       
    46     IPropertyChangeListener modifyListener = new IPropertyChangeListener() {
       
    47       public void propertyChange(PropertyChangeEvent event) {
       
    48         updateLaunchConfigurationDialog();
       
    49       }
       
    50     };
       
    51 
       
    52     Composite propertiesComp = createInnerComposite(composite, 2);
       
    53     // Port text field
       
    54     debugPort = new IntegerFieldEditor(PORT_FIELD_NAME, Messages.ChromiumRemoteTab_PortLabel,
       
    55         propertiesComp);
       
    56     debugPort.setPropertyChangeListener(modifyListener);
       
    57     debugPort.setPreferenceStore(store);
       
    58 
       
    59     addNetworkConsole = new BooleanFieldEditor(ADD_NETWORK_CONSOLE_FIELD_NAME,
       
    60         Messages.ChromiumRemoteTab_ShowDebuggerNetworkCommunication,
       
    61         propertiesComp);
       
    62     addNetworkConsole.setPreferenceStore(store);
       
    63     addNetworkConsole.setPropertyChangeListener(modifyListener);
       
    64   }
       
    65 
       
    66   public String getName() {
       
    67     return Messages.ChromiumRemoteTab_RemoteTabName;
       
    68   }
       
    69 
       
    70   public void initializeFrom(ILaunchConfiguration config) {
       
    71     int debugPortDefault = PluginVariablesUtil.getValueAsInt(PluginVariablesUtil.DEFAULT_PORT);
       
    72 
       
    73     try {
       
    74       store.setDefault(PORT_FIELD_NAME, config.getAttribute(LaunchTypeBase.CHROMIUM_DEBUG_PORT,
       
    75           debugPortDefault));
       
    76       store.setDefault(ADD_NETWORK_CONSOLE_FIELD_NAME, config.getAttribute(
       
    77           LaunchTypeBase.ADD_NETWORK_CONSOLE, false));
       
    78     } catch (CoreException e) {
       
    79       ChromiumDebugPlugin.log(new Exception("Unexpected storage problem", e)); //$NON-NLS-1$
       
    80       store.setDefault(PORT_FIELD_NAME, debugPortDefault);
       
    81       store.setDefault(ADD_NETWORK_CONSOLE_FIELD_NAME, false);
       
    82     }
       
    83 
       
    84     debugPort.loadDefault();
       
    85     addNetworkConsole.loadDefault();
       
    86   }
       
    87 
       
    88   public void performApply(ILaunchConfigurationWorkingCopy config) {
       
    89     storeEditor(debugPort, "-1"); //$NON-NLS-1$
       
    90     storeEditor(addNetworkConsole, ""); //$NON-NLS-1$
       
    91 
       
    92     config.setAttribute(LaunchTypeBase.CHROMIUM_DEBUG_PORT, store.getInt(PORT_FIELD_NAME));
       
    93     config.setAttribute(LaunchTypeBase.ADD_NETWORK_CONSOLE,
       
    94         store.getBoolean(ADD_NETWORK_CONSOLE_FIELD_NAME));
       
    95   }
       
    96 
       
    97   @Override
       
    98   public boolean isValid(ILaunchConfiguration config) {
       
    99     try {
       
   100       int port = config.getAttribute(LaunchTypeBase.CHROMIUM_DEBUG_PORT, -1);
       
   101       if (port < minimumPortValue || port > maximumPortValue) {
       
   102         setErrorMessage(Messages.ChromiumRemoteTab_InvalidPortNumberError);
       
   103         return false;
       
   104       }
       
   105     } catch (CoreException e) {
       
   106       ChromiumDebugPlugin.log(new Exception("Unexpected storage problem", e)); //$NON-NLS-1$
       
   107     }
       
   108 
       
   109     setErrorMessage(null);
       
   110     return true;
       
   111   }
       
   112 
       
   113 
       
   114   public void setDefaults(ILaunchConfigurationWorkingCopy config) {
       
   115     int port = PluginVariablesUtil.getValueAsInt(PluginVariablesUtil.DEFAULT_PORT);
       
   116     config.setAttribute(LaunchTypeBase.CHROMIUM_DEBUG_PORT, port);
       
   117   }
       
   118 
       
   119   @Override
       
   120   public Image getImage() {
       
   121     return DebugUITools.getImage(IDebugUIConstants.IMG_LCL_DISCONNECT);
       
   122   }
       
   123 
       
   124   private Composite createDefaultComposite(Composite parent) {
       
   125     Composite composite = new Composite(parent, SWT.NULL);
       
   126     setControl(composite);
       
   127 
       
   128     GridLayout layout = new GridLayout();
       
   129     layout.numColumns = 1;
       
   130     composite.setLayout(layout);
       
   131 
       
   132     GridData data = new GridData();
       
   133     data.verticalAlignment = GridData.FILL;
       
   134     data.horizontalAlignment = GridData.FILL;
       
   135     composite.setLayoutData(data);
       
   136 
       
   137     return composite;
       
   138   }
       
   139 
       
   140   private Composite createInnerComposite(Composite parent, int numColumns) {
       
   141     Composite composite = new Composite(parent, SWT.NONE);
       
   142     composite.setLayout(new GridLayout(numColumns, false));
       
   143     GridData gd = new GridData(GridData.FILL_BOTH);
       
   144     composite.setLayoutData(gd);
       
   145     return composite;
       
   146   }
       
   147 
       
   148   private static void storeEditor(FieldEditor editor, String errorValue) {
       
   149     if (editor.isValid()) {
       
   150       editor.store();
       
   151     } else {
       
   152       editor.getPreferenceStore().setValue(editor.getPreferenceName(), errorValue);
       
   153     }
       
   154   }
       
   155 }