/** * Copyright (C) 2015 Born Informatik AG (www.born.ch) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wte4j.examples.showcase.client.management; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Form; import org.gwtbootstrap3.client.ui.Image; import org.gwtbootstrap3.client.ui.InlineHelpBlock; import org.gwtbootstrap3.client.ui.LinkedGroup; import org.gwtbootstrap3.client.ui.LinkedGroupItem; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.client.ui.form.error.BasicEditorError; import org.gwtbootstrap3.client.ui.form.validator.Validator; import org.wte4j.examples.showcase.client.Application; import com.google.gwt.core.shared.GWT; import com.google.gwt.editor.client.Editor; import com.google.gwt.editor.client.EditorError; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; public class NewTemplatePanel extends Composite implements NewTemplateDisplay { private static NewTemplatePanelUiBinder uiBinder = GWT.create(NewTemplatePanelUiBinder.class); @UiField Form createTemplateForm; @UiField TextBox templateName; @UiField InlineHelpBlock dataModelAlert; @UiField LinkedGroup dataModelList; @UiField Button createTemplate; @UiField Button closeDialog; @UiField Image loadingSpinner; private Map<String, LinkedGroupItem> dataModelNameToItem = new HashMap<String, LinkedGroupItem>(); public NewTemplatePanel() { this.initWidget(uiBinder.createAndBindUi(this)); initTemplateName(); initSpinner(); } @SuppressWarnings("unchecked") private void initTemplateName() { Validator<String> validator = new Validator<String>() { @Override public int getPriority() { return 0; } @Override public List<EditorError> validate(Editor<String> editor, String value) { List<EditorError> errors = new ArrayList<EditorError>(); if (value == null || "".equals(value)) { errors.add(new BasicEditorError(editor, value, Application.MESSAGES.wte4j_message_template_name_not_empty())); } return errors; } }; templateName.setValidators(validator); templateName.setValidateOnBlur(true); } private void initSpinner() { loadingSpinner.setResource(Application.RESOURCES.loadingSpinner()); loadingSpinner.setVisible(false); } @Override public void setDataModelListItems(List<DataModelItem> dataModelItems) { dataModelList.clear(); dataModelNameToItem.clear(); boolean first = true; for (DataModelItem item : dataModelItems) { LinkedGroupItem groupItem = new LinkedGroupItem(); groupItem.setText(item.getText()); groupItem.addClickHandler(item.getClickHandler()); if (first) { groupItem.setActive(true); } else { groupItem.setActive(false); } first = false; dataModelNameToItem.put(item.getText(), groupItem); dataModelList.add(groupItem); } } @Override public String getTemplateName() { return templateName.getText(); } @Override public void setTemplateName(String value) { templateName.setValue(value); } @Override public void setFocusOnTemplateName() { templateName.selectAll(); templateName.setFocus(true); } @Override public void addCloseDialogClickHandler(ClickHandler clickHandler) { closeDialog.addClickHandler(clickHandler); } @Override public void addCreateTemplateClickHandler(ClickHandler clickHandler) { createTemplate.addClickHandler(clickHandler); } @Override public boolean validateAddTemplateForm() { return createTemplateForm.validate() && isOneDataModelActive(); } private boolean isOneDataModelActive() { boolean oneDataModel = false; for (String dataModel : dataModelNameToItem.keySet()) { LinkedGroupItem item = dataModelNameToItem.get(dataModel); if (!oneDataModel && item.isActive()) { oneDataModel = true; } else if (oneDataModel && item.isActive()) { oneDataModel = false; break; } } if (!oneDataModel) { dataModelAlert.setText(Application.MESSAGES.wte4j_message_one_data_model_selected()); dataModelAlert.setVisible(true); } else { dataModelAlert.setVisible(false); } return oneDataModel; } @Override public String getSelectedDataModel() { for (String dataModel : dataModelNameToItem.keySet()) { LinkedGroupItem item = dataModelNameToItem.get(dataModel); if (item.isActive()) return dataModel; } return ""; } @Override public void setSelectedDataModel(String selectedDataModel) { for (String dataModel : dataModelNameToItem.keySet()) { LinkedGroupItem item = dataModelNameToItem.get(dataModel); if (dataModel.equals(selectedDataModel)) item.setActive(true); else item.setActive(false); } } @Override public void showSpinner() { closeDialog.setVisible(false); createTemplate.setVisible(false); loadingSpinner.setVisible(true); } @Override public void hideSpinner() { closeDialog.setVisible(true); createTemplate.setVisible(true); loadingSpinner.setVisible(false); } interface NewTemplatePanelUiBinder extends UiBinder<Widget, NewTemplatePanel> { } }