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.tomcat.ui.wizard; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.server.tomcat.core.LiferayTomcatRuntime; import com.liferay.ide.server.tomcat.core.util.LiferayTomcatUtil; import com.liferay.ide.server.ui.LiferayServerUI; import com.liferay.ide.ui.util.SWTUtil; import java.util.ArrayList; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jdt.launching.IVMInstallType; import org.eclipse.jdt.launching.JavaRuntime; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jst.server.core.IJavaRuntime; import org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime; import org.eclipse.jst.server.tomcat.ui.internal.TomcatRuntimeComposite; 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.Layout; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Text; import org.eclipse.wst.server.core.IRuntimeWorkingCopy; import org.eclipse.wst.server.ui.wizard.IWizardHandle; /** * @author Greg Amerson * @author Andy Wu */ @SuppressWarnings({ "restriction", "unchecked" }) public class LiferayTomcatRuntimeComposite extends TomcatRuntimeComposite implements ModifyListener { public static void setFieldValue(Text field, String value) { if (field != null && !field.isDisposed()) { field.setText(value != null ? value : StringPool.EMPTY); } } protected Text dirField; protected boolean ignoreModifyEvent; protected Button jreButton; protected Combo jreCombo; protected Label jreLabel; protected Text nameField; public LiferayTomcatRuntimeComposite(Composite parent, IWizardHandle wizard) { super(parent, wizard); wizard.setTitle(Msgs.liferayTomcatRuntime); wizard.setDescription(Msgs.specifyInstallationDirectory); wizard.setImageDescriptor(LiferayServerUI.getImageDescriptor(LiferayServerUI.IMG_WIZ_RUNTIME)); } public void modifyText(ModifyEvent e) { if (ignoreModifyEvent) { ignoreModifyEvent = false; return; } if (e.getSource().equals(dirField)) { getRuntime().setLocation(new Path(dirField.getText())); } else if (e.getSource().equals(nameField)) { getRuntime().setName(nameField.getText()); } validate(); IStatus status = getRuntime().validate(null); if (!status.isOK() && e.getSource().equals(dirField)) { // check to see if we need to modify from a liferay folder down to // embedded tomcat IPath currentLocation = getRuntime().getLocation(); IPath modifiedLocation = LiferayTomcatUtil.modifyLocationForBundle(currentLocation); if (modifiedLocation != null) { getRuntime().setLocation(modifiedLocation); status = getRuntime().validate(null); if (status.isOK()) { ignoreModifyEvent = true; dirField.setText(modifiedLocation.toOSString()); validate(); } } } enableJREControls(true); if (getTomcatRuntime().getVMInstall() != null) { // check to see if selected VM is in same path as new server // location IPath vmLoc = new Path(getTomcatRuntime().getVMInstall().getInstallLocation().getPath()); IPath runtimeLoc = getRuntime().getLocation(); if (!runtimeLoc.isPrefixOf(vmLoc)) { // we have a jre that is outside the runtime location, need to // look for new bundled JRE LiferayTomcatRuntime runtime = (LiferayTomcatRuntime) getTomcatRuntime(); IVMInstall newVM = runtime.findPortalBundledJRE(true); if (newVM != null) { runtime.setVMInstall(newVM); } } updateJREs(); } } protected Button createButton(String text, int style) { Button button = new Button(this, style); button.setText(text); GridDataFactory.generate(button, 2, 1); return button; } @Override protected void createControl() { setLayout(createLayout()); setLayoutData(new GridData(GridData.FILL_BOTH)); createFields(); // initially disabled until user selects an installation directory enableJREControls(false); init(); validate(); Dialog.applyDialogFont(this); } protected void createFields() { nameField = createTextField(Msgs.name); nameField.addModifyListener(this); dirField = createTextField(Msgs.liferayTomcatDirectory); dirField.addModifyListener(this); SWTUtil.createButton(this, Msgs.browse).addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog dd = new DirectoryDialog(LiferayTomcatRuntimeComposite.this.getShell()); dd.setMessage(Msgs.selectLiferayTomcatDirectory); dd.setFilterPath(dirField.getText()); String selectedDir = dd.open(); if (selectedDir != null) { dirField.setText(selectedDir); } } }); installLabel = new Label(this, SWT.RIGHT); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalIndent = 10; installLabel.setLayoutData(data); install = SWTUtil.createButton(this, Msgs.install); install.setVisible(false); jreLabel = createLabel(Msgs.selecteRuntimeJRE); jreCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY); jreCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); jreCombo.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { int sel = jreCombo.getSelectionIndex(); IVMInstall vmInstall = null; if (sel > 0) { vmInstall = (IVMInstall) installedJREs.get(sel - 1); } getTomcatRuntime().setVMInstall(vmInstall); validate(); } }); jreButton = SWTUtil.createButton(this, Msgs.installedJREs); jreButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (SWTUtil.showPreferencePage("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage", getShell())) //$NON-NLS-1$ { updateJREs(); validate(); } } }); Link link = createLink(Msgs.seeAdditionalConfigurationPage); link.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (wizard instanceof IWizardPage) { IWizard parentWizard = ((IWizardPage) wizard).getWizard(); parentWizard.getContainer().showPage(((IWizardPage) wizard).getNextPage()); } } }); } protected Label createLabel(String text) { Label label = new Label(this, SWT.NONE); label.setText(text); GridDataFactory.generate(label, 2, 1); return label; } protected Layout createLayout() { GridLayout layout = new GridLayout(2, false); return layout; } protected Link createLink(String linkText) { Link link = new Link(this, SWT.NONE); link.setText(linkText); GridDataFactory.generate(link, 2, 1); return link; } 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 void enableJREControls(boolean enabled) { jreLabel.setEnabled(enabled); jreCombo.setEnabled(enabled); jreButton.setEnabled(enabled); } protected IJavaRuntime getJavaRuntime() { return (IJavaRuntime) this.runtime; } protected IRuntimeWorkingCopy getRuntime() { return this.runtimeWC; } protected TomcatRuntime getTomcatRuntime() { return (TomcatRuntime) this.runtime; } @Override protected void init() { if ((nameField == null) || dirField == null || getRuntime() == null) { return; } setFieldValue(nameField, getRuntime().getName()); setFieldValue(dirField, getRuntime().getLocation() != null ? getRuntime().getLocation().toOSString() : StringPool.EMPTY); } protected void updateJREs() { IJavaRuntime iJavaRuntime = getJavaRuntime(); IVMInstall currentVM = null; if (iJavaRuntime != null && iJavaRuntime.getVMInstall() != null) { currentVM = iJavaRuntime.getVMInstall(); } else { currentVM = JavaRuntime.getDefaultVMInstall(); } int currentJREIndex = -1; // get all installed JVMs installedJREs = new ArrayList<IVMInstall>(); IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes(); int size = vmInstallTypes.length; for (int i = 0; i < size; i++) { IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls(); int size2 = vmInstalls.length; for (int j = 0; j < size2; j++) { installedJREs.add(vmInstalls[j]); } } // get names size = installedJREs.size(); jreNames = new String[size + 1]; jreNames[0] = "<Default Workbench JRE>"; //$NON-NLS-1$ for (int i = 0; i < size; i++) { IVMInstall vmInstall = (IVMInstall) installedJREs.get(i); jreNames[i + 1] = vmInstall.getName(); if (vmInstall.equals(currentVM)) { currentJREIndex = i + 1; } } if (jreCombo != null) { jreCombo.setItems(jreNames); jreCombo.select(currentJREIndex); } } private static class Msgs extends NLS { public static String browse; public static String install; public static String installedJREs; public static String liferayTomcatDirectory; public static String liferayTomcatRuntime; public static String name; public static String seeAdditionalConfigurationPage; public static String selecteRuntimeJRE; public static String selectLiferayTomcatDirectory; public static String specifyInstallationDirectory; static { initializeMessages(LiferayTomcatRuntimeComposite.class.getName(), Msgs.class); } } }