/*******************************************************************************
* Copyright (c) 2012-2016 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.machine.client.perspective.widgets.recipe.editor;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.KeyUpEvent;
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.Composite;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.SimpleLayoutPanel;
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.ide.api.editor.EditorPartPresenter;
import org.eclipse.che.ide.extension.machine.client.MachineLocalizationConstant;
import org.eclipse.che.ide.extension.machine.client.MachineResources;
import org.eclipse.che.ide.extension.machine.client.inject.factories.WidgetsFactory;
import org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor.button.EditorButtonWidget;
import org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor.button.EditorButtonWidgetImpl;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/**
* @author Valeriy Svydenko
*/
public class RecipeEditorViewImpl extends Composite implements RecipeEditorView {
interface PropertiesPanelViewImplUiBinder extends UiBinder<Widget, RecipeEditorViewImpl> {
}
private static final PropertiesPanelViewImplUiBinder UI_BINDER = GWT.create(PropertiesPanelViewImplUiBinder.class);
@UiField
FlowPanel buttonsPanel;
@UiField
FlowPanel tagsPanel;
@UiField
FlowPanel urlPanel;
@UiField
FlowPanel namePanel;
@UiField
DockLayoutPanel recipePanel;
@UiField
SimpleLayoutPanel editorPanel;
@UiField
TextBox scriptUrl;
@UiField
TextBox tags;
@UiField
TextBox name;
@UiField(provided = true)
final MachineResources resources;
private final WidgetsFactory widgetFactory;
private ActionDelegate delegate;
private EditorButtonWidget saveBtn;
private EditorButtonWidget cloneBtn;
private EditorButtonWidget cancelBtn;
private EditorButtonWidget deleteBtn;
@Inject
public RecipeEditorViewImpl(MachineResources resources, MachineLocalizationConstant locale, WidgetsFactory widgetFactory) {
this.resources = resources;
this.widgetFactory = widgetFactory;
initWidget(UI_BINDER.createAndBindUi(this));
EditorButtonWidget.ActionDelegate createDelegate = new EditorButtonWidget.ActionDelegate() {
@Override
public void onButtonClicked() {
delegate.onNewButtonClicked();
}
};
createButton(locale.editorButtonNew(), createDelegate, EditorButtonWidgetImpl.Background.BLUE);
EditorButtonWidget.ActionDelegate cloneDelegate = new EditorButtonWidget.ActionDelegate() {
@Override
public void onButtonClicked() {
delegate.onCloneButtonClicked();
}
};
cloneBtn = createButton(locale.editorButtonClone(), cloneDelegate, EditorButtonWidgetImpl.Background.GREY);
EditorButtonWidget.ActionDelegate saveDelegate = new EditorButtonWidget.ActionDelegate() {
@Override
public void onButtonClicked() {
delegate.onSaveButtonClicked();
}
};
saveBtn = createButton(locale.editorButtonSave(), saveDelegate, EditorButtonWidgetImpl.Background.GREY);
EditorButtonWidget.ActionDelegate deleteDelegate = new EditorButtonWidget.ActionDelegate() {
@Override
public void onButtonClicked() {
delegate.onDeleteButtonClicked();
}
};
deleteBtn = createButton(locale.editorButtonDelete(), deleteDelegate, EditorButtonWidgetImpl.Background.GREY);
EditorButtonWidget.ActionDelegate cancelDelegate = new EditorButtonWidget.ActionDelegate() {
@Override
public void onButtonClicked() {
delegate.onCancelButtonClicked();
}
};
cancelBtn = createButton(locale.editorButtonCancel(), cancelDelegate, EditorButtonWidgetImpl.Background.GREY);
}
@NotNull
private EditorButtonWidget createButton(@NotNull String title,
@NotNull EditorButtonWidget.ActionDelegate delegate,
@NotNull EditorButtonWidgetImpl.Background background) {
EditorButtonWidget button = widgetFactory.createEditorButton(title, background);
button.setDelegate(delegate);
buttonsPanel.add(button);
return button;
}
/** {@inheritDoc} */
@Override
public void setDelegate(ActionDelegate delegate) {
this.delegate = delegate;
}
/** {@inheritDoc} */
@Override
public void setScriptUrl(@NotNull String url) {
scriptUrl.setText(url);
}
/** {@inheritDoc} */
@Override
public void setTags(@NotNull List<String> tags) {
StringBuilder stringTags = new StringBuilder();
for (String tag : tags) {
stringTags.append(tag).append(" ");
}
this.tags.setText(stringTags.toString());
}
/** {@inheritDoc} */
@NotNull
@Override
public String getScriptUrl() {
return scriptUrl.getText();
}
/** {@inheritDoc} */
@NotNull
@Override
public String getName() {
return name.getText();
}
/** {@inheritDoc} */
@Override
public void setName(@NotNull String name) {
this.name.setText(name);
}
/** {@inheritDoc} */
@NotNull
@Override
public List<String> getTags() {
List<String> tagList = new ArrayList<>();
for (String tag : tags.getText().split(" ")) {
if (!tag.isEmpty()) {
tagList.add(tag.trim());
}
}
return tagList;
}
/** {@inheritDoc} */
@Override
public void setEnableSaveButton(boolean enable) {
saveBtn.setEnable(enable);
}
/** {@inheritDoc} */
@Override
public void setEnableCancelButton(boolean enable) {
cancelBtn.setEnable(enable);
}
/** {@inheritDoc} */
@Override
public void setEnableDeleteButton(boolean enable) {
deleteBtn.setEnable(enable);
}
/** {@inheritDoc} */
@Override
public void setVisibleSaveButton(boolean visible) {
saveBtn.setVisible(visible);
}
/** {@inheritDoc} */
@Override
public void setVisibleDeleteButton(boolean visible) {
deleteBtn.setVisible(visible);
}
/** {@inheritDoc} */
@Override
public void setVisibleCancelButton(boolean visible) {
cancelBtn.setVisible(visible);
}
/** {@inheritDoc} */
@Override
public void setEnableCloneButton(boolean enable) {
cloneBtn.setEnable(enable);
}
/** {@inheritDoc} */
@Override
public void setVisibleCloneButton(boolean visible) {
cloneBtn.setVisible(visible);
}
/** {@inheritDoc} */
@Override
public void showEditor(@NotNull EditorPartPresenter editor) {
editor.go(editorPanel);
}
/** {@inheritDoc} */
@Override
public void hideButtonsPanel() {
recipePanel.setWidgetHidden(buttonsPanel, true);
}
@UiHandler({"tags", "name"})
public void onTextInputted(@SuppressWarnings("UnusedParameters") KeyUpEvent event) {
cancelBtn.setEnable(true);
saveBtn.setEnable(true);
}
}