/*
* 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.toolbar;
import java.util.ArrayList;
import java.util.List;
import org.jbpm.formapi.client.CommonGlobals;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.bus.GetFormRepresentationEvent;
import org.jbpm.formbuilder.client.bus.GetFormRepresentationResponseEvent;
import org.jbpm.formbuilder.client.bus.GetFormRepresentationResponseHandler;
import org.jbpm.formbuilder.client.bus.LoadServerFormEvent;
import org.jbpm.formbuilder.client.bus.ui.EmbededIOReferenceEvent;
import org.jbpm.formbuilder.client.bus.ui.EmbededIOReferenceHandler;
import org.jbpm.formbuilder.client.bus.ui.TaskSelectedEvent;
import org.jbpm.formbuilder.client.bus.ui.TaskSelectedHandler;
import org.jbpm.formbuilder.client.command.LoadFormCommand;
import org.jbpm.formbuilder.client.command.SaveFormCommand;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import org.jbpm.formbuilder.client.options.UndoRedoManager;
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.event.shared.EventBus;
/**
* Toolbar presenter. Registers buttons to send {@link EventBus} notifications
*/
public class ToolBarPresenter {
private static final String SAVE_TYPE = SaveFormCommand.class.getName();
private static final String LOAD_TYPE = LoadFormCommand.class.getName();
private final ToolBarView view;
private final EventBus bus = CommonGlobals.getInstance().getEventBus();
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
private final FormBuilderResources resources = FormBuilderGlobals.getInstance().getResources();
private final UndoRedoManager mgr = UndoRedoManager.getInstance();
private final ToolRegistration saveRef;
private final List<ToolRegistration> messageRefs = new ArrayList<ToolRegistration>();
public ToolBarPresenter(ToolBarView toolBarView) {
this.view = toolBarView;
this.saveRef = this.view.addButton(resources.saveButton(), i18n.SaveChangesButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
bus.fireEvent(new GetFormRepresentationEvent(SAVE_TYPE));
}
});
this.view.addButton(resources.refreshButton(), i18n.RefreshFromServerButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
bus.fireEvent(new GetFormRepresentationEvent(LOAD_TYPE));
}
});
this.view.addButton(resources.undoButton(), i18n.UndoButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
mgr.undo();
}
});
this.view.addButton(resources.redoButton(), i18n.RedoButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
mgr.redo();
}
});
bus.addHandler(GetFormRepresentationResponseEvent.TYPE, new GetFormRepresentationResponseHandler() {
@Override
public void onEvent(final GetFormRepresentationResponseEvent event) {
if (LOAD_TYPE.equals(event.getSaveType())) {
view.showDialog(i18n.RefreshButtonWarning(), new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
if (LOAD_TYPE.equals(event.getSaveType())) {
if (event.getRepresentation().isSaved()) {
bus.fireEvent(new LoadServerFormEvent(event.getRepresentation().getName()));
}
}
}
});
}
}
});
bus.addHandler(EmbededIOReferenceEvent.TYPE, new EmbededIOReferenceHandler() {
@Override
public void onEvent(EmbededIOReferenceEvent event) {
if (event.getProfileName() != null) {
saveRef.remove();
}
}
});
bus.addHandler(TaskSelectedEvent.TYPE, new TaskSelectedHandler() {
@Override
public void onSelectedTask(TaskSelectedEvent event) {
if (event.getSelectedTask() == null) {
for (ToolRegistration messageRef : messageRefs) {
messageRef.remove();
}
} else {
messageRefs.add(view.addMessage(i18n.PackageLabel(), event.getSelectedTask().getPackageName()));
messageRefs.add(view.addMessage(i18n.ProcessLabel(), event.getSelectedTask().getProcessId()));
messageRefs.add(view.addMessage(i18n.TaskNameLabel(), event.getSelectedTask().getTaskName()));
}
}
});
}
}