/*
* Copyright (C) 2015 Jan Pokorsky
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cz.cas.lib.proarc.webapp.client.presenter;
import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import cz.cas.lib.proarc.webapp.client.Editor.PresenterFactory;
/**
* Manages workflow places.
*
* @author Jan Pokorsky
*/
public class WorkflowManaging extends AbstractActivity {
private final PresenterFactory presenterFactory;
private final WorkflowPlace place;
public WorkflowManaging(WorkflowPlace place, PresenterFactory presenterFactory) {
this.presenterFactory = presenterFactory;
this.place = place;
}
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
if (place instanceof WorkflowJobPlace) {
WorkflowJobsEditor presenter = presenterFactory.getWorkflowJobs();
panel.setWidget(presenter.getUI());
presenter.open((WorkflowJobPlace) place);
} else if (place instanceof WorkflowNewJobPlace) {
WorkflowNewJobEditor presenter = presenterFactory.getWorkflowNewJob();
panel.setWidget(presenter.getUI());
presenter.init();
} else if (place instanceof WorkflowTaskPlace) {
WorkflowTasksEditor presenter = presenterFactory.getWorkflowTasks();
panel.setWidget(presenter.getUI());
presenter.open((WorkflowTaskPlace) place);
} else {
panel.setWidget(null);
}
}
public static class WorkflowJobPlace extends WorkflowPlace {
private String jobId;
public String getJobId() {
return jobId;
}
public WorkflowJobPlace setJobId(String jobId) {
this.jobId = jobId;
return this;
}
@Override
public String toToken() {
JSONObject json = new JSONObject();
JsonTokenizer.putString(json, Tokenizer.TYPE, Type.JOBS.name());
return json.toString();
}
public static WorkflowJobPlace from(String type, JSONObject json) {
if (!Type.JOBS.name().equals(type)) {
return null;
}
return new WorkflowJobPlace();
}
}
public static class WorkflowTaskPlace extends WorkflowPlace {
private String taskId;
public String getTaskId() {
return taskId;
}
public WorkflowTaskPlace setTaskId(String taskId) {
this.taskId = taskId;
return this;
}
@Override
public String toToken() {
JSONObject json = new JSONObject();
JsonTokenizer.putString(json, Tokenizer.TYPE, Type.TASKS.name());
return json.toString();
}
public static WorkflowTaskPlace from(String type, JSONObject json) {
if (!Type.TASKS.name().equals(type)) {
return null;
}
return new WorkflowTaskPlace();
}
}
public static class WorkflowNewJobPlace extends WorkflowPlace {
@Override
public String toToken() {
JSONObject json = new JSONObject();
JsonTokenizer.putString(json, Tokenizer.TYPE, Type.NEWJOB.name());
return json.toString();
}
public static WorkflowNewJobPlace from(String type, JSONObject json) {
if (!Type.NEWJOB.name().equals(type)) {
return null;
}
return new WorkflowNewJobPlace();
}
}
public static abstract class WorkflowPlace extends Place {
public abstract String toToken();
enum Type {NEWJOB, JOBS, TASKS}
@Prefix("workflow")
public static final class Tokenizer implements PlaceTokenizer<WorkflowPlace> {
private static final String TYPE = "type";
@Override
public WorkflowPlace getPlace(String token) {
WorkflowPlace place = new WorkflowJobPlace();
JSONObject json = JsonTokenizer.parseObject(token);
if (json != null) {
String type = JsonTokenizer.getString(json, TYPE);
if ((place = WorkflowJobPlace.from(type, json)) == null) {
if ((place = WorkflowTaskPlace.from(type, json)) == null) {
if ((place = WorkflowNewJobPlace.from(type, json)) == null) {
}
}
}
}
return place;
}
@Override
public String getToken(WorkflowPlace place) {
return place.toToken();
}
}
}
}