/******************************************************************************* * Copyright (c) 2014, 2016 Red Hat Inc. 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: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.ui.wizards; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.linuxtools.internal.docker.ui.SWTImagesFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class ImageRemovePage extends WizardPage { private final static String NAME = "ImageRemove.name"; //$NON-NLS-1$ private final static String TITLE = "ImageRemove.title"; //$NON-NLS-1$ private final static String DESC = "ImageRemove.desc"; //$NON-NLS-1$ private final static String NAME_LABEL = "ImageRemoveName.label"; //$NON-NLS-1$ private final static String NAME_TOOLTIP = "ImageRemoveName.toolTip"; //$NON-NLS-1$ private final static String NAME_EMPTY_RULE = "ErrorRemoveNameEmpty.msg"; //$NON-NLS-1$ private final static String INVALID_ID = "ErrorRemoveInvalidImageId.msg"; //$NON-NLS-1$ private Text nameText; private List<String> images = new ArrayList<>(); public ImageRemovePage() { super(WizardMessages.getString(NAME)); setDescription(WizardMessages.getString(DESC)); setTitle(WizardMessages.getString(TITLE)); setImageDescriptor(SWTImagesFactory.DESC_WIZARD); } public List<String> getImageNames() { return images; } private ModifyListener Listener = e -> validate(); private void validate() { boolean complete = true; boolean error = false; String nameField = nameText.getText().trim(); ArrayList<String> validNames = new ArrayList<>(); if (nameField.length() == 0) { setErrorMessage(WizardMessages.getString(NAME_EMPTY_RULE)); error = true; } String[] names = nameField.split("\\s+"); //$NON-NLS-1$ for (String name : names) { if (name.length() > 0) { if (name.charAt(name.length() - 1) == ':') { //$NON-NLS-1$ setErrorMessage(WizardMessages.getString(INVALID_ID)); error = true; } else { if (name.contains(":")) { //$NON-NLS-$ if (name.substring(name.indexOf(':') + 1) .contains(":")) { //$NON-NLS-1$ setErrorMessage(WizardMessages .getString(INVALID_ID)); error = true; } } } validNames.add(name); } } if (!error) { setErrorMessage(null); images = validNames; } setPageComplete(complete && !error); } @Override public void createControl(Composite parent) { final Composite container = new Composite(parent, SWT.NULL); FormLayout layout = new FormLayout(); layout.marginHeight = 5; layout.marginWidth = 5; container.setLayout(layout); Label label = new Label(container, SWT.NULL); Label repoLabel = new Label(container, SWT.NULL); repoLabel.setText(WizardMessages.getString(NAME_LABEL)); nameText = new Text(container, SWT.BORDER | SWT.SINGLE); nameText.addModifyListener(Listener); nameText.setToolTipText(WizardMessages.getString(NAME_TOOLTIP)); Point p1 = label.computeSize(SWT.DEFAULT, SWT.DEFAULT); Point p2 = nameText.computeSize(SWT.DEFAULT, SWT.DEFAULT); int centering = (p2.y - p1.y + 1) / 2; FormData f = new FormData(); f.top = new FormAttachment(0); label.setLayoutData(f); f = new FormData(); f.top = new FormAttachment(label, 11 + centering); f.left = new FormAttachment(0, 0); repoLabel.setLayoutData(f); f = new FormData(); f.top = new FormAttachment(label, 11 + centering); f.left = new FormAttachment(repoLabel, 5); f.right = new FormAttachment(100); nameText.setLayoutData(f); setControl(container); setPageComplete(false); } }