/*******************************************************************************
* Copyright (c) 2012-2015 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.ide.extension.maven.client.module;
import org.eclipse.che.ide.collections.Array;
import org.eclipse.che.ide.collections.Collections;
import org.eclipse.che.ide.extension.maven.client.MavenArchetype;
import org.eclipse.che.ide.projecttype.wizard.ProjectWizardResources;
import org.eclipse.che.ide.ui.buttonLoader.ButtonLoaderResources;
import org.eclipse.che.ide.ui.window.Window;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
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.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.inject.Inject;
import com.google.inject.Singleton;
/**
* @author Evgen Vidolob
*/
@Singleton
public class CreateMavenModuleViewImpl extends Window implements CreateMavenModuleView {
public static final String CREATE = "Create";
private static CreateMavenModuleViewImplUiBinder ourUiBinder = GWT.create(CreateMavenModuleViewImplUiBinder.class);
private final Button createButton;
@UiField
CheckBox generateFromArchetype;
@UiField
Label archetypeLabel;
@UiField
ListBox archetypeField;
@UiField
TextBox parentArtifactId;
@UiField
TextBox nameField;
@UiField
TextBox artifactId;
@UiField
TextBox groupIdField;
@UiField
TextBox versionField;
@UiField
Label packagingLabel;
@UiField
ListBox packagingField;
@UiField(provided = true)
CreateMavenModuleResources.Css styles;
private Array<MavenArchetype> archetypes;
private ActionDelegate delegate;
@Inject
public CreateMavenModuleViewImpl(ProjectWizardResources wizardResources, CreateMavenModuleResources resources,
ButtonLoaderResources buttonLoaderResources) {
super(true);
styles = resources.css();
styles.ensureInjected();
archetypes = Collections.createArray();
setTitle("Create Maven Module");
FlowPanel rootElement = ourUiBinder.createAndBindUi(this);
setWidget(rootElement);
createButton = new Button();
createButton.setText(CREATE);
createButton.addStyleName(wizardResources.wizardCss().blueButton());
createButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
delegate.create();
}
});
getFooter().add(createButton);
createButton.addStyleName(buttonLoaderResources.Css().buttonLoader());
}
@UiHandler("nameField")
void onNameChanged(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
return;
}
delegate.projectNameChanged(nameField.getText());
}
@UiHandler("artifactId")
void onArtifactChanged(KeyUpEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
return;
}
delegate.artifactIdChanged(artifactId.getText());
}
@UiHandler({"generateFromArchetype"})
void generateFromArchetypeHandler(ValueChangeEvent<Boolean> event) {
delegate.generateFromArchetypeChanged(generateFromArchetype.getValue());
}
@Override
protected void onClose() {
delegate.onClose();
}
@Override
public void setDelegate(ActionDelegate delegate) {
this.delegate = delegate;
}
@Override
public MavenArchetype getArchetype() {
final String coordinates = archetypeField.getValue(archetypeField.getSelectedIndex());
for (MavenArchetype archetype : archetypes.asIterable()) {
if (coordinates.equals(archetype.toString())) {
return archetype;
}
}
return null;
}
@Override
public void setArchetypes(Array<MavenArchetype> archetypes) {
this.archetypes.clear();
this.archetypes.addAll(archetypes);
archetypeField.clear();
for (MavenArchetype archetype : archetypes.asIterable()) {
archetypeField.addItem(archetype.toString(), archetype.toString());
}
}
@Override
public void enableArchetypes(boolean enabled) {
archetypeField.setEnabled(enabled);
}
@Override
public boolean isGenerateFromArchetypeSelected() {
return generateFromArchetype.getValue();
}
@Override
public void setParentArtifactId(String artifactId) {
parentArtifactId.setValue(artifactId);
}
@Override
public void setCreateButtonEnabled(boolean enabled) {
createButton.setEnabled(enabled);
}
@Override
public void setNameError(boolean hasError) {
if (hasError) {
nameField.addStyleName(styles.inputError());
} else {
nameField.removeStyleName(styles.inputError());
}
}
@Override
public void setArtifactIdError(boolean hasError) {
if (hasError) {
artifactId.addStyleName(styles.inputError());
} else {
artifactId.removeStyleName(styles.inputError());
}
}
@Override
public void reset() {
nameField.setValue("");
artifactId.setValue("");
generateFromArchetype.setValue(false);
archetypes.clear();
archetypeField.clear();
}
@Override
public String getPackaging() {
return packagingField.getValue(packagingField.getSelectedIndex());
}
@Override
public String getGroupId() {
return groupIdField.getText();
}
@Override
public void setGroupId(String groupId) {
groupIdField.setValue(groupId);
}
@Override
public String getVersion() {
return versionField.getText();
}
@Override
public void setVersion(String version) {
versionField.setValue(version);
}
@Override
public void setPackagingVisibility(boolean visible) {
packagingLabel.setVisible(visible);
packagingField.setVisible(visible);
}
@Override
public void close() {
hide();
}
@Override
public void showButtonLoader(boolean showLoader) {
if (showLoader) {
createButton.setEnabled(false);
createButton.setHTML("<i></i>");
} else {
createButton.setEnabled(true);
createButton.setText(CREATE);
}
}
@Override
public void clearArchetypes() {
archetypes.clear();
archetypeField.clear();
}
interface CreateMavenModuleViewImplUiBinder extends UiBinder<FlowPanel, CreateMavenModuleViewImpl> {
}
}