/*
* Copyright 2011 JBoss Inc
*
* 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.jbpm.formbuilder.client.effect.view;
import java.util.HashMap;
import java.util.Map;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.effect.I18NFormEffect;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import org.jbpm.formbuilder.client.resources.FormBuilderResources;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class I18NEffectView extends PopupPanel {
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final Grid grid = new Grid(2, 3);
private final TextBox defaultText;
private final I18NFormEffect effect;
public I18NEffectView(I18NFormEffect formEffect) {
this.effect = formEffect;
defaultText = messageTextBox(effect.getItemI18nMap().get("default"));
VerticalPanel mainPanel = new VerticalPanel();
mainPanel.add(grid);
populateGrid();
HorizontalPanel buttonPanel = new HorizontalPanel();
Button addLocaleButton = new Button(i18n.AddLocaleButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
addLocaleToGrid("", "");
}
});
Button doneButton = new Button(i18n.ConfirmButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Map<String, String> i18nMap = new HashMap<String, String>();
i18nMap.put("default", defaultText.getValue());
for (int row = 2; row < grid.getRowCount(); row++) {
TextBox keyBox = (TextBox) grid.getWidget(row, 0);
TextBox valueBox = (TextBox) grid.getWidget(row, 1);
i18nMap.put(keyBox.getValue(), valueBox.getValue());
}
effect.setItemI18NMap(i18nMap);
effect.createStyles();
hide();
}
});
Button cancelButton = new Button(i18n.CancelButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
hide();
}
});
buttonPanel.add(addLocaleButton);
buttonPanel.add(doneButton);
buttonPanel.add(cancelButton);
buttonPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
mainPanel.add(buttonPanel);
add(mainPanel);
}
private void populateGrid() {
grid.setWidget(0, 0, new Label("default:"));
grid.setWidget(0, 1, defaultText);
grid.setWidget(1, 0, new Label(i18n.LocalesLabel()));
grid.setWidget(1, 1, new Label(i18n.MessagesLabel()));
for (Map.Entry<String, String> entry : effect.getItemI18nMap().entrySet()) {
if (!"default".equals(entry.getKey())) {
addLocaleToGrid(entry.getKey(), entry.getValue());
}
}
}
private void addLocaleToGrid(String localeName, String localeMessage) {
grid.resizeRows(grid.getRowCount() + 1);
int rowNumber = grid.getRowCount() - 1;
grid.setWidget(rowNumber, 0, messageTextBox(localeName));
grid.setWidget(rowNumber, 1, messageTextBox(localeMessage));
grid.setWidget(rowNumber, 2, removeButton());
}
private Button removeButton() {
Image img = new Image(FormBuilderResources.INSTANCE.removeSmallIcon());
SafeHtmlBuilder builder = new SafeHtmlBuilder().appendHtmlConstant(img.toString());
final Button removeButton = new Button(builder.toSafeHtml());
ClickHandler handler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int rowToRemove = -1;
for (int rowNum = 2; rowNum < grid.getColumnCount(); rowNum++) {
Widget widget = grid.getWidget(rowNum, 2);
if (widget != null && widget == removeButton) {
rowToRemove = rowNum;
break;
}
}
if (rowToRemove > 0) {
grid.removeRow(rowToRemove);
}
}
};
removeButton.addClickHandler(handler);
return removeButton;
}
private TextBox messageTextBox(String value) {
TextBox textBox = new TextBox();
if (value != null) {
textBox.setValue(value);
}
return textBox;
}
}