blob: c9975950746d30f3ee88e3a1f3ff1a1271766739 [file] [log] [blame]
/*
* 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();
}
}