/*
* 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.menu;
import org.jbpm.formapi.client.CommonGlobals;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.bus.FormDataPopulatedEvent;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* form data popup panel. UI to alter form properties (enctype, action, name, etc)
*/
public class FormDataPopupPanel extends PopupPanel {
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final EventBus bus = CommonGlobals.getInstance().getEventBus();
private final ListBox enctype = new ListBox(false);
private final ListBox method = new ListBox(false);
private final TextBox action = new TextBox();
private final TextBox taskId = new TextBox();
private final TextBox processId = new TextBox();
private final TextBox name = new TextBox();
private final TextArea documentation = new TextArea();
public FormDataPopupPanel() {
this(false);
}
public FormDataPopupPanel(boolean showForSavingForm) {
super(true);
setStyleName("commandPopupPanel");
VerticalPanel vPanel = new VerticalPanel();
vPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
Grid grid = new Grid(7, 2);
enctype.addItem("multipart/form-data");
enctype.addItem("application/x-www-form-urlencoded");
enctype.setSelectedIndex(0);
action.setValue("complete");
method.addItem("POST");
method.addItem("GET");
method.setSelectedIndex(0);
if (showForSavingForm) {
method.setEnabled(false);
enctype.setEnabled(false);
action.setEnabled(false);
taskId.setEnabled(false);
processId.setEnabled(false);
documentation.setCharacterWidth(30);
documentation.setVisibleLines(4);
grid.setWidget(0, 0, new Label(i18n.CheckInComment()));
grid.setWidget(0, 1, documentation);
} else {
grid.setWidget(0, 0, new HTML(" "));
grid.setWidget(0, 1, new HTML(" "));
}
grid.setWidget(1, 0, new Label(i18n.FormAction()));
grid.setWidget(1, 1, action);
grid.setWidget(2, 0, new Label(i18n.FormMethod()));
grid.setWidget(2, 1, method);
grid.setWidget(3, 0, new Label(i18n.FormEnctype()));
grid.setWidget(3, 1, enctype);
grid.setWidget(4, 0, new Label(i18n.FormProcessId()));
grid.setWidget(4, 1, processId);
grid.setWidget(5, 0, new Label(i18n.FormTaskId()));
grid.setWidget(5, 1, taskId);
grid.setWidget(6, 0, new Label(i18n.FormName()));
grid.setWidget(6, 1, name);
vPanel.add(grid);
HorizontalPanel buttonPanel = new HorizontalPanel();
buttonPanel.add(new Button(i18n.ConfirmButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
bus.fireEvent(new FormDataPopulatedEvent(action.getValue(),
method.getValue(method.getSelectedIndex()), taskId.getValue(),
processId.getValue(), enctype.getValue(enctype.getSelectedIndex()),
name.getValue()));
hide();
}
}));
buttonPanel.add(new Button(i18n.CancelButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
hide();
}
}));
vPanel.add(buttonPanel);
vPanel.setStyleName("commandContent");
setWidget(vPanel);
}
public void setTaskId(String taskId) {
this.taskId.setValue(taskId);
}
public void setProcessId(String processId) {
this.processId.setValue(processId);
}
public void setEnctype(String enctype) {
for (int index = 0; index < this.enctype.getItemCount(); index++) {
if (this.enctype.getValue(index).equals(enctype)) {
this.enctype.setSelectedIndex(index);
break;
}
}
}
public void setMethod(String method) {
for (int index = 0; index < this.method.getItemCount(); index++) {
if (this.method.getValue(index).equals(method)) {
this.method.setSelectedIndex(index);
break;
}
}
}
public void setAction(String action) {
this.action.setValue(action);
}
public void setName(String name) {
this.name.setValue(name);
}
public String getFormName() {
return name.getValue();
}
public String getAction() {
return action.getValue();
}
public String getTaskId() {
return taskId.getValue();
}
public String getProcessId() {
return processId.getValue();
}
public String getMethod() {
return method.getValue(method.getSelectedIndex());
}
public String getEnctype() {
return enctype.getValue(enctype.getSelectedIndex());
}
public String getDocumentation() {
return documentation.getValue();
}
@Override
protected void onLoad() {
super.onLoad();
int left = getPopupLeft();
int top = getPopupTop();
int width = getOffsetWidth();
int height = getOffsetHeight();
boolean changed = false;
if (left + width > Window.getClientWidth()) {
left -= width;
changed = true;
}
if (top + height > Window.getClientHeight()) {
top -= height;
changed = true;
}
if (changed) {
setPopupPosition(left, top);
}
}
}