/******************************************************************************* * 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 ); } } }