· 9 years ago · Jan 20, 2017, 04:14 AM
1/**
2 * HomeStorage implementation that stores homes to a relational database.
3 */
4public class RelationalHomeStorage implements HomeStorage {
5
6 private static final Logger log = PrefixLogger.getLogger(RelationalHomeStorage.class);
7
8 private final static String HOME_TABLE_NAME = "`homeData`";
9 private final static String USER_TABLE_NAME = "`userData`";
10 private final static String INVITE_TABLE_NAME = "`inviteData`";
11 private final static String LIMIT_TABLE_NAME = "`limitData`";
12 private final static String HOME_TABLE =
13 "CREATE TABLE IF NOT EXISTS " + HOME_TABLE_NAME + " (" +
14 "`id` INTEGER NOT NULL AUTO_INCREMENT," +
15 "`owner` INTEGER NOT NULL," +
16 "`name` VARCHAR(36) NOT NULL," +
17 "`world` VARCHAR(36) NOT NULL," +
18 "`x` DOUBLE NOT NULL," +
19 "`y` DOUBLE NOT NULL," +
20 "`z` DOUBLE NOT NULL," +
21 "`yaw` FLOAT NOT NULL," +
22 "`pitch` FLOAT NOT NULL," +
23 "`type` INTEGER NOT NULL," +
24 "PRIMARY KEY (id))";
25 private final static String USER_TABLE =
26 "CREATE TABLE IF NOT EXISTS " + USER_TABLE_NAME + " (" +
27 "`id` INTEGER NOT NULL AUTO_INCREMENT," +
28 "`uuid` VARCHAR(36) NOT NULL," +
29 "PRIMARY KEY (id))";
30 private final static String INVITE_TABLE =
31 "CREATE TABLE IF NOT EXISTS " + INVITE_TABLE_NAME + " (" +
32 "`home` INTEGER NOT NULL," +
33 "`user` INTEGER NOT NULL)";
34 private final static String LIMIT_TABLE =
35 "CREATE TABLE IF NOT EXISTS " + LIMIT_TABLE_NAME + " (" +
36 "`user` INTEGER NOT NULL," +
37 "`limit` INTEGER NOT NULL)";
38
39 private final DataSource dataSource;
40 private final ProfileCache profileCache;
41
42 public RelationalHomeStorage(DataSource dataSource, ProfileCache profileCache) throws SQLException {
43 this.dataSource = dataSource;
44 this.profileCache = profileCache;
45 Connection conn = null;
46 try {
47 conn = this.dataSource.getConnection();
48 DatabaseMetaData dbm = conn.getMetaData();
49 ResultSet rs = dbm.getTables(null, null, HOME_TABLE_NAME, null);
50 if (!rs.next()) {
51 Statement st = conn.createStatement();
52 st.executeUpdate(HOME_TABLE);
53 }
54 rs = dbm.getTables(null, null, USER_TABLE_NAME, null);
55 if (!rs.next()) {
56 Statement st = conn.createStatement();
57 st.executeUpdate(USER_TABLE);
58 }
59 rs = dbm.getTables(null, null, INVITE_TABLE_NAME, null);
60 if (!rs.next()) {
61 Statement st = conn.createStatement();
62 st.executeUpdate(INVITE_TABLE);
63 }
64 rs = dbm.getTables(null, null, LIMIT_TABLE_NAME, null);
65 if (!rs.next()) {
66 Statement st = conn.createStatement();
67 st.executeUpdate(LIMIT_TABLE);
68 }
69 conn.close();
70 }
71 catch (SQLException e) {
72 handleException(e, conn);
73 throw e;
74 }
75 }