package org.activityinfo.legacy.shared.impl; import com.bedatadriven.rebar.sql.client.SqlResultSetRow; import com.bedatadriven.rebar.sql.client.query.SqlQuery; import com.bedatadriven.rebar.sql.client.util.SingleRowHandler; import com.google.common.base.Strings; import com.google.gwt.user.client.rpc.AsyncCallback; import org.activityinfo.legacy.shared.adapter.ActivityFormClassBuilder; import org.activityinfo.legacy.shared.command.GetActivityForm; import org.activityinfo.legacy.shared.command.GetFormClass; import org.activityinfo.legacy.shared.command.result.FormClassResult; import org.activityinfo.legacy.shared.model.ActivityFormDTO; import org.activityinfo.model.form.FormClass; import org.activityinfo.model.legacy.CuidAdapter; import org.activityinfo.model.resource.Resources; public class GetFormClassHandlerAsync implements CommandHandlerAsync<GetFormClass, FormClassResult> { @Override public void execute(GetFormClass command, final ExecutionContext context, final AsyncCallback<FormClassResult> callback) { final int activityId = CuidAdapter.getLegacyIdFromCuid(command.getResourceId()); SqlQuery.select("formClass") .from(Tables.ACTIVITY, "a") .where("a.activityId").equalTo(activityId) .execute(context.getTransaction(), new SingleRowHandler() { @Override public void handleRow(SqlResultSetRow row) { String json = row.getString("formClass"); if(Strings.isNullOrEmpty(json)) { constructFromLegacy(activityId, context, callback); } else { callback.onSuccess(new FormClassResult(json)); } } }); } private void constructFromLegacy(final int activityId, ExecutionContext context, final AsyncCallback<FormClassResult> callback) { context.execute(new GetActivityForm(activityId), new AsyncCallback<ActivityFormDTO>() { @Override public void onFailure(Throwable caught) { callback.onFailure(caught); } @Override public void onSuccess(ActivityFormDTO result) { String json; try { ActivityFormClassBuilder builder = new ActivityFormClassBuilder(result); FormClass formClass = builder.build(); json = Resources.toJson(formClass.asResource()); } catch (Exception e) { callback.onFailure(e); return; } callback.onSuccess(new FormClassResult(json)); } }); } }