/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.maven.client.wizard; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import org.eclipse.che.plugin.maven.client.MavenArchetype; import org.eclipse.che.plugin.maven.client.MavenLocalizationConstant; import org.eclipse.che.ide.ui.listbox.CustomListBox; import java.util.ArrayList; import java.util.List; /** * @author Evgen Vidolob */ public class MavenPageViewImpl implements MavenPageView { private static MavenPageViewImplUiBinder ourUiBinder = GWT.create(MavenPageViewImplUiBinder.class); private final DockLayoutPanel rootElement; @UiField Style style; @UiField TextBox versionField; @UiField TextBox groupId; @UiField TextBox artifactId; @UiField Button artifactIdTooltipButton; @UiField Button groupIdTooltipButton; @UiField Label packagingLabel; @UiField CustomListBox packagingField; @UiField CheckBox generateFromArchetype; @UiField Label archetypeLabel; @UiField CustomListBox archetypeField; private ActionDelegate delegate; private List<MavenArchetype> archetypes; @Inject public MavenPageViewImpl(MavenLocalizationConstant localizedConstant) { rootElement = ourUiBinder.createAndBindUi(this); archetypes = new ArrayList<>(); artifactId.setFocus(true); packagingField.addItem("not specified", ""); packagingField.addItem("JAR", "jar"); packagingField.addItem("WAR", "war"); packagingField.addItem("POM", "pom"); packagingField.setSelectedIndex(0); generateFromArchetype.setValue(false); final Element artifactIdTooltip = DOM.createSpan(); artifactIdTooltip.setInnerText(localizedConstant.mavenPageArtifactIdTooltip()); artifactIdTooltipButton.addMouseOverHandler(new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { final Element link = event.getRelativeElement(); if (!link.isOrHasChild(artifactIdTooltip)) { link.appendChild(artifactIdTooltip); } } }); artifactIdTooltipButton.addStyleName(style.tooltip()); final Element groupIdTooltip = DOM.createSpan(); groupIdTooltip.setInnerText(localizedConstant.mavenPageGroupIdTooltip()); groupIdTooltipButton.addMouseOverHandler(new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { final Element link = event.getRelativeElement(); if (!link.isOrHasChild(groupIdTooltip)) { link.appendChild(groupIdTooltip); } } }); groupIdTooltipButton.addStyleName(style.tooltip()); } @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } @Override public Widget asWidget() { return rootElement; } @Override public String getArtifactId() { return artifactId.getText(); } @Override public void setArtifactId(String artifactId) { this.artifactId.setText(artifactId); } @Override public String getVersion() { return versionField.getText(); } @Override public void setVersion(String value) { versionField.setText(value); } @Override public String getPackaging() { return packagingField.getValue(packagingField.getSelectedIndex()); } @Override public void setPackaging(String packaging) { for (int i = 0; i < packagingField.getItemCount(); i++) { if (packaging.equals(packagingField.getValue(i))) { packagingField.setSelectedIndex(i); break; } } } @Override public MavenArchetype getArchetype() { final String coordinates = archetypeField.getValue(archetypeField.getSelectedIndex()); for (MavenArchetype archetype : archetypes) { if (coordinates.equals(archetype.toString())) { return archetype; } } return null; } @Override public void setArchetypes(List<MavenArchetype> archetypes) { this.archetypes.clear(); this.archetypes.addAll(archetypes); archetypeField.clear(); for (MavenArchetype archetype : archetypes) { archetypeField.addItem(archetype.toString(), archetype.toString()); } } @Override public void setPackagingVisibility(boolean visible) { packagingLabel.setVisible(visible); packagingField.setVisible(visible); } @Override public void setArchetypeSectionVisibility(boolean visible) { generateFromArchetype.setVisible(visible); archetypeLabel.setVisible(visible); archetypeField.setVisible(visible); } @Override public void enableArchetypes(boolean enabled) { archetypeField.setEnabled(enabled); } @Override public boolean isGenerateFromArchetypeSelected() { return generateFromArchetype.getValue(); } @Override public String getGroupId() { return groupId.getText(); } @Override public void setGroupId(String group) { groupId.setText(group); } @UiHandler({"versionField", "groupId", "artifactId"}) void onKeyUp(KeyUpEvent event) { delegate.onCoordinatesChanged(); } @UiHandler("packagingField") void onPackagingChanged(ChangeEvent event) { delegate.packagingChanged(getPackaging()); } @UiHandler({"generateFromArchetype"}) void generateFromArchetypeHandler(ValueChangeEvent<Boolean> event) { delegate.generateFromArchetypeChanged(generateFromArchetype.getValue()); } @UiHandler("archetypeField") void onArchetypeChanged(ChangeEvent event) { delegate.archetypeChanged(getArchetype()); } @Override public void showArtifactIdMissingIndicator(boolean doShow) { if (doShow) { artifactId.addStyleName(style.inputError()); } else { artifactId.removeStyleName(style.inputError()); } } @Override public void showGroupIdMissingIndicator(boolean doShow) { if (doShow) { groupId.addStyleName(style.inputError()); } else { groupId.removeStyleName(style.inputError()); } } @Override public void showVersionMissingIndicator(boolean doShow) { if (doShow) { versionField.addStyleName(style.inputError()); } else { versionField.removeStyleName(style.inputError()); } } @Override public void clearArchetypes() { archetypes.clear(); archetypeField.clear(); } interface MavenPageViewImplUiBinder extends UiBinder<DockLayoutPanel, MavenPageViewImpl> { } interface Style extends CssResource { String inputError(); String tooltip(); } }