/* * 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; import java.util.HashMap; import java.util.Map; import org.jbpm.formapi.client.CommonGlobals; import org.jbpm.formapi.client.effect.FBFormEffect; import org.jbpm.formapi.client.form.FBFormItem; import org.jbpm.formapi.shared.api.ExternalData; import org.jbpm.formapi.shared.api.Formatter; import org.jbpm.formapi.shared.api.InputData; import org.jbpm.formapi.shared.api.OutputData; import org.jbpm.formbuilder.client.FormBuilderGlobals; import org.jbpm.formbuilder.client.bus.ui.TaskSelectedEvent; import org.jbpm.formbuilder.client.bus.ui.TaskSelectedHandler; import org.jbpm.formbuilder.client.effect.view.IoBindingEffectView; import org.jbpm.formbuilder.shared.task.ExternalDataRef; import org.jbpm.formbuilder.shared.task.TaskPropertyRef; import org.jbpm.formbuilder.shared.task.TaskRef; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.ui.PopupPanel; import com.gwtent.reflection.client.Reflectable; /** * Allows to bind a task input or output to a given UI component */ @Reflectable public class IoBindingEffect extends FBFormEffect { private final EventBus bus = CommonGlobals.getInstance().getEventBus(); private TaskRef ioRef = null; private TaskPropertyRef input = null; private TaskPropertyRef output = null; private ExternalDataRef extData = null; public IoBindingEffect() { super(FormBuilderGlobals.getInstance().getI18n().IoBindingEffectLabel(), true); bus.addHandler(TaskSelectedEvent.TYPE, new TaskSelectedHandler() { @Override public void onSelectedTask(TaskSelectedEvent event) { if (event.getSelectedTask() != null) { ioRef = event.getSelectedTask(); } } }); } public void fire() { createStyles(); } @Override protected void createStyles() { FBFormItem item = getItem(); InputData in = null; if (this.input != null) { in = new InputData(); in.setName(this.input.getName()); in.setValue(this.input.getSourceExpresion()); in.setMimeType("multipart/form-data"); in.setFormatter(new Formatter() { @Override public Object format(Object object) { return object; } @Override public Map<String, Object> getDataMap() { return new HashMap<String, Object>(); } }); } item.setInput(in); OutputData out = null; if (this.output != null) { out = new OutputData(); out.setName(this.output.getName()); out.setValue(this.output.getSourceExpresion()); out.setMimeType("multipart/form-data"); out.setFormatter(new Formatter() { @Override public Object format(Object object) { return object; } @Override public Map<String, Object> getDataMap() { return new HashMap<String, Object>(); } }); } item.setOutput(out); ExternalData external = null; if (extData != null) { external = new ExternalData(); external.setMethod(extData.getMethod()); external.setResponseLanguage(extData.getResponseLanguage()); external.setSource(extData.getSource()); external.setXpath(extData.getXpath()); } item.setExternal(external); } @Override public FBFormItem getItem() { return super.getItem(); } public TaskRef getIoRef() { return ioRef; } public TaskPropertyRef getInput() { return input; } public void setInput(TaskPropertyRef input) { this.input = input; } public TaskPropertyRef getOutput() { return output; } public void setOutput(TaskPropertyRef output) { this.output = output; } public ExternalDataRef getExtData() { return extData; } public void setExtData(ExternalDataRef extData) { this.extData = extData; } @Override public PopupPanel createPanel() { return new IoBindingEffectView(this); } @Override public boolean isValidForItem(FBFormItem item) { return this.ioRef != null; } }