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.portal; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.server.core.portal.PortalBundle; import com.liferay.ide.server.core.portal.PortalRuntime; import com.liferay.ide.server.ui.LiferayServerUI; import com.liferay.ide.ui.util.SWTUtil; import java.util.ArrayList; import java.util.List; 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.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.Layout; import org.eclipse.swt.widgets.Text; import org.eclipse.wst.server.core.IRuntimeWorkingCopy; import org.eclipse.wst.server.ui.wizard.IWizardHandle; /** * @author Gregory Amerson * @author Simon Jiang * @author Andy Wu */ public class PortalRuntimeComposite extends Composite implements ModifyListener { private Text dirField; private List<IVMInstall> installedJREs; private String[] jreNames; private Button jreButton; private Combo jreCombo; private Label jreLabel; private Text nameField; private IRuntimeWorkingCopy runtimeWC; private Text typeField; private final IWizardHandle wizard; public PortalRuntimeComposite(Composite parent, IWizardHandle wizard) { super(parent, SWT.NONE); this.wizard = wizard; wizard.setTitle(Msgs.liferayPortalRuntime); wizard.setDescription(Msgs.specifyInstallationDirectory); wizard.setImageDescriptor(LiferayServerUI.getImageDescriptor(LiferayServerUI.IMG_WIZ_RUNTIME)); createControl(parent); } protected void createControl(final Composite parent) { setLayout(createLayout()); setLayoutData(createLayoutData()); setBackground(parent.getBackground()); createFields(); enableJREControls(false); Dialog.applyDialogFont(this); } private void createFields() { this.nameField = createTextField(Msgs.name); this.nameField.addModifyListener(this); this.dirField = createTextField(Msgs.liferayPortalRuntimeDirectory); this.dirField.addModifyListener(this); SWTUtil.createButton(this, Msgs.browse).addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { final DirectoryDialog dd = new DirectoryDialog(getShell()); dd.setMessage(Msgs.selectLiferayPortalDirectory); final String selectedDir = dd.open(); if (selectedDir != null) { dirField.setText(selectedDir); } } }); this.typeField = createReadOnlyTextField(Msgs.detectedPortalBundleType); 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 = installedJREs.get(sel - 1); } PortalRuntime portalRuntime = getPortalRuntime(); if (portalRuntime != null) { portalRuntime.setVMInstall(vmInstall); } validate(); } }); jreButton = SWTUtil.createButton(this, Msgs.installedJREs); jreButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (SWTUtil.showPreferencePage("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage", getShell())) { updateJREs(); validate(); } } }); } 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() { return new GridLayout(2, false); } private GridData createLayoutData() { return new GridData(GridData.FILL_BOTH); } protected Text createReadOnlyTextField(String labelText) { return createTextField(labelText, SWT.READ_ONLY); } protected Text createTextField(String labelText) { return createTextField(labelText, SWT.NONE); } protected Text createTextField(String labelText, int style) { createLabel(labelText); Text text = new Text(this, SWT.BORDER | style); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); return text; } protected void enableJREControls(boolean enabled) { jreLabel.setEnabled(enabled); jreCombo.setEnabled(enabled); jreButton.setEnabled(enabled); } protected PortalRuntime getPortalRuntime() { return (PortalRuntime) getRuntime().loadAdapter(PortalRuntime.class, null); } protected IRuntimeWorkingCopy getRuntime() { return this.runtimeWC; } protected void init() { if (this.dirField == null || this.nameField == null || getRuntime() == null) { return; } setFieldValue(this.nameField, getRuntime().getName()); setFieldValue(this.dirField, getRuntime().getLocation() != null ? getRuntime().getLocation().toOSString() : StringPool.EMPTY); updateFields(); } @Override public void modifyText(ModifyEvent e) { if (e.getSource().equals(dirField)) { getRuntime().setLocation(new Path(dirField.getText())); updateFields(); validate(); enableJREControls(true); updateJREs(); } else if (e.getSource().equals(nameField)) { getRuntime().setName(nameField.getText()); } } public void setRuntime(IRuntimeWorkingCopy newRuntime) { if (newRuntime == null) { this.runtimeWC = null; } else { this.runtimeWC = newRuntime; } init(); try { validate(); } catch (NullPointerException e) { // ignore exception because this composite haven't been created and there are no shell } } private void updateFields() { final PortalRuntime portalRuntime = getPortalRuntime(); if (portalRuntime != null) { final PortalBundle portalBundle = portalRuntime.getPortalBundle(); setFieldValue(this.typeField, portalBundle != null ? portalBundle.getDisplayName() : StringPool.BLANK); } } protected void validate() { final IStatus status = this.runtimeWC.validate(null); if (status == null || status.isOK()) { this.wizard.setMessage(null, IMessageProvider.NONE); } else if (status.getSeverity() == IStatus.WARNING) { this.wizard.setMessage(status.getMessage(), IMessageProvider.WARNING); } else { this.wizard.setMessage(status.getMessage(), IMessageProvider.ERROR); } this.wizard.update(); } public static void setFieldValue(Text field, String value) { if (field != null && !field.isDisposed()) { field.setText(value != null ? value : StringPool.EMPTY); } } protected void updateJREs() { PortalRuntime portalRuntime = getPortalRuntime(); IVMInstall currentVM = null; if (portalRuntime != null && portalRuntime.getVMInstall() != null) { currentVM = portalRuntime.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] = Msgs.defaultWorkbenchJRE; for (int i = 0; i < size; i++) { IVMInstall vmInstall = installedJREs.get(i); jreNames[i + 1] = vmInstall.getName(); if (vmInstall.equals(currentVM)) { currentJREIndex = i + 1; } } if (jreCombo != null) { jreCombo.setItems(jreNames); jreCombo.select(currentJREIndex); } } static class Msgs extends NLS { public static String browse; public static String defaultWorkbenchJRE; public static String detectedPortalBundleType; public static String installedJREs; public static String liferayPortalRuntime; public static String liferayPortalRuntimeDirectory; public static String name; public static String selecteRuntimeJRE; public static String selectLiferayPortalDirectory; public static String specifyInstallationDirectory; static { initializeMessages(PortalRuntimeComposite.class.getName(), Msgs.class); } } }