/******************************************************************************* * Copyright (c) 2015 Red Hat. * 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 - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.ui.wizards; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.beans.BeanProperties; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.databinding.wizard.WizardPageSupport; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.docker.core.IRegistry; import org.eclipse.linuxtools.docker.ui.wizards.ImageSearch; import org.eclipse.linuxtools.internal.docker.ui.commands.CommandUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * */ public class ImagePullPage extends ImagePullPushPage<ImagePullPageModel> { private final IDockerConnection connection; /** * Constructor. * * @param connection * the {@link IDockerConnection} to use to pull the image */ public ImagePullPage(final IDockerConnection connection) { super("ImagePullPage", //$NON-NLS-1$ WizardMessages.getString("ImagePull.label"), new ImagePullPageModel()); setMessage(WizardMessages.getString("ImagePull.desc")); //$NON-NLS-1$ this.connection = connection; } @Override public void dispose() { dbc.dispose(); super.dispose(); } /** * @return the tag to select/apply on the image */ public String getSelectedImageName() { return getModel().getSelectedImageName(); } /** * @return the target {@link IRegistry} on which to push the image */ public IRegistry getSelectedRegistryAccount() { return getModel().getSelectedRegistry(); } @Override public void createControl(Composite parent) { parent.setLayout(new GridLayout()); final Composite container = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(3).margins(6, 6) .applyTo(container); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).span(1, 1) .grab(true, false).applyTo(container); // registry selection super.createRegistrySelectionControls(container); // image name selection createImageNameSelectionControls(container); // setup validation support WizardPageSupport.create(this, dbc); setControl(container); } @SuppressWarnings("unchecked") void createImageNameSelectionControls(final Composite parent) { // Image name final Label imageNameLabel = new Label(parent, SWT.NONE); imageNameLabel.setText( WizardMessages.getString("ImagePullPushPage.name.label")); //$NON-NLS-1$ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER) .grab(false, false).applyTo(imageNameLabel); final Text imageNameText = new Text(parent, SWT.BORDER); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER) .grab(true, false).applyTo(imageNameText); imageNameText.setToolTipText( WizardMessages.getString("ImagePull.name.tooltip")); //$NON-NLS-1$ // search final Button searchButton = new Button(parent, SWT.NONE); searchButton .setText(WizardMessages.getString("ImagePull.search.label")); //$NON-NLS-1$ GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER) .grab(false, false).applyTo(searchButton); searchButton.addSelectionListener(onSearchImage()); // binding final IObservableValue<String> imgeNameObservable = BeanProperties .value(ImagePullPushPageModel.class, ImagePullPushPageModel.SELECTED_IMAGE_NAME) .observe(getModel()); dbc.bindValue(WidgetProperties.text(SWT.Modify).observe(imageNameText), imgeNameObservable, new UpdateValueStrategy() .setAfterConvertValidator(new ImageNameValidator()), null); } /** * Opens the {@link ImageSearch} dialog with current image name pre-filled. * * @return */ private SelectionListener onSearchImage() { return new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { final ImageSearch imageSearchWizard = new ImageSearch( ImagePullPage.this.connection, ImagePullPage.this.getModel().getSelectedImageName(), ImagePullPage.this.getModel() .getSelectedRegistry()); final boolean completed = CommandUtils .openWizard(imageSearchWizard, getShell()); if (completed) { ImagePullPage.this.getModel().setSelectedImageName( imageSearchWizard.getSelectedImage()); } } }; } }