1c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/*
28ab8b411b81e4581060a31a97a0cb204a803b2e5Mike Lockwood * Copyright (C) 2008 The Android Open Source Project
3c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *
4c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
5c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * you may not use this file except in compliance with the License.
6c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * You may obtain a copy of the License at
7c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *
8c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
9c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood *
10c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Unless required by applicable law or agreed to in writing, software
11c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
12c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * See the License for the specific language governing permissions and
14c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * limitations under the License.
15c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */
16c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
17191d898468d2f4910a684f429bec518320843744Mike Lockwoodpackage com.android.locationtracker.data;
18c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
19191d898468d2f4910a684f429bec518320843744Mike Lockwoodimport com.android.locationtracker.data.TrackerEntry.EntryType;
20c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
21c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood/**
22c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood * Formats tracker data as CSV output
23c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood */
24c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwoodclass CSVFormatter implements IFormatter {
25c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
26c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    private static final String DELIMITER = ", ";
27c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
28c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    public String getHeader() {
29c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        StringBuilder csvBuilder = new StringBuilder();
30c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        for (String col : TrackerEntry.ATTRIBUTES) {
31c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            // skip type and id column
32c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            if (!TrackerEntry.ENTRY_TYPE.equals(col) &&
33c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                !TrackerEntry.ID_COL.equals(col)) {
34c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                csvBuilder.append(col);
35c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                csvBuilder.append(DELIMITER);
36c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            }
37c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        }
38c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        csvBuilder.append("\n");
39c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        return csvBuilder.toString();
40c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
41c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
42c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    public String getOutput(TrackerEntry entry) {
43c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        StringBuilder rowOutput = new StringBuilder();
44c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        // these must match order of columns added in getHeader
45c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        rowOutput.append(entry.getTimestamp());
46c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        rowOutput.append(DELIMITER);
47c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        rowOutput.append(entry.getTag());
48c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        rowOutput.append(DELIMITER);
49c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        //rowOutput.append(entry.getType());
50c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        //rowOutput.append(DELIMITER);
51c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        if (entry.getType() == EntryType.LOCATION_TYPE) {
52c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            if (entry.getLocation().hasAccuracy()) {
53c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                rowOutput.append(entry.getLocation().getAccuracy());
54c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            }
55c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
56c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(entry.getLocation().getLatitude());
57c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
58c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(entry.getLocation().getLongitude());
59c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
60c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            if (entry.getLocation().hasAltitude()) {
61c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                rowOutput.append(entry.getLocation().getAltitude());
62c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            }
63c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
64c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            if (entry.getLocation().hasSpeed()) {
65c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                rowOutput.append(entry.getLocation().getSpeed());
66c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            }
67c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
68c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            if (entry.getLocation().hasBearing()) {
69c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                rowOutput.append(entry.getLocation().getBearing());
70c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            }
71c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
72c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(entry.getDistFromNetLocation());
73c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
74c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DateUtils.getKMLTimestamp(entry.getLocation()
75c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood                    .getTime()));
76c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood            rowOutput.append(DELIMITER);
77c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        }
78c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        rowOutput.append(entry.getLogMsg());
79c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        rowOutput.append("\n");
80c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        return rowOutput.toString();
81c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
82c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood
83c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    public String getFooter() {
84c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        // not needed, return empty string
85c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood        return "";
86c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood    }
87c9d3be3f0e10b62fa6d4899ce827866299d41783Mike Lockwood}
88