|
|
|
@ -4,34 +4,72 @@ package de.srsoftware.umbrella.contact; |
|
|
|
import static de.srsoftware.tools.jdbc.Condition.equal; |
|
|
|
import static de.srsoftware.tools.jdbc.Condition.equal; |
|
|
|
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL; |
|
|
|
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL; |
|
|
|
import static de.srsoftware.tools.jdbc.Query.select; |
|
|
|
import static de.srsoftware.tools.jdbc.Query.select; |
|
|
|
import static de.srsoftware.umbrella.contact.Constants.TABLE_CONTACTS; |
|
|
|
import static de.srsoftware.umbrella.contact.Constants.*; |
|
|
|
import static de.srsoftware.umbrella.contact.Constants.TABLE_CONTACTS_USERS; |
|
|
|
|
|
|
|
import static de.srsoftware.umbrella.core.Constants.*; |
|
|
|
import static de.srsoftware.umbrella.core.Constants.*; |
|
|
|
|
|
|
|
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.databaseException; |
|
|
|
|
|
|
|
import static java.text.MessageFormat.format; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import de.srsoftware.umbrella.core.BaseDb; |
|
|
|
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; |
|
|
|
import de.srsoftware.umbrella.core.exceptions.UmbrellaException; |
|
|
|
import de.srsoftware.umbrella.core.model.Contact; |
|
|
|
import de.srsoftware.umbrella.core.model.Contact; |
|
|
|
import java.sql.Connection; |
|
|
|
import java.sql.Connection; |
|
|
|
import java.sql.SQLException; |
|
|
|
import java.sql.SQLException; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.HashSet; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
public class SqliteDb implements ContactDb{ |
|
|
|
public class SqliteDb extends BaseDb implements ContactDb{ |
|
|
|
private final Connection conn; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public SqliteDb(Connection connection) { |
|
|
|
public SqliteDb(Connection connection) { |
|
|
|
conn = connection; |
|
|
|
super(connection); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Collection<Contact> listContactsOf(long userId) throws UmbrellaException{ |
|
|
|
protected int createTables() { |
|
|
|
|
|
|
|
int currentVersion = createSettingsTable(); |
|
|
|
|
|
|
|
switch (currentVersion){ |
|
|
|
|
|
|
|
case 0: |
|
|
|
|
|
|
|
createContactTable(); |
|
|
|
|
|
|
|
createContactsUsersTable(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return setCurrentVersion(1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void createContactTable() { |
|
|
|
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INTEGER PRIMARY KEY, {2} TEXT)"; |
|
|
|
|
|
|
|
sql = format(sql, TABLE_CONTACTS, ID, DATA); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
db.prepareStatement(sql).execute(); |
|
|
|
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_CONTACTS); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void createContactsUsersTable() { |
|
|
|
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} INT NOT NULL, {3} BOOLEAN DEFAULT 0, PRIMARY KEY({1}, {2}))"; |
|
|
|
|
|
|
|
sql = format(sql, TABLE_CONTACTS_USERS, CONTACT_ID, USER_ID, ASSIGNED); |
|
|
|
try { |
|
|
|
try { |
|
|
|
var rs = select(ALL).from(TABLE_CONTACTS).leftJoin(ID,TABLE_CONTACTS_USERS,USER_ID).where(USER_ID,equal(userId)).exec(conn); |
|
|
|
db.prepareStatement(sql).execute(); |
|
|
|
var contacts = new HashSet<Contact>(); |
|
|
|
} catch (SQLException e) { |
|
|
|
while (rs.next()) contacts.add(Contact.of(rs)); |
|
|
|
throw databaseException(ERROR_FAILED_CREATE_TABLE,TABLE_CONTACTS_USERS); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public Map<Long,Contact> listContactsOf(long userId) throws UmbrellaException{ |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
var rs = select(ALL).from(TABLE_CONTACTS).leftJoin(ID,TABLE_CONTACTS_USERS,CONTACT_ID).where(USER_ID,equal(userId)).exec(db); |
|
|
|
|
|
|
|
var contacts = new HashMap<Long,Contact>(); |
|
|
|
|
|
|
|
while (rs.next()) { |
|
|
|
|
|
|
|
var contact = Contact.of(rs); |
|
|
|
|
|
|
|
contacts.put(contact.id(),contact); |
|
|
|
|
|
|
|
} |
|
|
|
rs.close(); |
|
|
|
rs.close(); |
|
|
|
return contacts; |
|
|
|
return contacts; |
|
|
|
} catch (SQLException e) { |
|
|
|
} catch (SQLException e) { |
|
|
|
throw UmbrellaException.databaseException("Failed to load contacts og user {0}",userId); |
|
|
|
throw databaseException("Failed to load contacts of user {0}",userId); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|