/* * Copyright 2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.explorer.cloudformation.wizard; import org.eclipse.core.databinding.AggregateValidationStatus; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.ChangeEvent; import org.eclipse.core.databinding.observable.IChangeListener; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import com.amazonaws.eclipse.cloudformation.ui.ParametersComposite; /** * The second page in the create wizard second page */ public class CreateStackWizardSecondPage extends WizardPage { private final CreateStackWizardDataModel dataModel; private DataBindingContext bindingContext; private AggregateValidationStatus aggregateValidationStatus; private static final String OK_MESSAGE = "Provide values for template parameters."; private Composite comp; private ScrolledComposite scrolledComp; protected CreateStackWizardSecondPage(CreateStackWizardDataModel dataModel) { super("Fill in stack template parameters"); setTitle("Fill in stack template parameters"); setDescription(OK_MESSAGE); this.dataModel = dataModel; } /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets * .Composite) */ public void createControl(final Composite parent) { scrolledComp = new ScrolledComposite(parent, SWT.V_SCROLL); scrolledComp.setExpandHorizontal(true); scrolledComp.setExpandVertical(true); GridDataFactory.fillDefaults().grab(true, true).applyTo(scrolledComp); comp = new Composite(scrolledComp, SWT.None); GridDataFactory.fillDefaults().grab(true, true).applyTo(comp); GridLayoutFactory.fillDefaults().numColumns(1).applyTo(comp); scrolledComp.setContent(comp); scrolledComp.addControlListener(new ControlAdapter() { public void controlResized(ControlEvent e) { if (comp != null) { Rectangle r = scrolledComp.getClientArea(); scrolledComp.setMinSize(comp.computeSize(r.width, SWT.DEFAULT)); } } }); setControl(scrolledComp); } private void createContents() { for ( Control c : comp.getChildren() ) { c.dispose(); } bindingContext = new DataBindingContext(); aggregateValidationStatus = new AggregateValidationStatus(bindingContext, AggregateValidationStatus.MAX_SEVERITY); aggregateValidationStatus.addChangeListener(new IChangeListener() { public void handleChange(ChangeEvent event) { populateValidationStatus(); } }); new ParametersComposite(comp, dataModel.getParametersDataModel(), bindingContext); comp.layout(); Rectangle r = scrolledComp.getClientArea(); scrolledComp.setMinSize(comp.computeSize(r.width, SWT.DEFAULT)); } @Override public void setVisible(boolean visible) { if ( visible ) { createContents(); } super.setVisible(visible); } private void populateValidationStatus() { Object value = aggregateValidationStatus.getValue(); if ( value instanceof IStatus == false ) return; IStatus status = (IStatus) value; if ( status.isOK() ) { setErrorMessage(null); setMessage(OK_MESSAGE, Status.OK); } else if ( status.getSeverity() == Status.WARNING ) { setErrorMessage(null); setMessage(status.getMessage(), Status.WARNING); } else if ( status.getSeverity() == Status.ERROR ) { setErrorMessage(status.getMessage()); } setPageComplete(status.isOK()); } }