/*
* 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.tasks;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.formapi.client.CommonGlobals;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.FormBuilderService;
import org.jbpm.formbuilder.client.bus.ExistingTasksResponseEvent;
import org.jbpm.formbuilder.client.bus.ExistingTasksResponseHandler;
import org.jbpm.formbuilder.client.bus.ui.TaskNameFilterEvent;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import org.jbpm.formbuilder.shared.task.TaskRef;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
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.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.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
public class AdvancedSearchView extends Grid {
private static final String FILE_TYPE = "file";
private static final String BPMN2_TYPE = "bpmn2";
private final EventBus bus = CommonGlobals.getInstance().getEventBus();
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final Map<String, List<TaskRef>> processes = new HashMap<String, List<TaskRef>>();
private final TextBox queryName = new TextBox();
private final ListBox queryType = new ListBox();
private final ListBox querySubType = new ListBox();
private final Button searchButton = new Button(i18n.SearchButton());
public AdvancedSearchView() {
super(3, 2);
queryType.addItem("");
queryType.addItem(i18n.BPMN2IOReferences(), BPMN2_TYPE);
queryType.addItem(i18n.FileIOReferences(), FILE_TYPE);
setWidget(0, 0, new Label(i18n.TypeLabel()));
setWidget(0, 1, queryType);
setWidget(1, 0, new Label(i18n.QueryLabel()));
setWidget(1, 1, queryName);
setWidget(2, 0, new HTML(" "));
queryType.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
String value = queryType.getValue(queryType.getSelectedIndex());
fireTypeSelection(value);
}
});
searchButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String query = queryName.getValue();
if (queryType.getSelectedIndex() > 0) {
query += " iotype:" + queryType.getValue(queryType.getSelectedIndex());
}
bus.fireEvent(new TaskNameFilterEvent(query));
}
});
querySubType.setWidth("150px");
querySubType.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
int index = querySubType.getSelectedIndex();
if (index > 0) {
String value = querySubType.getValue(index);
bus.fireEventFromSource(
new ExistingTasksResponseEvent(processes.get(value), value),
AdvancedSearchView.this
);
}
}
});
FormBuilderService server = FormBuilderGlobals.getInstance().getService();
bus.addHandlerToSource(ExistingTasksResponseEvent.TYPE, server, new ExistingTasksResponseHandler() {
@Override
public void onEvent(ExistingTasksResponseEvent event) {
List<TaskRef> tasks = event.getTasks();
processes.clear();
if (tasks != null) {
for (TaskRef task : tasks) {
String processId = task.getProcessId();
List<TaskRef> processTasks = processes.get(processId);
if (processTasks == null) {
processTasks = new ArrayList<TaskRef>();
}
processTasks.add(task);
processes.put(processId, processTasks);
}
for (Map.Entry<String, List<TaskRef>> entry : processes.entrySet()) {
querySubType.addItem(entry.getKey(), entry.getKey());
}
}
}
});
setWidget(2, 1, searchButton);
}
public void fireTypeSelection(String value) {
bus.fireEvent(new TaskNameFilterEvent("iotype:"+value));
if (value == null || "".equals(value)) {
setWidget(1, 0, new Label(i18n.QueryLabel()));
setWidget(1, 1, queryName);
} else if (BPMN2_TYPE.equals(value)) {
setWidget(1, 0, new Label(i18n.ProcessesLabel()));
querySubType.clear();
querySubType.addItem("...");
setWidget(1, 1, querySubType);
} else {
setWidget(1, 0, new Label(i18n.QueryLabel()));
setWidget(1, 1, queryName);
}
}
}