/******************************************************************************* * Copyright (c) 2013 GoPivotal, 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: * GoPivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.ui; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.ui.PreferenceConstants; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.springframework.ide.eclipse.boot.core.ChooseDependencyModel; import org.springframework.ide.eclipse.boot.core.MavenCoordinates; import org.springframework.ide.eclipse.boot.util.Log; import org.springsource.ide.eclipse.commons.livexp.ui.ChooseOneSection; import org.springsource.ide.eclipse.commons.livexp.ui.CommentSection; import org.springsource.ide.eclipse.commons.livexp.ui.DescriptionSection; import org.springsource.ide.eclipse.commons.livexp.ui.DialogWithSections; import org.springsource.ide.eclipse.commons.livexp.ui.HLineSection; import org.springsource.ide.eclipse.commons.livexp.ui.StyledCommentSection; import org.springsource.ide.eclipse.commons.livexp.ui.WizardPageSection; public class ChooseDependencyDialog extends DialogWithSections { private static final int DISABLE_BUTTON_ID = 100; private ChooseDependencyModel model; public ChooseDependencyDialog(ChooseDependencyModel model, Shell shell) { super(model.getTitle(), model, shell); this.model = model; } @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); createButton(parent, DISABLE_BUTTON_ID, "Disable", false); } @Override protected void buttonPressed(int buttonId) { if (buttonId==DISABLE_BUTTON_ID) { model.performDisable(); close(); } super.buttonPressed(buttonId); } @Override protected List<WizardPageSection> createSections() throws CoreException { List<WizardPageSection> sections = new ArrayList<>(); sections.add(new StyledCommentSection(this, "Type <b>"+model.getTypeName()+"</b> is not yet on the project classpath.")); if (model.isShowChoices()) { sections.add(new HLineSection(this)); sections.add(new ChooseOneSection<MavenCoordinates>(this, "Choose a depenency to add it:", model.availableChoices, model.selected, model.validator ).vertical()); } sections.add(new HLineSection(this)); sections.add(new CommentSection(this, "Add this to your'"+model.getDependencyFileName()+"'?")); sections.add(new DescriptionSection(this, model.previewText) { @Override protected void configureTextWidget(Text text) { text.setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT)); } }); // sections.add(new HLineSection(this)); // sections.add(new CheckboxSection(this, model.disableJarTypeAssist)); return sections; } // /** // * Open the dialog and block until user has either made a choice or canceled. // */ // public static MavenCoordinates openOn(String title, String message, // Collection<MavenCoordinates> availableChoices, // Shell shell // ) throws CoreException, OperationCanceledException { // ChooseDependencyModel model = new ChooseDependencyModel(availableChoices); // ChooseDependencyDialog dialog = new ChooseDependencyDialog(title, message, // model, shell // ); // dialog.setBlockOnOpen(true); // dialog.open(); // return model.getResult(); // } public static MavenCoordinates openOn(ChooseDependencyModel model) { try { //TODO: Getting the shell in the manner below is iffy... and we might not even be // in the UI thread here! Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); return openOn(model, shell); } catch (Exception e) { Log.log(e); } return null; } public static MavenCoordinates openOn(ChooseDependencyModel model, Shell shell) { ChooseDependencyDialog dialog = new ChooseDependencyDialog(model, shell); dialog.setBlockOnOpen(true); dialog.open(); return model.getResult(); } }