Java tutorial
/****************************************************************************** * Copyright (c) 2009-2013, Linagora * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.server.ui.wizards; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.IMessageProvider; 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.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; import org.eclipse.wst.server.core.IServer; import org.eclipse.wst.server.core.IServerWorkingCopy; import org.eclipse.wst.server.core.TaskModel; import org.eclipse.wst.server.ui.wizard.IWizardHandle; import org.eclipse.wst.server.ui.wizard.WizardFragment; import com.ebmwebsourcing.petals.server.PetalsServerPlugin; import com.ebmwebsourcing.petals.server.server.IPetalsServerWorkingCopy; import com.ebmwebsourcing.petals.server.utils.TopologyHandler3x; /** * @author Vincent Zurczak - EBM WebSourcing */ public class PetalsServerWizardFragment3x extends WizardFragment { private IServerWorkingCopy serverWc; private IPetalsServerWorkingCopy petalsServerWc; private IWizardHandle wizard; private String host, wsPrefix, containerName; private int port; private String serverName; private Text serverNameText, hostText, wsPrefixText, containerNameText; private Spinner portSpinner; /* (non-Javadoc) * @see org.eclipse.wst.server.ui.wizard.WizardFragment#hasComposite() */ @Override public boolean hasComposite() { return true; } /* (non-Javadoc) * @see org.eclipse.wst.server.ui.wizard.WizardFragment#enter() */ @Override public void enter() { // Get the model Object o = getTaskModel().getObject(TaskModel.TASK_SERVER); if (o instanceof IServer) { o = ((IServer) o).createWorkingCopy(); getTaskModel().putObject(TaskModel.TASK_SERVER, o); } this.serverWc = (IServerWorkingCopy) o; if (this.serverWc.getOriginal() == null) { try { this.serverWc.save(true, null); } catch (CoreException e) { PetalsServerPlugin.log(e, IStatus.ERROR); } } this.petalsServerWc = (IPetalsServerWorkingCopy) this.serverWc.loadAdapter(IPetalsServerWorkingCopy.class, null); // Pre-fill information if (this.serverNameText != null) this.serverNameText.setText(this.serverWc.getName()); if (hasLocalTopology() && this.host == null) parseTopology(); if (this.containerName != null) this.containerNameText.setText(this.containerName); if (this.host != null) this.hostText.setText(this.host); if (this.wsPrefix != null) this.wsPrefixText.setText(this.wsPrefix); this.portSpinner.setSelection(this.port); } /* (non-Javadoc) * @see org.eclipse.wst.server.ui.wizard.WizardFragment#exit() */ @Override public void exit() { // nothing } /** * @return */ private boolean hasLocalTopology() { boolean hasLocalTopology = this.serverWc.getRuntime().getLocation() != null; return hasLocalTopology; } /** * */ private void parseTopology() { try { IPath installPath = this.serverWc.getRuntime().getLocation(); File rootFile = installPath.toFile(); if (!rootFile.exists()) return; File serverFile = new File(rootFile, "conf/server.properties"); if (!serverFile.exists()) return; Properties serverProperties = new Properties(); FileInputStream fis = null; try { // Parse the petalsServerWc properties fis = new FileInputStream(serverFile); serverProperties.load(fis); String containerName = serverProperties.getProperty("petals.container.name", null); if (containerName == null) return; // Parse the topology.xml SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); TopologyHandler3x handler = new TopologyHandler3x(containerName); File topologyFile = new File(rootFile, "conf/topology.xml"); parser.parse(topologyFile, handler); this.containerName = containerName; this.host = handler.getHost(); this.wsPrefix = handler.getWsPrefix(); this.port = handler.getPort(); } catch (Exception e1) { PetalsServerPlugin.log(e1, IStatus.ERROR); } finally { try { if (fis != null) fis.close(); } catch (IOException e) { PetalsServerPlugin.log(e, IStatus.ERROR); } } } finally { // Whatever happens, validate the fields validate(); } } /** * Validates the page data. */ public void validate() { // Validate the runtime this.petalsServerWc.setContainerName(this.containerName); this.petalsServerWc.setHost(this.host); this.petalsServerWc.setPort(this.port); this.petalsServerWc.setWsPrefix(this.wsPrefix); this.serverWc.setName(this.serverName); String errorMsg = this.petalsServerWc.validateTopologyInformation(); this.wizard.setMessage(errorMsg, IMessageProvider.ERROR); setComplete(errorMsg == null); this.wizard.update(); } /* (non-Javadoc) * @see org.eclipse.wst.server.ui.wizard.WizardFragment * #createComposite(org.eclipse.swt.widgets.Composite, org.eclipse.wst.server.ui.wizard.IWizardHandle) */ @Override public Composite createComposite(Composite parent, IWizardHandle wizard) { // Wizard this.wizard = wizard; wizard.setTitle("Petals server"); wizard.setDescription("Create a new Petals server."); wizard.setImageDescriptor(PetalsServerPlugin.getImageDescriptor("icons/wizban/pstudio_64x64.png")); // Composite Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(3, false); layout.marginTop = 10; container.setLayout(layout); container.setLayoutData(new GridData(GridData.FILL_BOTH)); // Redefine the petalsServerWc name new Label(container, SWT.NONE).setText("Server name:"); this.serverNameText = new Text(container, SWT.BORDER | SWT.SINGLE); GridData layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 2; this.serverNameText.setLayoutData(layoutData); this.serverNameText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { PetalsServerWizardFragment3x.this.serverName = PetalsServerWizardFragment3x.this.serverNameText .getText(); validate(); } }); // Topology parameters Composite separatorComposite = new Composite(container, SWT.NONE); layout = new GridLayout(2, false); layout.marginWidth = 0; layout.marginTop = 20; separatorComposite.setLayout(layout); layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 3; separatorComposite.setLayoutData(layoutData); Label titleLabel = new Label(separatorComposite, SWT.NONE); titleLabel.setText("From the topology.xml file"); Label separatorLabel = new Label(separatorComposite, SWT.SEPARATOR | SWT.HORIZONTAL); separatorLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false)); new Label(container, SWT.NONE).setText("Container:"); this.containerNameText = new Text(container, SWT.BORDER | SWT.SINGLE); layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 2; this.containerNameText.setLayoutData(layoutData); this.containerNameText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { PetalsServerWizardFragment3x.this.containerName = PetalsServerWizardFragment3x.this.containerNameText .getText(); validate(); } }); new Label(container, SWT.NONE).setText("Host:"); this.hostText = new Text(container, SWT.BORDER | SWT.SINGLE); layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 2; this.hostText.setLayoutData(layoutData); this.hostText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { PetalsServerWizardFragment3x.this.host = PetalsServerWizardFragment3x.this.hostText.getText(); validate(); } }); new Label(container, SWT.NONE).setText("WS prefix:"); this.wsPrefixText = new Text(container, SWT.BORDER | SWT.SINGLE); layoutData = new GridData(GridData.FILL_HORIZONTAL); layoutData.horizontalSpan = 2; this.wsPrefixText.setLayoutData(layoutData); this.wsPrefixText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { PetalsServerWizardFragment3x.this.wsPrefix = PetalsServerWizardFragment3x.this.wsPrefixText .getText(); validate(); } }); new Label(container, SWT.NONE).setText("Port:"); this.portSpinner = new Spinner(container, SWT.BORDER | SWT.SINGLE); this.portSpinner.setValues(9600, 0, Integer.MAX_VALUE, 0, 1, 10); this.portSpinner.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { PetalsServerWizardFragment3x.this.port = PetalsServerWizardFragment3x.this.portSpinner .getSelection(); validate(); } }); this.portSpinner.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { PetalsServerWizardFragment3x.this.port = PetalsServerWizardFragment3x.this.portSpinner .getSelection(); validate(); } }); return container; } }