package module.webservice.api.json;
import org.fenixedu.bennu.core.json.JsonBuilder;
import org.fenixedu.bennu.core.json.JsonViewer;
import org.fenixedu.bennu.core.util.CoreConfiguration;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import module.mission.domain.Mission;
import module.mission.domain.MissionProcess;
import module.mission.domain.util.MissionState;
public class AbbreviatedMissionAdapter implements JsonViewer<Mission> {
@Override
public JsonElement view(Mission obj, JsonBuilder ctx) {
return abreviatedArchive(obj.getMissionProcess());
}
public JsonObject abreviatedArchive(MissionProcess missionProcess) {
final JsonObject result = getBasicInformation(missionProcess);
result.add("missionStates", getMissionStates(missionProcess));
result.addProperty("numberOfComments", missionProcess.getCommentsSet().size());
result.addProperty("processUrl",
CoreConfiguration.getConfiguration().applicationUrl() + "/ForwardToProcess/" + missionProcess.getExternalId());
return result;
}
private JsonElement getMissionStates(MissionProcess missionProcess) {
final JsonArray jsonArray = new JsonArray();
for (final MissionState missionState : missionProcess.getMissionStates()) {
jsonArray.add(this.toJson(missionState, missionProcess));
}
return jsonArray;
}
public JsonObject getBasicInformation(MissionProcess missionProcess) {
final JsonObject result = new JsonObject();
result.addProperty("processNumber", missionProcess.getProcessNumber());
result.addProperty("processName", missionProcess.getPresentationName());
result.addProperty("processIdentification", missionProcess.getProcessIdentification());
result.addProperty("createdBy", missionProcess.getProcessCreator().getUsername());
result.addProperty("createdOn", missionProcess.getCreationDate().toString("yyyy-MM-dd"));
result.addProperty("destination", missionProcess.getMission().getDestinationDescription());
result.addProperty("responsibleParticipant", missionProcess.getMission().getMissionResponsibleName());
result.addProperty("requester", missionProcess.getMission().getRequestingPerson().getPresentationName());
result.addProperty("objective", missionProcess.getMission().getObjective());
result.addProperty("departure", missionProcess.getMission().getDaparture().toString("yyyy-MM-dd HH:mm"));
result.addProperty("arrival", missionProcess.getMission().getArrival().toString("yyyy-MM-dd HH:mm"));
result.addProperty("numberOfDays", missionProcess.getMission().getDurationInDays());
result.addProperty("totalCost", missionProcess.getMission().getTotalPrevisionaryCost().toFormatString());
result.addProperty("isGrantOwnerEquivalence", missionProcess.getMission().getGrantOwnerEquivalence());
if (missionProcess.getMission().getServiceGaranteePerson() != null) {
result.addProperty("whoCheckedLocalServiceConditions",
missionProcess.getMission().getServiceGaranteePerson().getPresentationName());
result.addProperty("serviceConditionsCheckedOn",
missionProcess.getMission().getServiceGaranteeInstante().toString("yyyy-MM-dd HH:mm"));
}
return result;
}
private JsonObject toJson(final MissionState missionState, MissionProcess missionProcess) {
final JsonObject o = new JsonObject();
o.addProperty("name", missionState.getLocalizedName());
o.addProperty("description", missionState.getLocalizedDescription());
o.addProperty("idle", missionState.isIdle(missionProcess));
o.addProperty("pending", missionState.isPending(missionProcess));
o.addProperty("completed", missionState.isCompleted(missionProcess));
return o;
}
}