Java tutorial
/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.server.ui; import com.liferay.ide.server.core.LiferayServerCore; import com.liferay.ide.server.remote.IRemoteServer; import com.liferay.ide.server.remote.RemoteServer; import com.liferay.ide.server.ui.cmd.SetAdjustDeploymentTimestampCommand; import com.liferay.ide.server.ui.cmd.SetHttpPortCommand; import com.liferay.ide.server.ui.cmd.SetLiferayPortalContextPathCommand; import com.liferay.ide.server.ui.cmd.SetPasswordCommand; import com.liferay.ide.server.ui.cmd.SetServerManagerContextPathCommand; import com.liferay.ide.server.ui.cmd.SetUsernameCommand; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; 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.PlatformUI; 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; /** * @author Gregory Amerson */ public class RemoteSettingsEditorSection extends ServerEditorSection { protected Button adjustTimestamp; protected PropertyChangeListener listener; protected RemoteServer remoteServer; protected Section remoteSettings; protected Text textHttpPort; protected Text textLiferayPortalContextPath; protected Text textPassword; protected Text textServerManagerContextPath; protected Text textUsername; protected boolean updating = false; public RemoteSettingsEditorSection() { super(); } @Override public void createSection(Composite parent) { FormToolkit toolkit = getFormToolkit(parent.getDisplay()); remoteSettings = createSettingsSection(parent, toolkit); remoteSettings.setText(Msgs.remoteLiferaySettings); remoteSettings.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL)); remoteSettings.setDescription(Msgs.specifySettings); Composite settingsComposite = createSectionComposite(toolkit, remoteSettings); Label soapPortLabel = createLabel(toolkit, settingsComposite, Msgs.httpPortLabel); soapPortLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); textHttpPort = toolkit.createText(settingsComposite, null); GridData data = new GridData(SWT.FILL, SWT.TOP, true, false); data.widthHint = 50; textHttpPort.setLayoutData(data); textHttpPort.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (updating) { return; } updating = true; execute(new SetHttpPortCommand(remoteServer, textHttpPort.getText().trim())); updating = false; // validate(); } }); Label usernameLabel = createLabel(toolkit, settingsComposite, Msgs.username); usernameLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); textUsername = toolkit.createText(settingsComposite, null); textUsername.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); textUsername.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (updating) { return; } updating = true; execute(new SetUsernameCommand(remoteServer, textUsername.getText().trim())); updating = false; // validate(); } }); Label passwordLabel = createLabel(toolkit, settingsComposite, Msgs.passwordLabel); passwordLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); textPassword = toolkit.createText(settingsComposite, null, SWT.PASSWORD); textPassword.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); textPassword.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (updating) { return; } updating = true; execute(new SetPasswordCommand(remoteServer, textPassword.getText().trim())); updating = false; // validate(); } }); Label labelLiferayPortalContextPath = createLabel(toolkit, settingsComposite, Msgs.liferayPortalContextPathLabel); labelLiferayPortalContextPath.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); textLiferayPortalContextPath = toolkit.createText(settingsComposite, null); textLiferayPortalContextPath.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); textLiferayPortalContextPath.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (updating) { return; } updating = true; execute(new SetLiferayPortalContextPathCommand(remoteServer, textLiferayPortalContextPath.getText().trim())); updating = false; // validate(); } }); Label labelServerManagerContextPath = createLabel(toolkit, settingsComposite, Msgs.serverManagerContextPathLabel); labelServerManagerContextPath.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); textServerManagerContextPath = toolkit.createText(settingsComposite, null); textServerManagerContextPath.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); textServerManagerContextPath.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (updating) { return; } updating = true; execute(new SetServerManagerContextPathCommand(remoteServer, textServerManagerContextPath.getText().trim())); updating = false; // validate(); } }); adjustTimestamp = toolkit.createButton(settingsComposite, Msgs.adjustDeploymentTimestamps, SWT.CHECK); GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false); gd.horizontalSpan = 2; adjustTimestamp.setLayoutData(gd); adjustTimestamp.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (updating) { return; } updating = true; execute(new SetAdjustDeploymentTimestampCommand(remoteServer, adjustTimestamp.getSelection())); updating = false; } }); initialize(); IStatus status = validateSection(); if (!status.isOK()) { this.getManagedForm().getMessageManager().addMessage(remoteServer, status.getMessage(), status, status.getSeverity() == IStatus.ERROR ? IMessageProvider.ERROR : IMessageProvider.WARNING); } } @Override public IStatus[] getSaveStatus() { IStatus status = validateSection(); if (!status.isOK()) { this.getManagedForm().getMessageManager().addMessage(remoteServer, status.getMessage(), status, status.getSeverity() == IStatus.ERROR ? IMessageProvider.ERROR : IMessageProvider.WARNING); } else { this.getManagedForm().getMessageManager().removeMessage(remoteServer); } return new IStatus[] { Status.OK_STATUS }; } public void init(IEditorSite site, IEditorInput input) { super.init(site, input); if (server != null) { remoteServer = (RemoteServer) server.loadAdapter(RemoteServer.class, null); addChangeListeners(); } initialize(); } protected void addChangeListeners() { listener = new PropertyChangeListener() { public void propertyChange(final PropertyChangeEvent event) { LiferayServerCore.updateConnectionSettings(remoteServer); if (updating) { return; } updating = true; Display.getDefault().syncExec(new Runnable() { public void run() { if (IRemoteServer.ATTR_ADJUST_DEPLOYMENT_TIMESTAMP.equals(event.getPropertyName())) { String s = (String) event.getNewValue(); adjustTimestamp.setSelection(Boolean.parseBoolean(s)); } else if (IRemoteServer.ATTR_USERNAME.equals(event.getPropertyName())) { String s = (String) event.getNewValue(); textUsername.setText(s); } else if (IRemoteServer.ATTR_PASSWORD.equals(event.getPropertyName())) { String s = (String) event.getNewValue(); textPassword.setText(s); } else if (IRemoteServer.ATTR_HTTP_PORT.equals(event.getPropertyName())) { String s = (String) event.getNewValue(); textHttpPort.setText(s); } else if (IRemoteServer.ATTR_LIFERAY_PORTAL_CONTEXT_PATH.equals(event.getPropertyName())) { String s = (String) event.getNewValue(); textLiferayPortalContextPath.setText(s); } else if (IRemoteServer.ATTR_SERVER_MANAGER_CONTEXT_PATH.equals(event.getPropertyName())) { String s = (String) event.getNewValue(); textServerManagerContextPath.setText(s); } } }); updating = false; } }; server.addPropertyChangeListener(listener); } protected Label createLabel(FormToolkit toolkit, Composite parent, String text) { Label label = toolkit.createLabel(parent, text); label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE)); return label; } protected Composite createSectionComposite(FormToolkit toolkit, Section section) { Composite composite = toolkit.createComposite(section); 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(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL)); toolkit.paintBordersFor(composite); section.setClient(composite); return composite; } protected Section createSettingsSection(Composite parent, FormToolkit toolkit) { return toolkit.createSection(parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE); } protected void initialize() { if (remoteServer == null || textHttpPort == null || adjustTimestamp == null || textUsername == null || textPassword == null || textLiferayPortalContextPath == null || textServerManagerContextPath == null) { return; } updating = true; textHttpPort.setText(remoteServer.getHTTPPort()); textUsername.setText(remoteServer.getUsername()); textPassword.setText(remoteServer.getPassword()); textLiferayPortalContextPath.setText(remoteServer.getLiferayPortalContextPath()); textServerManagerContextPath.setText(remoteServer.getServerManagerContextPath()); boolean adjustGMTOffset = remoteServer.getAdjustDeploymentTimestamp(); adjustTimestamp.setSelection(adjustGMTOffset); updating = false; } protected IStatus validateSection() { final IStatus[] status = new IStatus[1]; try { PlatformUI.getWorkbench().getProgressService().run(true, false, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { status[0] = remoteServer.validate(monitor); } }); } catch (Exception e) { } return status[0]; } private static class Msgs extends NLS { public static String adjustDeploymentTimestamps; public static String httpPortLabel; public static String liferayPortalContextPathLabel; public static String passwordLabel; public static String remoteLiferaySettings; public static String serverManagerContextPathLabel; public static String specifySettings; public static String username; static { initializeMessages(RemoteSettingsEditorSection.class.getName(), Msgs.class); } } }