/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * The contents of this file are subject to the terms of the Liferay Enterprise * Subscription License ("License"). You may not use this file except in * compliance with the License. You can obtain a copy of the License by * contacting Liferay, Inc. See the License for the specific language governing * permissions and limitations under the License, including but not limited to * distribution rights of the Software. */ package com.liferay.ide.server.ui.wizard; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.server.core.ILiferayRuntime; import com.liferay.ide.server.core.ILiferayRuntimeStub; import com.liferay.ide.server.core.LiferayRuntimeStubDelegate; import com.liferay.ide.server.core.LiferayServerCore; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.layout.GridDataFactory; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.wst.server.core.IRuntime; import org.eclipse.wst.server.core.IRuntimeType; import org.eclipse.wst.server.core.IRuntimeWorkingCopy; import org.eclipse.wst.server.core.ServerCore; import org.eclipse.wst.server.ui.wizard.IWizardHandle; /** * @author Greg Amerson */ public class LiferayRuntimeStubComposite extends Composite { protected Combo comboRuntimeStubType; protected boolean ignoreModifyEvent = false; protected ILiferayRuntime liferayRuntime; protected IRuntimeWorkingCopy runtimeWC; protected Text textInstallDir; protected Text textName; protected IWizardHandle wizard; public LiferayRuntimeStubComposite( Composite parent, IWizardHandle wizard ) { super( parent, SWT.NONE ); this.wizard = wizard; createControl(); initialize(); validate(); } public void setRuntime( IRuntimeWorkingCopy newRuntime ) { if( newRuntime == null ) { runtimeWC = null; liferayRuntime = null; } else { runtimeWC = newRuntime; liferayRuntime = (ILiferayRuntime) newRuntime.loadAdapter( ILiferayRuntime.class, null ); } initialize(); validate(); } protected void createControl() { setLayout( new GridLayout( 2, false ) ); setLayoutData( new GridData( GridData.FILL_BOTH ) ); Label lblName = new Label( this, SWT.NONE ); lblName.setText( Msgs.name ); new Label( this, SWT.NONE ); textName = new Text( this, SWT.BORDER ); textName.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 1, 1 ) ); textName.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { runtimeWC.setName( textName.getText() ); validate(); } } ); createSpacer(); Label lblRuntimeStubType = new Label( this, SWT.NONE ); lblRuntimeStubType.setText( Msgs.liferayBundleType ); createSpacer(); comboRuntimeStubType = new Combo( this, SWT.READ_ONLY ); comboRuntimeStubType.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 1, 1 ) ); createSpacer(); final Label lblInstall = new Label( this, SWT.WRAP ); lblInstall.setText( Msgs.liferayBundleDirectory ); new Label( this, SWT.NONE ); textInstallDir = new Text( this, SWT.BORDER ); textInstallDir.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 1, 1 ) ); comboRuntimeStubType.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { int index = comboRuntimeStubType.getSelectionIndex(); ILiferayRuntimeStub selectedStub = LiferayServerCore.getRuntimeStubs()[index]; LiferayRuntimeStubDelegate delegate = getStubDelegate(); delegate.setRuntimeStubTypeId( selectedStub.getRuntimeStubTypeId() ); String stubTypeId = selectedStub.getRuntimeStubTypeId(); IRuntimeType runtimeType = ServerCore.findRuntimeType( stubTypeId ); for( IRuntime runtime : ServerCore.getRuntimes() ) { if( runtime.getRuntimeType().equals( runtimeType ) ) { textInstallDir.setText( runtime.getLocation().toOSString() ); } } validate(); } } ); textInstallDir.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { textInstallDirChanged( textInstallDir.getText() ); } } ); Button btnBrowse = new Button( this, SWT.NONE ); btnBrowse.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 1, 1 ) ); btnBrowse.setText( Msgs.browse ); btnBrowse.addSelectionListener( new SelectionAdapter() { public void widgetSelected( SelectionEvent se ) { DirectoryDialog dialog = new DirectoryDialog( LiferayRuntimeStubComposite.this.getShell() ); dialog.setMessage( Msgs.selectRuntimeStubDirectory ); dialog.setFilterPath( textInstallDir.getText() ); String selectedDirectory = dialog.open(); if( selectedDirectory != null ) { textInstallDir.setText( selectedDirectory ); } } } ); new Label( this, SWT.NONE ); Dialog.applyDialogFont( this ); textName.forceFocus(); } protected Label createLabel( String text ) { Label label = new Label( this, SWT.NONE ); label.setText( text ); GridDataFactory.generate( label, 2, 1 ); return label; } protected void createSpacer() { new Label( this, SWT.NONE ); } protected Text createTextField( String labelText ) { createLabel( labelText ); Text text = new Text( this, SWT.BORDER ); text.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); return text; } protected ILiferayRuntime getLiferayRuntime() { return this.liferayRuntime; } protected IRuntimeWorkingCopy getRuntime() { return this.runtimeWC; } protected LiferayRuntimeStubDelegate getStubDelegate() { return (LiferayRuntimeStubDelegate) runtimeWC.loadAdapter( LiferayRuntimeStubDelegate.class, new NullProgressMonitor() ); } protected void initialize() { if( textName == null || liferayRuntime == null ) { return; } ignoreModifyEvent = true; if( runtimeWC.getName() != null ) { textName.setText( runtimeWC.getName() ); } else { textName.setText( StringPool.EMPTY ); } if( runtimeWC.getLocation() != null ) { textInstallDir.setText( runtimeWC.getLocation().toOSString() ); } else { textInstallDir.setText( StringPool.EMPTY ); } updateStubs(); ignoreModifyEvent = false; } protected void textInstallDirChanged( String text ) { if( ignoreModifyEvent ) { return; } runtimeWC.setLocation( new Path( text ) ); validate(); // IStatus status = getRuntime().validate(null); } protected void updateStubs() { ILiferayRuntimeStub[] stubs = LiferayServerCore.getRuntimeStubs(); if( CoreUtil.isNullOrEmpty( stubs ) ) { return; } String[] names = new String[stubs.length]; LiferayRuntimeStubDelegate delegate = getStubDelegate(); String stubId = delegate.getRuntimeStubTypeId(); int stubIndex = -1; for( int i = 0; i < stubs.length; i++ ) { names[i] = stubs[i].getName(); if( stubs[i].getRuntimeStubTypeId().equals( stubId ) ) { stubIndex = i; } } comboRuntimeStubType.setItems( names ); if( stubIndex >= 0 ) { comboRuntimeStubType.select( stubIndex ); } } protected IStatus validate() { if( liferayRuntime == null ) { wizard.setMessage( StringPool.EMPTY, IMessageProvider.ERROR ); return Status.OK_STATUS; } IStatus status = runtimeWC.validate( null ); if( status == null || status.isOK() ) { wizard.setMessage( null, IMessageProvider.NONE ); } else if( status.getSeverity() == IStatus.WARNING ) { wizard.setMessage( status.getMessage(), IMessageProvider.WARNING ); } else { wizard.setMessage( status.getMessage(), IMessageProvider.ERROR ); } wizard.update(); return status; } private static class Msgs extends NLS { public static String browse; public static String liferayBundleDirectory; public static String liferayBundleType; public static String name; public static String selectRuntimeStubDirectory; static { initializeMessages( LiferayRuntimeStubComposite.class.getName(), Msgs.class ); } } }