/******************************************************************************* * Copyright (c) 2015 Red Hat Inc.. * 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: * Red Hat Incorporated - initial API and implementation *******************************************************************************/ package org.jboss.tools.openshift.internal.ui.server; import java.beans.PropertyChangeListener; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.jface.dialogs.IPageChangingListener; import org.eclipse.jface.dialogs.PageChangedEvent; import org.eclipse.jface.dialogs.PageChangingEvent; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.widgets.Composite; import org.eclipse.wst.server.ui.wizard.IWizardHandle; import org.eclipse.wst.server.ui.wizard.WizardFragment; import org.jboss.tools.openshift.common.core.connection.IConnection; import org.jboss.tools.openshift.core.connection.Connection; import org.jboss.tools.openshift.internal.common.ui.OpenShiftCommonImages; import org.jboss.tools.openshift.internal.common.ui.connection.ConnectionWizardModel; import org.jboss.tools.openshift.internal.common.ui.connection.ConnectionWizardPage; import org.jboss.tools.openshift.internal.common.ui.wizard.AbstractOpenShiftWizardPage.Direction; /** * A wizard fragment that provides the connection wizard page as wst wizard * fragment * * @author Andre Dietisheim * * @see WizardFragment */ public class ConnectionWizardFragment extends WizardFragment { private WrappedConnectionWizardPage connectionPage; private PropertyChangeListener connectionChangeListener = null; public void addConnectionChangeListener(PropertyChangeListener connectionChangeListener) { this.connectionChangeListener = connectionChangeListener; } @Override public boolean hasComposite() { return true; } @Override public boolean isComplete() { if(connectionPage == null || !connectionPage.isPageComplete()) { return false; } if(getTaskModel() != null) { Object isLoadingServices = getTaskModel().getObject(ServerSettingsWizardFragment.IS_LOADING_SERVICES); return !(Boolean.TRUE.equals(isLoadingServices)); } return true; } @Override public Composite createComposite(Composite parent, IWizardHandle handle) { this.connectionPage = createConnectionWizardPage(parent, handle); updateWizardHandle(handle, connectionPage); getContainer(getPage(handle)).addPageChangingListener(onPageChanging(handle)); getContainer(getPage(handle)).addPageChangedListener(connectionPage.onPageChanged()); return (Composite) connectionPage.getControl(); } private IPageChangingListener onPageChanging(IWizardHandle wizardHandle) { return new IPageChangingListener() { @Override public void handlePageChanging(PageChangingEvent event) { if (event.getCurrentPage() == getPage(wizardHandle)){ if (event.getTargetPage() == null || event.getTargetPage().equals(getPage(wizardHandle).getNextPage())) { connectionPage.onPageWillGetDeactivated(Direction.FORWARDS, event); } else { connectionPage.onPageWillGetDeactivated(Direction.BACKWARDS, event); } IConnection connection = connectionPage.getConnection(); if (connection instanceof Connection) { OpenShiftServerTaskModelAccessor.set((Connection) connection, getTaskModel()); } } } }; } private WrappedConnectionWizardPage createConnectionWizardPage(Composite parent, IWizardHandle handle) { WrappedConnectionWizardPage connectionPage = new WrappedConnectionWizardPage(handle); connectionPage.createControl(parent); return connectionPage; } private void updateWizardHandle(IWizardHandle handle, ConnectionWizardPage connectionPage) { handle.setTitle(connectionPage.getTitle()); handle.setDescription(connectionPage.getDescription()); handle.setImageDescriptor(OpenShiftCommonImages.OPENSHIFT_LOGO_WHITE_MEDIUM); } private IWizardPage getPage(IWizardHandle wizardHandle) { return (IWizardPage) wizardHandle; } private WizardDialog getContainer(IWizardPage wizardPage) { return (WizardDialog) wizardPage.getWizard().getContainer(); } private class WrappedConnectionWizardPage extends ConnectionWizardPage { private IWizardHandle wizardHandle; private WrappedConnectionWizardPage(IWizardHandle wizardHandle) { super(((IWizardPage) wizardHandle).getWizard(), new ConnectionWizardModel(Connection.class), Connection.class); this.wizardHandle = wizardHandle; if(connectionChangeListener != null) { getModel().addPropertyChangeListener(connectionChangeListener); } } @Override public void setPageComplete(boolean complete) { super.setPageComplete(complete); wizardHandle.update(); } @Override public void setErrorMessage(String newMessage) { ((WizardPage) wizardHandle).setErrorMessage(newMessage); } @Override public void setMessage(String newMessage, int newType) { wizardHandle.setMessage(newMessage, newType); } public void onPageWillGetDeactivated(Direction direction, PageChangingEvent event) { onPageWillGetDeactivated(direction, event, null); } private IPageChangedListener onPageChanged() { return new IPageChangedListener() { @Override public void pageChanged(PageChangedEvent event) { if (event.getSelectedPage() == getPage(wizardHandle)) { updateSize(); } } }; } } }