/* TTranslationEntry - SQL operations with the table 'translation_entry'
* in SQLite Android Wiktionary parsed database.
*
* Copyright (c) 2009-2012 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com>
* Distributed under EPL/LGPL/GPL/AL/BSD multi-license.
*/
package wikokit.base.wikt.sql;
import java.util.ArrayList;
import java.util.List;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/** SQL operations with the table 'translation_entry' in Wiktionary parsed database.
*
* @see wikt.word.WTranslationEntry
*/
public class TTranslationEntry {
/** Unique identifier in the table 'translation_entry'. */
private int id;
/** Link to the table 'translation', which links to language, POS, and (may be) meaning.
*/
private TTranslation translation; // int translation_id;
/** Translation into 'lang'.
*/
private TLang lang; // int lang_id;
/** Text of translation (Wikified text). */
private TWikiText wiki_text;
private final static TTranslationEntry[] NULL_TTRANSLATIONENTRY_ARRAY = new TTranslationEntry[0];
public TTranslationEntry(int _id,TTranslation _translation,TLang _lang,TWikiText _wiki_text) {
id = _id;
translation = _translation;
lang = _lang;
wiki_text = _wiki_text;
}
/** Gets unique ID from database */
public int getID() {
return id;
}
/** Gets wikified text from the database' table 'wiki_text'. */
public TWikiText getWikiText() {
return wiki_text;
}
/** Gets translation from the database' table 'translation'. */
public TTranslation getTranslation() {
return translation;
}
/** Gets language from database */
public TLang getLang() {
return lang;
}
/** Inserts record into the table 'meaning'.<br><br>
* INSERT INTO translation_entry (translation_id,lang_id,wiki_text_id) VALUES (1,2,3);
* @param lang_pos ID of language and POS of wiki page which will be added
* @param meaning_id defines meaning (sense) in table 'meaning', it could be null (todo check)
* @param meaning_summary
* @return inserted record, or null if insertion failed
*/
/*public static TTranslationEntry insert (Connect connect,TTranslation trans,
TLang lang,TWikiText wiki_text) {
if(null == trans || null == lang || null == wiki_text) {
System.err.println("Error (TTranslationEntry.insert()):: null arguments: trans = "+trans+
"; lang="+ lang +"; wiki_text=" + wiki_text);
return null;
}
StringBuilder str_sql = new StringBuilder();
TTranslationEntry trans_entry = null;
try
{
Statement s = connect.conn.createStatement ();
try {
str_sql.append("INSERT INTO translation_entry (translation_id,lang_id,wiki_text_id) VALUES (");
str_sql.append(trans.getID());
str_sql.append(",");
str_sql.append(lang.getID());
str_sql.append(",");
str_sql.append(wiki_text.getID());
str_sql.append(")");
if(s.executeUpdate (str_sql.toString()) > 0) {
ResultSet rs = connect.conn.prepareStatement( "SELECT LAST_INSERT_ID() AS id" ).executeQuery();
try {
if (rs.next ()) {
trans_entry = new TTranslationEntry(rs.getInt("id"), trans, lang, wiki_text);
//System.out.println("TTranslationEntry.insert()):: summary='" + trans.getMeaningSummary() +
// "'; id=" + rs.getInt("id") +
// "'; translation_id=" + trans.getID() +
// "; wiki_text='" + wiki_text.getText() + "; lang='" + lang.getLanguage().getName() + "'");
}
} finally {
rs.close();
}
}
} finally {
s.close();
}
}catch(SQLException ex) {
System.err.println("SQLException (TTranslationEntry.insert()):: sql='" + str_sql.toString() + "' " + ex.getMessage());
}
return trans_entry;
}*/
/** Selects rows from the table 'translation_entry' by ID.<br><br>
* SELECT translation_id,lang_id,wiki_text_id FROM translation_entry WHERE id=1;
* @return empty array if data is absent
*/
public static TTranslationEntry getByID (SQLiteDatabase db,int _id) {
if(_id < 0) {
System.err.println("Error (TTranslationEntry.getByID()):: ID is negative.");
return null;
}
TTranslationEntry trans_entry = null;
// SELECT translation_id,lang_id,wiki_text_id FROM translation_entry WHERE id=1;
Cursor c = db.query("translation_entry",
new String[] { "translation_id", "lang_id", "wiki_text_id"},
"id=" + _id,
null, null, null, null);
if (c.moveToFirst()) {
int i_translation_id = c.getColumnIndexOrThrow("translation_id");
int i_lang_id = c.getColumnIndexOrThrow("lang_id");
int i_wiki_text_id = c.getColumnIndexOrThrow("wiki_text_id");
TTranslation trans = TTranslation.getByID(db, c.getInt(i_translation_id));
TLang _lang = TLang.getTLangFast( c.getInt(i_lang_id));
TWikiText _wiki_text = TWikiText.getByID(db, c.getInt(i_wiki_text_id));
if(null != trans && null != _lang && null != _wiki_text)
trans_entry = new TTranslationEntry(_id, trans, _lang, _wiki_text);
}
if (c != null && !c.isClosed()) {
c.close();
}
return trans_entry;
}
/** Selects rows from the table 'translation_entry' by translation ID and language ID.<br><br>
* SELECT id,wiki_text_id FROM translation_entry WHERE translation_id=1 AND lang_id=2;
* @return empty array if data is absent
*/
public static TTranslationEntry[] getByLanguageAndTranslation (SQLiteDatabase db,
TTranslation trans, TLang _lang) {
if(null == trans || null == _lang) {
System.err.println("Error (TTranslationEntry.getByLanguageAndTranslation()):: null arguments, trans="+trans+", lang="+_lang);
return null;
}
List<TTranslationEntry> list_trans = null;
// SELECT id,wiki_text_id FROM translation_entry WHERE translation_id=1 AND lang_id=2;
Cursor c = db.query("translation_entry",
new String[] { "id", "wiki_text_id"},
"translation_id=" + trans.getID() + " AND lang_id=" + _lang.getID(),
null, null, null, null);
if (c.moveToFirst()) {
do {
int i_id = c.getColumnIndexOrThrow("id");
int i_wiki_text_id = c.getColumnIndexOrThrow("wiki_text_id");
int _id = c.getInt(i_id);
int wiki_text_id = c.getInt(i_wiki_text_id);
TWikiText _wiki_text = wiki_text_id < 1 ? null : TWikiText.getByID(db, wiki_text_id);
if(null != _wiki_text) {
if(null == list_trans)
list_trans = new ArrayList<TTranslationEntry>();
list_trans.add(new TTranslationEntry(_id, trans, _lang, _wiki_text));
}
} while (c.moveToNext());
}
if (c != null && !c.isClosed()) {
c.close();
}
if(null == list_trans)
return NULL_TTRANSLATIONENTRY_ARRAY;
return ((TTranslationEntry[])list_trans.toArray(NULL_TTRANSLATIONENTRY_ARRAY));
}
/** Selects rows from the table 'translation_entry' by wiki text ID and
* language ID. Selects one language entry from one translation box.<br><br>
*
* SELECT id,translation_id FROM translation_entry WHERE wiki_text_id=3 AND lang_id=2;
* @return empty array, if data is absent
*/
public static TTranslationEntry[] getByWikiTextAndLanguage (SQLiteDatabase db,
TWikiText _wiki_text, TLang _lang) {
if(null == _wiki_text || null == _lang) {
System.err.println("Error (TTranslationEntry.getByWikiTextAndLanguage()):: null arguments, wiki_text="+_wiki_text+", lang="+_lang);
return null;
}
List<TTranslationEntry> list_entry = null;
// SELECT id,translation_id FROM translation_entry WHERE wiki_text_id=3 AND lang_id=2;
Cursor c = db.query("translation_entry",
new String[] { "id", "translation_id"},
"wiki_text_id=" + _wiki_text.getID() + " AND lang_id=" + _lang.getID(),
null, null, null, null);
if (c.moveToFirst()) {
do {
int i_id = c.getColumnIndexOrThrow("id");
int _id = c.getInt(i_id);
int i_translation_id = c.getColumnIndexOrThrow("translation_id");
TTranslation trans = TTranslation.getByID(db, c.getInt(i_translation_id));
if(null != trans) {
if(null == list_entry)
list_entry = new ArrayList<TTranslationEntry>();
list_entry.add(new TTranslationEntry(_id, trans, _lang, _wiki_text));
}
} while (c.moveToNext());
}
if (c != null && !c.isClosed()) {
c.close();
}
if(null == list_entry)
return NULL_TTRANSLATIONENTRY_ARRAY;
return (TTranslationEntry [])list_entry.toArray(NULL_TTRANSLATIONENTRY_ARRAY);
}
/** Selects rows (all languages and translations entries from one translation box)
* from the table 'translation_entry' by translation ID.<br><br>
* SELECT id,lang_id,wiki_text_id FROM translation_entry WHERE translation_id=1;
* @return empty array if data is absent
*/
public static TTranslationEntry[] getByTranslation (SQLiteDatabase db,TTranslation trans) {
if(null == trans) {
System.err.println("Error (TTranslationEntry.getByTranslation()):: null arguments: translation.");
return null;
}
List<TTranslationEntry> list_trans = null;
// SELECT id,lang_id,wiki_text_id FROM translation_entry WHERE translation_id=1;
Cursor c = db.query("translation_entry",
new String[] { "id", "lang_id", "wiki_text_id"},
"translation_id=" + trans.getID(),
null, null, null, null);
if (c.moveToFirst()) {
do {
int i_id = c.getColumnIndexOrThrow("id");
int i_lang_id = c.getColumnIndexOrThrow("lang_id");
int i_wiki_text_id = c.getColumnIndexOrThrow("wiki_text_id");
int _id = c.getInt(i_id);
TLang tlang = TLang.getTLangFast( c.getInt(i_lang_id) );
int wiki_text_id = c.getInt(i_wiki_text_id);
TWikiText _wiki_text = wiki_text_id < 1 ? null : TWikiText.getByID(db, wiki_text_id);
if(null != tlang && null != _wiki_text) {
if(null == list_trans)
list_trans = new ArrayList<TTranslationEntry>();
list_trans.add(new TTranslationEntry(_id, trans, tlang, _wiki_text));
}
} while (c.moveToNext());
}
if (c != null && !c.isClosed()) {
c.close();
}
if(null == list_trans)
return NULL_TTRANSLATIONENTRY_ARRAY;
return ((TTranslationEntry[])list_trans.toArray(NULL_TTRANSLATIONENTRY_ARRAY));
}
/** Deletes row from the table 'translation_entry' by a value of ID.<br>
* DELETE FROM translation_entry WHERE id=1;
* @param id unique ID in the table `translation_entry`
*/
/*public static void delete (Connect connect,TTranslationEntry trans_entry) {
if(null == trans_entry) {
System.err.println("Error (TTranslationEntry.delete()):: null argument 'translation_entry'");
return;
}
StringBuilder str_sql = new StringBuilder();
try {
Statement s = connect.conn.createStatement ();
try {
str_sql.append("DELETE FROM translation_entry WHERE id=");
str_sql.append(trans_entry.getID());
s.execute (str_sql.toString());
//System.out.println("TTranslationEntry.delete()):: summary='" + trans_entry.getTranslation().getMeaningSummary() +
// "'; id=" + trans_entry.getID() + "; wiki_text='" + trans_entry.getWikiText().getText() + "'");
} finally {
s.close();
}
} catch(SQLException ex) {
System.err.println("SQLException (TTranslationEntry.delete()):: sql='" + str_sql.toString() + "' " + ex.getMessage());
}
}*/
}