CSVFormatter.java revision 8ab8b411b81e4581060a31a97a0cb204a803b2e5
14774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall/*
2518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * Copyright (C) 2008 The Android Open Source Project
3518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian *
44774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * Licensed under the Apache License, Version 2.0 (the "License");
54774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * you may not use this file except in compliance with the License.
64774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * You may obtain a copy of the License at
7518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian *
84774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall *      http://www.apache.org/licenses/LICENSE-2.0
9518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian *
104774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * Unless required by applicable law or agreed to in writing, software
114774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * distributed under the License is distributed on an "AS IS" BASIS,
124774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134774338bd0ad1ebe42c311fd0c72f13786b5c800Jesse Hall * See the License for the specific language governing permissions and
14518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * limitations under the License.
15518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian */
16518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
171c8e95cf86f2182986385bc1ee85f13f425f3a3aJamie Gennispackage com.android.locationtracker.data;
181c8e95cf86f2182986385bc1ee85f13f425f3a3aJamie Gennis
19518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopianimport com.android.locationtracker.data.TrackerEntry.EntryType;
20518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
21518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian/**
22518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian * Formats tracker data as CSV output
23518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian */
24518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopianclass CSVFormatter implements IFormatter {
25518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
26518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    private static final String DELIMITER = ", ";
27518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
28518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    public String getHeader() {
29518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        StringBuilder csvBuilder = new StringBuilder();
30518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        for (String col : TrackerEntry.ATTRIBUTES) {
317db993a98b9239bd4e384cc4aa128262fe3cf52cMathias Agopian            // skip type and id column
32518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            if (!TrackerEntry.ENTRY_TYPE.equals(col) &&
33518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                !TrackerEntry.ID_COL.equals(col)) {
34518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                csvBuilder.append(col);
35518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                csvBuilder.append(DELIMITER);
36518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            }
37518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        }
381c8e95cf86f2182986385bc1ee85f13f425f3a3aJamie Gennis        csvBuilder.append("\n");
39518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        return csvBuilder.toString();
40518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    }
41518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
420469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    public String getOutput(TrackerEntry entry) {
43518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        StringBuilder rowOutput = new StringBuilder();
44518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        // these must match order of columns added in getHeader
45518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        rowOutput.append(entry.getTimestamp());
46518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        rowOutput.append(DELIMITER);
47518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        rowOutput.append(entry.getTag());
48518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        rowOutput.append(DELIMITER);
49ada798b7ca7cabc255aa159964b64975e7fdb2dfMathias Agopian        //rowOutput.append(entry.getType());
50518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        //rowOutput.append(DELIMITER);
51518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        if (entry.getType() == EntryType.LOCATION_TYPE) {
52518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            if (entry.getLocation().hasAccuracy()) {
53518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                rowOutput.append(entry.getLocation().getAccuracy());
54518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            }
55bc2d79ed7ada6243f3690f94ab512c0ddcdbed12Mathias Agopian            rowOutput.append(DELIMITER);
56bc2d79ed7ada6243f3690f94ab512c0ddcdbed12Mathias Agopian            rowOutput.append(entry.getLocation().getLatitude());
57518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            rowOutput.append(DELIMITER);
58518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            rowOutput.append(entry.getLocation().getLongitude());
59518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            rowOutput.append(DELIMITER);
60518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            if (entry.getLocation().hasAltitude()) {
61518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                rowOutput.append(entry.getLocation().getAltitude());
62518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            }
63518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            rowOutput.append(DELIMITER);
64518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            if (entry.getLocation().hasSpeed()) {
65518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                rowOutput.append(entry.getLocation().getSpeed());
66518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            }
67518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            rowOutput.append(DELIMITER);
68518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            if (entry.getLocation().hasBearing()) {
69518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                rowOutput.append(entry.getLocation().getBearing());
70518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            }
711c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang            rowOutput.append(DELIMITER);
721c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang            rowOutput.append(entry.getDistFromNetLocation());
731c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang            rowOutput.append(DELIMITER);
741c3d72a2291827fb15e2ef311a571c860e0dba41Jonas Yang            rowOutput.append(DateUtils.getKMLTimestamp(entry.getLocation()
75518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian                    .getTime()));
76518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian            rowOutput.append(DELIMITER);
77518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        }
78518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        rowOutput.append(entry.getLogMsg());
79518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        rowOutput.append("\n");
80518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        return rowOutput.toString();
81518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    }
82518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
83518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    public String getFooter() {
84518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        // not needed, return empty string
85518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian        return "";
86518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    }
87518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian}
88518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian