| /******************************************************************************* |
| * Copyright (c) 2007 IBM Corporation and others. |
| * 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: |
| * IBM Corporation - Initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.server.ui.internal.wizard.fragment; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.wst.server.core.IModuleArtifact; |
| import org.eclipse.wst.server.core.IServer; |
| import org.eclipse.wst.server.core.TaskModel; |
| import org.eclipse.wst.server.core.internal.IClient; |
| import org.eclipse.wst.server.ui.internal.EclipseUtil; |
| import org.eclipse.wst.server.ui.internal.ServerUIPlugin; |
| import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil; |
| import org.eclipse.wst.server.ui.wizard.WizardFragment; |
| /** |
| * A fragment used to select a client. |
| */ |
| public class OptionalClientWizardFragment extends WizardFragment { |
| protected IClient[] clients; |
| |
| protected IModuleArtifact moduleArtifact; |
| protected IServer lastServer; |
| protected Object lastLaunchable; |
| |
| public OptionalClientWizardFragment(IModuleArtifact moduleArtifact) { |
| super(); |
| this.moduleArtifact = moduleArtifact; |
| } |
| |
| protected void createChildFragments(List<WizardFragment> list) { |
| if (clients != null && clients.length > 1) |
| list.add(new SelectClientWizardFragment()); |
| } |
| |
| protected void updateClients() { |
| if (getTaskModel() == null) |
| return; |
| |
| try { |
| IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER); |
| |
| if (server == null) { |
| getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_CLIENTS, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_HAS_CLIENTS, new Boolean(false)); |
| return; |
| } |
| |
| //if (lastServer == null) |
| // return; |
| |
| // get the launchable adapter and module object |
| Object launchable = null; |
| try { |
| Object[] obj = ServerUIPlugin.getLaunchableAdapter(server, moduleArtifact); |
| getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER, obj[0]); |
| getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE, obj[1]); |
| launchable = obj[1]; |
| } catch (CoreException ce) { |
| getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_CLIENTS, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_HAS_CLIENTS, new Boolean(false)); |
| EclipseUtil.openError(null, ce.getStatus()); |
| return; |
| } |
| |
| // stop here if the server and launchable haven't changed |
| if (lastServer != null && lastServer.equals(server)) { |
| if (lastLaunchable == null && launchable == null) |
| return; |
| if (lastLaunchable != null && lastLaunchable.equals(launchable)) { |
| return; |
| } |
| } |
| lastServer = server; |
| lastLaunchable = launchable; |
| |
| String launchMode = (String) getTaskModel().getObject(TaskModel.TASK_LAUNCH_MODE); |
| clients = ServerUIPlugin.getClients(server, launchable, launchMode); |
| |
| getTaskModel().putObject(WizardTaskUtil.TASK_CLIENTS, null); |
| getTaskModel().putObject(WizardTaskUtil.TASK_HAS_CLIENTS, new Boolean(false)); |
| if (clients != null) { |
| if (clients.length > 1) { |
| getTaskModel().putObject(WizardTaskUtil.TASK_CLIENTS, clients); |
| getTaskModel().putObject(WizardTaskUtil.TASK_HAS_CLIENTS, new Boolean(true)); |
| } else |
| getTaskModel().putObject(WizardTaskUtil.TASK_CLIENT, clients[0]); |
| } |
| |
| updateChildFragments(); |
| } catch (Exception e) { |
| // ignore |
| } |
| } |
| |
| public void enter() { |
| updateClients(); |
| } |
| |
| public List getChildFragments() { |
| updateClients(); |
| return super.getChildFragments(); |
| } |
| |
| public void setTaskModel(TaskModel taskModel) { |
| super.setTaskModel(taskModel); |
| updateClients(); |
| } |
| } |