Skip to content

Commit

Permalink
For #352 - change field separator depending on user's locale, put the…
Browse files Browse the repository at this point in the history
… separator symbol at the beginning of file with 'sep=' line
  • Loading branch information
vitalidze committed Nov 22, 2015
1 parent 0d710d8 commit a3109da
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
4 changes: 3 additions & 1 deletion src/main/java/org/traccar/web/client/view/ArchiveView.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import com.google.gwt.event.logical.shared.*;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Label;
import com.sencha.gxt.data.shared.event.StoreUpdateEvent;
Expand Down Expand Up @@ -261,7 +262,8 @@ public void onCSVClicked(SelectionEvent<Item> event) {
"?deviceId=" + (deviceCombo.getValue() == null ? null : deviceCombo.getValue().getId()) +
"&from=" + jsonTimeFormat.format(getCombineDate(fromDate, fromTime)).replaceFirst("\\+", "%2B") +
"&to=" + jsonTimeFormat.format(getCombineDate(toDate, toTime)).replaceFirst("\\+", "%2B") +
"&filter=" + !disableFilter.getValue(),
"&filter=" + !disableFilter.getValue() +
"&locale=" + LocaleInfo.getCurrentLocale().getLocaleName(),
"_blank", null);
}
}
Expand Down
21 changes: 14 additions & 7 deletions src/main/java/org/traccar/web/server/model/ExportServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@
import com.google.inject.persist.Transactional;
import org.apache.commons.lang3.StringEscapeUtils;
import org.traccar.web.client.model.DataService;
import org.traccar.web.shared.model.AccessDeniedException;
import org.traccar.web.shared.model.Device;
import org.traccar.web.shared.model.Position;
import org.traccar.web.shared.model.User;
import org.traccar.web.shared.model.*;

import javax.inject.Inject;
import javax.inject.Provider;
Expand All @@ -37,9 +34,11 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
Expand All @@ -53,6 +52,8 @@ public class ExportServlet extends HttpServlet {
@Inject
private DataService dataService;
@Inject
private Provider<ApplicationSettings> applicationSettings;
@Inject
protected Logger logger;

private SimpleDateFormat requestDateFormat = new SimpleDateFormat(RESTApiServlet.REQUEST_DATE_PATTERN);
Expand All @@ -74,7 +75,11 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
checkAccess(device);

if (exportType.equals("csv")) {
csv(resp, device, from, to, filter);
String languageCode = req.getParameter("locale");
if (languageCode == null) {
languageCode = applicationSettings.get().getLanguage();
}
csv(resp, "default".equals(languageCode) ? Locale.getDefault() : new Locale(languageCode), device, from, to, filter);
} else if (exportType.equals("gpx")) {
gpx(resp, device, from, to, filter);
} else {
Expand All @@ -101,14 +106,16 @@ void checkAccess(Device device) {
}
}

void csv(HttpServletResponse response, Device device, Date from, Date to, boolean filter) throws IOException, AccessDeniedException {
void csv(HttpServletResponse response, Locale locale, Device device, Date from, Date to, boolean filter) throws IOException, AccessDeniedException {
response.setContentType("text/csv;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=traccar-positions.csv");

final char SEPARATOR = ';';
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols(locale);
final char SEPARATOR = formatSymbols.getDecimalSeparator() == ',' ? ';' : ',';

PrintWriter writer = response.getWriter();

writer.println("sep=" + SEPARATOR);
writer.println(line(SEPARATOR, "time", "valid", "latitude", "longitude", "altitude", "speed", "distance", "course", "power", "address", "other"));

for (Position p : dataService.getPositions(device, from, to, filter)) {
Expand Down

0 comments on commit a3109da

Please sign in to comment.