| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.sling.ide.eclipse.ui.internal; |
| |
| import java.beans.PropertyChangeEvent; |
| import java.beans.PropertyChangeListener; |
| |
| import org.apache.sling.ide.eclipse.core.ISlingLaunchpadConfiguration; |
| import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer; |
| import org.apache.sling.ide.eclipse.core.SetServerContextPathCommand; |
| import org.apache.sling.ide.eclipse.core.SetServerDebugPortCommand; |
| import org.apache.sling.ide.eclipse.core.SetServerPasswordCommand; |
| import org.apache.sling.ide.eclipse.core.SetServerPortCommand; |
| import org.apache.sling.ide.eclipse.core.SetServerUsernameCommand; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IEditorSite; |
| import org.eclipse.ui.forms.IFormColors; |
| import org.eclipse.ui.forms.widgets.ExpandableComposite; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.Section; |
| import org.eclipse.wst.server.ui.editor.ServerEditorSection; |
| |
| public class ConnectionEditorSection extends ServerEditorSection { |
| protected boolean _updating; |
| protected PropertyChangeListener _listener; |
| |
| private Text portText; |
| private Text debugPortText; |
| private Text contextPathText; |
| private Text usernameText; |
| private Text passwordText; |
| private ISlingLaunchpadServer launchpadServer; |
| private PropertyChangeListener serverListener; |
| private boolean updating = false; |
| |
| @Override |
| public void createSection(Composite parent) { |
| super.createSection(parent); |
| FormToolkit toolkit = getFormToolkit(parent.getDisplay()); |
| |
| Section section = toolkit.createSection(parent, ExpandableComposite.EXPANDED |
| | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE); |
| section.setText("Connection"); |
| section.setDescription("Connection details for this server"); |
| section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL)); |
| |
| // ports |
| Composite composite = toolkit.createComposite(section); |
| |
| // layout similar to ServerPropertiesEditorSection |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 2; |
| layout.marginHeight = 5; |
| layout.marginWidth = 10; |
| layout.verticalSpacing = 5; |
| layout.horizontalSpacing = 15; |
| |
| composite.setLayout(layout); |
| composite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); |
| toolkit.paintBordersFor(composite); |
| section.setClient(composite); |
| |
| createLabel(toolkit, composite, "Port:"); |
| portText = createText(toolkit, composite, SWT.SINGLE); |
| |
| createLabel(toolkit, composite, "Debug Port:"); |
| debugPortText = createText(toolkit, composite, SWT.SINGLE); |
| |
| createLabel(toolkit, composite, "Context path:"); |
| contextPathText = createText(toolkit, composite, SWT.SINGLE); |
| |
| // TODO wrong parent |
| Label separator = toolkit.createSeparator(parent, SWT.HORIZONTAL); |
| GridData data = new GridData(GridData.FILL_HORIZONTAL); |
| data.horizontalSpan = 2; |
| separator.setLayoutData(data); |
| |
| createLabel(toolkit, composite, "Username:"); |
| usernameText = createText(toolkit, composite, SWT.SINGLE); |
| |
| createLabel(toolkit, composite, "Password:"); |
| passwordText = createText(toolkit, composite, SWT.PASSWORD); |
| |
| initialize(); |
| } |
| |
| private void createLabel(FormToolkit toolkit, Composite composite, String label) { |
| Label portLabel = toolkit.createLabel(composite, label); |
| portLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE)); |
| // GridData data = new GridData(GridData.FILL_HORIZONTAL); |
| // data.horizontalIndent = 4; |
| // data.widthHint = 20; |
| // portLabel.setLayoutData(data); |
| } |
| |
| private Text createText(FormToolkit toolkit, Composite composite, int flags) { |
| Text port = toolkit.createText(composite, "", flags); |
| GridData data = new GridData(GridData.FILL_HORIZONTAL); |
| data.widthHint = 30; |
| port.setLayoutData(data); |
| |
| return port; |
| } |
| |
| public void init(IEditorSite site, IEditorInput input) { |
| super.init(site, input); |
| |
| serverListener = new PropertyChangeListener() { |
| |
| @Override |
| public void propertyChange(PropertyChangeEvent evt) { |
| if (updating) { |
| return; |
| } |
| updating = true; |
| try{ |
| switch ( evt.getPropertyName()) { |
| case ISlingLaunchpadServer.PROP_PORT: |
| portText.setText(((Integer) evt.getNewValue()).toString()); |
| break; |
| |
| case ISlingLaunchpadServer.PROP_DEBUG_PORT: |
| debugPortText.setText(((Integer) evt.getNewValue()).toString()); |
| break; |
| |
| case ISlingLaunchpadServer.PROP_CONTEXT_PATH: |
| contextPathText.setText((String) evt.getNewValue()); |
| break; |
| |
| case ISlingLaunchpadServer.PROP_USERNAME: |
| usernameText.setText((String) evt.getNewValue()); |
| break; |
| |
| case ISlingLaunchpadServer.PROP_PASSWORD: |
| passwordText.setText((String) evt.getNewValue()); |
| break; |
| |
| } |
| } finally { |
| updating = false; |
| } |
| } |
| }; |
| |
| server.addPropertyChangeListener(serverListener); |
| |
| launchpadServer = (ISlingLaunchpadServer) server.getAdapter(ISlingLaunchpadServer.class); |
| if (launchpadServer == null) { |
| // TODO progress monitor |
| launchpadServer = (ISlingLaunchpadServer) server.loadAdapter(ISlingLaunchpadServer.class, |
| new NullProgressMonitor()); |
| } |
| } |
| |
| private void initialize() { |
| |
| final ISlingLaunchpadConfiguration config = launchpadServer.getConfiguration(); |
| |
| portText.setText(String.valueOf(config.getPort())); |
| debugPortText.setText(String.valueOf(config.getDebugPort())); |
| contextPathText.setText(config.getContextPath()); |
| |
| usernameText.setText(config.getUsername()); |
| passwordText.setText(config.getPassword()); |
| |
| ModifyListener listener = new ModifyListener() { |
| @Override |
| public void modifyText(ModifyEvent e) { |
| if (updating) { |
| return; |
| } |
| updating = true; |
| try{ |
| if (e.getSource() == portText) { |
| try { |
| int port = Integer.parseInt(portText.getText()); |
| execute(new SetServerPortCommand(server, port)); |
| } catch (NumberFormatException ex) { |
| // shucks |
| } |
| } else if (e.getSource() == debugPortText) { |
| try { |
| int debugPort = Integer.parseInt(debugPortText.getText()); |
| execute(new SetServerDebugPortCommand(server, debugPort)); |
| } catch (NumberFormatException ex) { |
| // shucks |
| ex.printStackTrace(); |
| } |
| } else if (e.getSource() == contextPathText) { |
| execute(new SetServerContextPathCommand(server, contextPathText.getText())); |
| } else if (e.getSource() == usernameText) { |
| execute(new SetServerUsernameCommand(server, usernameText.getText())); |
| } else if (e.getSource() == passwordText) { |
| execute(new SetServerPasswordCommand(server, passwordText.getText())); |
| } |
| } finally { |
| updating = false; |
| } |
| } |
| }; |
| |
| for (Text text : new Text[] { portText, debugPortText, contextPathText, usernameText, passwordText }) { |
| text.addModifyListener(listener); |
| } |
| |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.server.ui.editor.ServerEditorSection#dispose() |
| */ |
| @Override |
| public void dispose() { |
| if (server != null) |
| server.removePropertyChangeListener(serverListener); |
| |
| super.dispose(); |
| } |
| |
| } |