Added README.txt and GPL Header to Source Files
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / database / NewsDatabaseHelper.java
1 /* NewsDatabaseHelper.java
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 3 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 package de.dhbwloe.campusapp.database;
17
18 import android.content.ContentValues;
19 import android.database.Cursor;
20 import android.database.sqlite.SQLiteDatabase;
21
22 import java.util.ArrayList;
23
24 import de.dhbwloe.campusapp.CampusAppContext;
25 import de.dhbwloe.campusapp.news.NewsItem;
26
27 /**
28  * Created by pk910 on 24.01.2016.
29  */
30 public class NewsDatabaseHelper {
31     private CampusAppContext AppContext;
32     private SQLiteDatabase database;
33
34     public NewsDatabaseHelper(CampusAppContext context, SQLiteDatabase database) {
35         this.database = database;
36         AppContext = context;
37     }
38
39     public void updateNewsItem(NewsItem news) {
40         boolean isExisting = false;
41         String[] whereArgs = new String[] {
42                 news.getSource(),
43                 news.getUniqueId()
44         };
45         Cursor resultSet = database.rawQuery("SELECT ChkSum FROM News WHERE Source = ? AND UniqueId = ?", whereArgs);
46         if(resultSet.moveToFirst()) {
47             long chksum = resultSet.getLong(0);
48             if (news.getChkSum() == chksum)
49                 return; // nothing to update
50             isExisting = true;
51         }
52         resultSet.close();
53
54         if(isExisting) {
55             try {
56                 ContentValues updateValues = new ContentValues();
57                 updateValues.put("ChkSum", news.getChkSum());
58                 updateValues.put("Title", news.getTitle());
59                 updateValues.put("Time", news.getTime());
60                 updateValues.put("Summary", news.getSummary());
61                 updateValues.put("Content", news.getContent());
62                 updateValues.put("Link", news.getLink());
63                 updateValues.put("Categories", news.getCategories());
64
65                 database.update("News", updateValues, "Source = ? AND UniqueId = ?", whereArgs);
66             } catch(Exception e) {
67                 e.printStackTrace();
68             }
69         } else {
70             try {
71                 ContentValues indexValues = new ContentValues();
72                 indexValues.put("Source", news.getSource());
73                 indexValues.put("UniqueId", news.getUniqueId());
74
75                 indexValues.put("ChkSum", news.getChkSum());
76                 indexValues.put("Title", news.getTitle());
77                 indexValues.put("Time", news.getTime());
78                 indexValues.put("Summary", news.getSummary());
79                 indexValues.put("Content", news.getContent());
80                 indexValues.put("Link", news.getLink());
81                 indexValues.put("Categories", news.getCategories());
82
83                 long newId = database.insertOrThrow("News", null, indexValues);
84                 news.setIsNew((int) newId);
85             } catch(Exception e) {
86                 e.printStackTrace();
87             }
88         }
89
90     }
91
92     public NewsItem[] getNewsItems(String source, long timeFrom, long timeTo) {
93         String[] whereArgs = new String[] {
94                 source,
95                 Long.toString(timeTo),
96                 Long.toString(timeFrom)
97         };
98         Cursor resultSet = database.rawQuery("SELECT Id, Source, Time, UniqueId, ChkSum, Title, Summary, Content, Link, Categories FROM News WHERE Source = ? AND Time >= ? AND Time <= ?", whereArgs);
99         ArrayList<NewsItem> results = new ArrayList<NewsItem>();
100         if(resultSet.moveToFirst()) {
101             int[] columnIndexes = {
102                     resultSet.getColumnIndex("Id"),
103                     resultSet.getColumnIndex("Source"),
104                     resultSet.getColumnIndex("Time"),
105                     resultSet.getColumnIndex("UniqueId"),
106                     resultSet.getColumnIndex("ChkSum"),
107                     resultSet.getColumnIndex("Title"),
108                     resultSet.getColumnIndex("Summary"),
109                     resultSet.getColumnIndex("Content"),
110                     resultSet.getColumnIndex("Link"),
111                     resultSet.getColumnIndex("Categories")
112             };
113             do {
114                 NewsItem news = new NewsItem(
115                         resultSet.getInt(columnIndexes[0]), resultSet.getString(columnIndexes[1]),
116                         resultSet.getLong(columnIndexes[2]), resultSet.getString(columnIndexes[3]),
117                         resultSet.getLong(columnIndexes[4]), resultSet.getString(columnIndexes[5]),
118                         resultSet.getString(columnIndexes[6]), resultSet.getString(columnIndexes[7]),
119                         resultSet.getString(columnIndexes[8]), resultSet.getString(columnIndexes[9])
120                 );
121
122                 results.add(news);
123             } while (resultSet.moveToNext());
124         }
125         resultSet.close();
126
127         NewsItem[] resultsArr = new NewsItem[results.size()];
128         resultsArr = results.toArray(resultsArr);
129         return resultsArr;
130     }
131
132 }