/* * Copyright 2011 Adi Sayoga. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.adisayoga.earthquake.models; import java.util.ArrayList; import java.util.List; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.util.Log; import com.adisayoga.earthquake.dto.EarthquakeDTO; import com.adisayoga.earthquake.providers.EarthquakeColumns; import com.adisayoga.earthquake.providers.EarthquakeProvider; /** * Class yang digunakan untuk memudahkan mendapatkan data dari provider daftar * gempa. * * @author Adi Sayoga */ public class EarthquakeModel { private static final String TAG = "EarthquakeModel"; private final Context context; public EarthquakeModel(Context context) { this.context = context; } /** * Mendapatkan data gempa berdasarkan minMagnitude dan maxAge. * * @param minMagnitude Mangitudo minimal * @param maxAge Maksimum umur yang akan ditampilkan * @param sortOder Sort order * @return List gempa */ public List<EarthquakeDTO> getMatchQuakes(float minMagnitude, long maxAge, String sortOrder) { Log.i(TAG, "Mengambil data dari provider..."); String where = EarthquakeColumns.MAGNITUDE + " >= " + minMagnitude + " AND " + EarthquakeColumns.DATE + " >= " + maxAge; if (sortOrder == null || sortOrder.equals("")) { sortOrder = EarthquakeColumns.DATE + " DESC"; } ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(EarthquakeProvider.CONTENT_URI, null, where, null, sortOrder); List<EarthquakeDTO> quakes = new ArrayList<EarthquakeDTO>(); while (cursor.moveToNext()) { long id = cursor.getLong(EarthquakeColumns._ID_INDEX); String source = cursor.getString(EarthquakeColumns.SRC_INDEX); String eqid = cursor.getString(EarthquakeColumns.EQID_INDEX); String version = cursor.getString(EarthquakeColumns.VERSION_INDEX); long time = cursor.getLong(EarthquakeColumns.DATE_INDEX); double latitude = cursor.getDouble(EarthquakeColumns.LATITUDE_INDEX); double longitude = cursor.getDouble(EarthquakeColumns.LONGITUDE_INDEX); float magnitude = cursor.getFloat(EarthquakeColumns.MAGNITUDE_INDEX); float depth = cursor.getFloat(EarthquakeColumns.DEPTH_INDEX); int nst = cursor.getInt(EarthquakeColumns.NST_INDEX); String region = cursor.getString(EarthquakeColumns.REGION_INDEX); // Tambahkan ke arraylist EarthquakeDTO quake = new EarthquakeDTO(id, source, eqid, version, time, latitude, longitude, magnitude, depth, nst, region); quakes.add(quake); } cursor.close(); Log.d(TAG, "Selesai mengambil data, " + cursor.getCount() + " items"); return quakes; } /** * Mendapatkan data gempa berdasarkan minMagnitude dan maxAge dengan default * sort order. * * @param minMagnitude Mangitudo minimal * @param maxAge Maksimum umur yang akan ditampilkan * @return List gempa */ public List<EarthquakeDTO> getMatchQuakes(float minMagnitude, long maxAge) { return getMatchQuakes(minMagnitude, maxAge, null); } /** * Menghapus data gempa yang lebih lama dari age yang ditentukan. Jika age -1 * artinya menghapus semua data. * * @param age Umur dalam milisecond * @return Jumlah data yang dihapus */ public int deleteQuakes(long age) { Log.d(TAG, "Menghapus data..."); ContentResolver resolver = context.getContentResolver(); String where = null; String[] whereArgs = null; if (age != -1) { where = EarthquakeColumns.DATE + " < ?"; long limit = System.currentTimeMillis() - age; whereArgs = new String[] { Long.toString(limit) }; } int count = resolver.delete(EarthquakeProvider.CONTENT_URI, where, whereArgs); Log.d(TAG, "Data lama dihapus " + count + " items"); return count; } }