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