/* * Copyright (C) 2010-2016 Stichting Akvo (Akvo Foundation) * * This file is part of Akvo FLOW. * * Akvo FLOW is free software: you can redistribute it and modify it under the terms of * the GNU Affero General Public License (AGPL) as published by the Free Software Foundation, * either version 3 of the License or any later version. * * Akvo FLOW 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 Affero General Public License included below for more details. * * The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>. */ package com.gallatinsystems.diagnostics.app.web.dto; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import com.gallatinsystems.framework.rest.RestError; import com.gallatinsystems.framework.rest.RestRequest; /** * data structure to encapsulate requests to the remote exception servlet * * @author Christopher Fagiani */ public class RemoteExceptionRequest extends RestRequest { private static final long serialVersionUID = 8303938931927567747L; private static final String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss"; private static final ThreadLocal<DateFormat> DATE_FMT = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return new SimpleDateFormat(FORMAT_STRING, Locale.US); // Always specify a locale for M2M formatting }; }; public static final String SAVE_TRACE_ACTION = "saveTrace"; public static final String PHONE_PARAM = "phoneNumber"; public static final String DEV_ID_PARAM = "deviceIdentifier"; public static final String VERSION_PARAM = "version"; public static final String DATE_PARAM = "date"; public static final String TRACE_PARAM = "trace"; public static final String ANDROID_ID_PARAM = "androidId"; private String phoneNumber; private String deviceIdent; private String version; private Date date; private String stackTrace; private String androidId; public String getStackTrace() { return stackTrace; } public void setStackTrace(String stackTrace) { this.stackTrace = stackTrace; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getDeviceIdent() { return deviceIdent; } public void setDeviceIdent(String deviceIdent) { this.deviceIdent = deviceIdent; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String getAndroidId() { return androidId; } public void setAndroidId(String androidId) { this.androidId = androidId; } @Override protected void populateErrors() { if (date == null) { addError(new RestError(RestError.MISSING_PARAM_ERROR_CODE, RestError.MISSING_PARAM_ERROR_MESSAGE, DATE_PARAM + " is required")); } } @Override protected void populateFields(HttpServletRequest req) throws Exception { phoneNumber = req.getParameter(PHONE_PARAM); deviceIdent = req.getParameter(DEV_ID_PARAM); version = req.getParameter(VERSION_PARAM); stackTrace = req.getParameter(TRACE_PARAM); androidId = req.getParameter(ANDROID_ID_PARAM); if (req.getParameter(DATE_PARAM) != null && req.getParameter(DATE_PARAM).trim().length() > 0) { try { date = DATE_FMT.get().parse(req.getParameter(DATE_PARAM)); } catch (Exception e) { addError(new RestError(RestError.BAD_DATATYPE_CODE, RestError.BAD_DATATYPE_MESSAGE, DATE_PARAM + " must be in format: " + FORMAT_STRING)); } } } }