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