From c8b846b5df851feeb4bcd44221ac2fb582314140 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 10:14:12 +0200 Subject: [PATCH 01/15] Added missing settings to Bungee. Added option to hide IPs --- .../plan/system/settings/Settings.java | 1 + .../settings/network/NetworkSettings.java | 11 +++++++-- .../utilities/html/tables/GeoInfoTable.java | 4 +++- Plan/src/main/resources/bungeeconfig.yml | 24 +++++++++++++++++++ Plan/src/main/resources/config.yml | 1 + 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java index 1b6c84345..fc2a5c33f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/Settings.java @@ -34,6 +34,7 @@ public enum Settings { PLAYERTABLE_FOOTER("Customization.Display.PlayerTableFooter"), WEBSERVER_DISABLED("WebServer.DisableWebServer"), FORMAT_DATE_RECENT_DAYS("Customization.Formatting.Dates.RecentDays"), + DISPLAY_PLAYER_IPS("Customization.Display.PlayerIPs"), // Integer WEBSERVER_PORT("WebServer.Port"), diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java index e4ee48510..c60d56781 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java @@ -137,10 +137,17 @@ public class NetworkSettings { addConfigValue(configValues, Settings.DB_TYPE, "mysql"); Settings[] sameStrings = new Settings[]{ Settings.DB_HOST, Settings.DB_USER, Settings.DB_PASS, - Settings.DB_DATABASE, Settings.FORMAT_DECIMALS, Settings.FORMAT_SECONDS, + Settings.DB_DATABASE, Settings.DB_LAUNCH_OPTIONS, + Settings.FORMAT_DECIMALS, Settings.FORMAT_SECONDS, Settings.FORMAT_DAY, Settings.FORMAT_DAYS, Settings.FORMAT_HOURS, Settings.FORMAT_MINUTES, Settings.FORMAT_MONTHS, Settings.FORMAT_MONTH, - Settings.FORMAT_YEAR, Settings.FORMAT_YEARS, Settings.FORMAT_ZERO_SECONDS + Settings.FORMAT_YEAR, Settings.FORMAT_YEARS, Settings.FORMAT_ZERO_SECONDS, + Settings.USE_SERVER_TIME, Settings.DISPLAY_SESSIONS_AS_TABLE, Settings.APPEND_WORLD_PERC, + Settings.ORDER_WORLD_PIE_BY_PERC, Settings.MAX_SESSIONS, Settings.MAX_PLAYERS, + Settings.MAX_PLAYERS_PLAYERS_PAGE, Settings.PLAYERTABLE_FOOTER, Settings.FORMAT_DATE_RECENT_DAYS, + Settings.FORMAT_DATE_RECENT_DAYS_PATTERN, Settings.FORMAT_DATE_CLOCK, Settings.FORMAT_DATE_NO_SECONDS, + Settings.FORMAT_DATE_FULL, Settings.DISPLAY_PLAYER_IPS, Settings.ACTIVE_LOGIN_THRESHOLD, + Settings.ACTIVE_PLAY_THRESHOLD }; Log.debug("NetworkSettings: Adding Config Values.."); for (Settings setting : sameStrings) { diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/GeoInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/GeoInfoTable.java index d21c77972..0191a70ee 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/GeoInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/GeoInfoTable.java @@ -6,6 +6,7 @@ package com.djrapitops.plan.utilities.html.tables; import com.djrapitops.plan.data.container.GeoInfo; import com.djrapitops.plan.data.element.TableContainer; +import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.utilities.FormatUtils; import java.util.List; @@ -28,10 +29,11 @@ public class GeoInfoTable extends TableContainer { } private void addValues(List geoInfo) { + boolean displayIP = Settings.DISPLAY_PLAYER_IPS.isTrue(); for (GeoInfo info : geoInfo) { long date = info.getLastUsed(); addRow( - FormatUtils.formatIP(info.getIp()), + displayIP ? FormatUtils.formatIP(info.getIp()) : "Hidden (Config)", info.getGeolocation(), date != 0 ? FormatUtils.formatTimeStampYear(date) : "-" ); diff --git a/Plan/src/main/resources/bungeeconfig.yml b/Plan/src/main/resources/bungeeconfig.yml index ac25b0972..6876d7ec7 100644 --- a/Plan/src/main/resources/bungeeconfig.yml +++ b/Plan/src/main/resources/bungeeconfig.yml @@ -48,6 +48,11 @@ Commands: Analysis: AutoRefreshPeriod: 60 + Active: + # Minutes a player should play per week to be considered active + PlaytimeThreshold: 30 + # How many days player should join per week to be considered active + LoginThreshold: 2 Export: Enabled: false DestinationFolder: 'Analysis Results' @@ -58,8 +63,27 @@ Data: CombineCommandAliases: true # ----------------------------------------------------- Customization: + UseServerTime: true + Display: + SessionsAsTable: false + LargestWorldPercInSessionTitle: false + # By Default WorldPie is ordered alphabetically, colors are still determined alphabetically. + OrderWorldPieByPercentage: false + MaxSessions: 50 + MaxPlayers: 2500 + MaxPlayersPlayersPage: 25000 + PlayerTableFooter: true + PlayerIPs: true Formatting: DecimalPoints: '#.##' + Dates: + # RecentDays replaces date with Today, Yesterday, Wednesday etc. + RecentDays: true + # Non-regex pattern to replace + DatePattern: 'MMM d YYYY' + Full: 'MMM d YYYY, HH:mm:ss' + NoSeconds: 'MMM d YYYY, HH:mm' + JustClock: 'HH:mm:ss' TimeAmount: Year: '1 year, ' Years: '%years% years, ' diff --git a/Plan/src/main/resources/config.yml b/Plan/src/main/resources/config.yml index dfc7fed33..2416111bd 100644 --- a/Plan/src/main/resources/config.yml +++ b/Plan/src/main/resources/config.yml @@ -87,6 +87,7 @@ Customization: MaxPlayers: 2500 MaxPlayersPlayersPage: 25000 PlayerTableFooter: true + PlayerIPs: true Formatting: DecimalPoints: '#.##' # Dates settings use Java SimpleDateFormat. From 07b97216792ad8a671a0c3baefd30a7e64b26dd1 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 10:16:04 +0200 Subject: [PATCH 02/15] Removed cache request for refreshing html on Analysis --- .../plan/system/info/request/GenerateAnalysisPageRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java b/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java index 8790c3a18..94889faba 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java @@ -66,7 +66,6 @@ public class GenerateAnalysisPageRequest extends InfoRequestWithVariables implem private void generateAndCache(UUID serverUUID) throws WebException { InfoSystem infoSystem = InfoSystem.getInstance(); - infoSystem.sendRequest(new CacheAnalysisPageRequest(serverUUID, AnalysisPage.getRefreshingHtml())); infoSystem.sendRequest(new CacheAnalysisPageRequest(serverUUID, analyseAndGetHtml())); infoSystem.updateNetworkPage(); } From cf2f0299bd1afbee28b978e54326e1baaaadc61f Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 10:18:16 +0200 Subject: [PATCH 03/15] version to b1 --- Plan/src/main/resources/bungee.yml | 2 +- Plan/src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plan/src/main/resources/bungee.yml b/Plan/src/main/resources/bungee.yml index 676124126..050ee6b39 100644 --- a/Plan/src/main/resources/bungee.yml +++ b/Plan/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.PlanBungee -version: 4.1.6 \ No newline at end of file +version: 4.1.6-b1 \ No newline at end of file diff --git a/Plan/src/main/resources/plugin.yml b/Plan/src/main/resources/plugin.yml index 3d0496f57..e536d3362 100644 --- a/Plan/src/main/resources/plugin.yml +++ b/Plan/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.Plan -version: 4.1.6 +version: 4.1.6-b1 softdepend: - EssentialsX - Towny From ec6fb4106e217f22b40c52f09858363e52fb9d05 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 10:28:05 +0200 Subject: [PATCH 04/15] Fixed SuperbVote related NoSuchMethodErrors --- PlanPluginBridge/pom.xml | 2 +- .../pluginbridge/plan/superbvote/SuperbVoteData.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/PlanPluginBridge/pom.xml b/PlanPluginBridge/pom.xml index d1ffb0542..488a367c2 100644 --- a/PlanPluginBridge/pom.xml +++ b/PlanPluginBridge/pom.xml @@ -165,7 +165,7 @@ io.minimum minecraft.superbvote - 0.3.4 + 0.4.1 provided diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java index 9028fcb35..b23725716 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/superbvote/SuperbVoteData.java @@ -32,7 +32,7 @@ public class SuperbVoteData extends PluginData { @Override public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) { - int votes = store.getVotes(uuid); + int votes = store.getVotes(uuid).getVotes(); inspectContainer.addValue(getWithIcon("Votes", "check", "teal"), votes); @@ -44,7 +44,7 @@ public class SuperbVoteData extends PluginData { Map votes = new HashMap<>(); long total = 0; for (UUID uuid : uuids) { - int votesCount = store.getVotes(uuid); + int votesCount = store.getVotes(uuid).getVotes(); votes.put(uuid, votesCount); total += votesCount; } From d5f924191a3daa14738e42aa24ad5d049d0675c2 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 10:34:34 +0200 Subject: [PATCH 05/15] Updating PluginBridge jar (1/2) --- PlanPluginBridge/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PlanPluginBridge/pom.xml b/PlanPluginBridge/pom.xml index 488a367c2..db9c9f651 100644 --- a/PlanPluginBridge/pom.xml +++ b/PlanPluginBridge/pom.xml @@ -212,7 +212,7 @@ - ${project.name} + ${project.artifactId} org.apache.maven.plugins From aaf1d8a28cdc17f29be1eb3a498267eb9b4d2635 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 10:35:31 +0200 Subject: [PATCH 06/15] Updated PluginBridge jar (2/2) --- PlanPluginBridge/PlanPluginBridge-4.2.0.jar | Bin 124932 -> 124965 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/PlanPluginBridge/PlanPluginBridge-4.2.0.jar b/PlanPluginBridge/PlanPluginBridge-4.2.0.jar index 1a27f6d98a94ec28a47ef81e798030c681fda578..fbbb6327da22d5ef664f05fa96e343fc4b0e8a8c 100644 GIT binary patch delta 5924 zcmZWt2|QKX+dj)Y&tu|Y|Eu7i?{f5*Xg4T%s*%8)6-F(*Tr zGDU`rNy4oR-#+^sy4}z3$9~rPJnMPiwf3^t-s^5Rbxt=mqme#21s#g;!+gOE%XpBS z3BJgu9jY)fGeE+mKNRrQ!OKJHw;ont*Th)=E8LI6QlW9@03CUyi5bocs36x=ppIO} zfH5l^|HE1w?r{+6ehcVuo@B&sjO4Po3@!S9RYx%Eq>zQ;dH@~6Ud@CkBe^bOO<>Wz zfc8I~GRO@O`V0C0&n!a7%;x50@BOcFkuu@Fj{euGlR_J@I!Pr9Ns0q1+*wLuxfyV| zF_ild5-uI;ZUKz+yYot{Q5JGH2LBz*kMn;8zE@?^{1PmOnA&MateWG|;BaA5a z&=MzRPBqjfMkdcOQ85uR`;Hmw{D7BNIWO+(swm;+(UwSE(I)*P~bo)s}BigDJ$Ye2fmP^5SfZM4?etfQHVD0=jZ0Igmm$El>rz$a*MW z(*PmVNE!Zmz=Vv6@Sn{Y$Vwwki9&TVAWIHj!<-PqM?iaV-6mv`2wgCG5K>@Fm|uhE=GdF2L+b8o=0``62I zPYs4d(Aa2*V4}T~8SKRj+I~peG=)hQC-+~IiI$uas<=BKR1qyczfyHiQOJ+oi}Jcc zbol{%a($`n+X8EiJDC$H>Xsk8txk=bH{U$Jn(NVNHq+-eW$ph~KT-S;KK;@)72zBX zr=HW(eytZbPLVC)OILI#s3udt#kJB>=%kY!xas5~f9Y>bhRleol7lhZ+vEPO)7kD% zR>|$^QWf5i;s1Ummm$_sS?m~aHa|`5Qeu{CSH+c(180&-7fv~E71F7QsOpXIYvYx@ z+O+YeWFdSj9cfl^`H{{R`BB{O9Ztn;&lRgrC)n|>-doCfcdOEIs>Zlw{a|MGsR+YC z>C7`t5;RvY(PM&zyklP0VGYAvOb*7$W1n4lpfD1a*x@zcd~)8L%fqlGD0=hU@H-2M z)M-Z6ZkK~B>k~02IERHVYE!>xPQkMciVak;9IvXZv-XkcY>T&V_f~Pm=F^57vDRB?r7a{c+js;KIo6hbF4*SFt{;(L#1dN@Aait`4|j#&vs*dZoo#+EcVG131^} zgEj^Qx4Sg2q(`PIb|y#Wcoe8rk<%qpnY8SGCf+w>$zQF}KK!jjXS*uae{f!0F*^qz zQs}__;GNOC6(%c2r?MxtOq_Zyp>%s5)^>1}Y3kAG@TKv5((>N*l!2HmloJsdU;cITICZ`1} zCEH9D^H;aen|?9xJH0=axy!Zd+9B#Eb#;$a`ky2!copk-yq}z-cOc7OTNv$#%Mpn3 z>dt=lzT|=XkTz!BH=%F;#re5c_^OS@)P=cTlYNUf6F*}yh9e4O8nLxjK5VfH9lsid zm!)jW16=>HX>F*F8KNm|W>0Hi)vR<3DCv7Dn&P;1JYMUOOU{o4-N@jVf`ySXP4sG9 z=R{K&_(M+d)taBqli;|~UZVc7>PVc>m||{eN2*)$kLiQ7fwvS>FMoII|Ea`v&T-$b zG?%hVmmbJ_`qg3z#M8K6VrF9pL=_d}bTfKAkD99Nh@Qb$>*$$Kr!zb8wn*NnXcC?0 zOpJ32S3IdOP&Z_rU)_c&tK7WZAVq0;b*D7=}hna>1T<*MhEeq zZ5}-PHqzju`_1{j%Ntn>Tu+_sP<+q2lS^BzE$e1Pk>&IMVY+yR62vrbe$e(+y;+go z`C$Fy56|c5F4Xqfuu1+X=arE=mnE0Ttu_u}G@dUDXdX4!^vhP`jnN|SSwA#e{UytR zHhoL2-~JYxAWtSPXrmh!nfNpyziBA^I9qh)ExqqO#q6WAEx{R!Ap5XgAl819rR>$m z9v^>ROOaEeWOp$y64`5O%C`iv$UZt4Exn}OjQC=bLN-)TD5xs1f3`0mw9$`QwXlMN z{yW8TD|-lfdn-z*QDBONex!+A->*2OpDlno>G^2a;c@2#t>msCiU=vqo3x*lBkmlJ zI+fgDXEpwso+=hssG&A|-6atHs2SzKHf7>ekgwv#;8&`uyC^q4L9=9;=PJ`IBg+z^ z=OxPX*Yk^_IhgpLriCWG`?5;uk8Zp$#9vd#ukKvFi+REzWwfG=@%^c``v!&V>E%ks z08e~s@0b7uCgky}Xb&QYF}x#4C&nDSfg&-M?gM<0J*Au*1I`n7fvcgwo*3(i0@slJ zxm*hin24-t0%##3bTUvSKJ0DNzzosvbO!iDL`Sng2D0s!cjbY8;`WeN0&o=M@Vg;& zvI2-9z`X(}A>eTZIKxPL!OURMrsm-fDio><+O7cl7?+TU()4U=a#L%IY|EZfx%gW= z>*u@KJmhju$7HAZ;cI`zCP?VN{3IP_>1!U`$mKsZy8Oitlcy!+DJ#&C|IQ%tGxcA+ z$~1YW9orkHe$=-x7va&&HjT_^t;%>ac^ME#zqNVU%^)cBy3Wi6!FZhG8SDjimCZH& zlbWj4F_=dxl|4^$YinzD2Et=KyBF40mX|xF?Cf+jMM@6{Wl}SvDc+#X{j)~DR~p>E z{%y4FSVhbyoyXIcXJ=Vd(2a-6595wZzfL@HfAr>EO9#$Ttu`SHt~sK^C?Mx_XLN_p zU1*Y%*Z5wHp8aLV)(D<&_6?2tP48%9t~nG7Weh}PsPnjOYSs8{w!bZe({v4YfcEG* z9o#>Wc{D`==#zPeDcW2%w>~E37#-?U6D`Q(T*U}2wie_Z>5H(hG`$gM!Aj|nPp17| z2uOaN?g~AUVr*BM+IIgi&F84P53%0*r6aGi1vOKSm})d_h1a<~vcI3Yzu<-D%3#X5 zJ6j?h2AC*TGQ&ywx4*XPQNw))HZK|Zh|$>cB)MGW$hmChk=Kyg{!+PrenKKs(}ce$ z@TyWjkA-WoBWLfcP~D{Z$?;cK>>Y(QPYdKZE-immGS{(+O)-Cdkyb@6gtM>Mh_RApuIPEZFuJ7x zzw-XVK4r%q-HJ48OR~o}nsrEdV&(RcI?uw)qf_W|x5}EX76qrmJD$<<9J#osm10=U zU~$VAmuD#as%*XZgdav-bAVsEUky2Ct(7)SO?iq~4=Yssb??qGe#wTMD@pZwm(JcR zJ2xP^7>%K8Hn~vs^-`jhJ!B~u>+#5S(Uj^Yi;Q#HlSt_=!h>12=hw^b<ZO3~)7ujI4(TNk@|igi()#7v^zISyD*9G4Y~ORc`<)pYZAKjb zS0-3_k3Dzgiu7!Pb9I6eD7DeF*hg_-jRFB zQ)umD_FJI#;oS2PI%n^Rm&4dmp8PYsm;sBzBkV2d_F8^RR{gY6kA=b_Z!MMfPx7(- z;`CSeVR7`ufbn==c2Jm&;WKuclQPM^o##`Ag55KQk31#U`fkl5`I>ntgz0R!SE%$R z1GM}K@K6`HOuf_Y?}C_Wz-{fA4{Zt+dFRePoju zf*r7*Ab%46V6CUe=INn44c^HT?5mm9zM+$?K_z$N47ViK9ih$|z^f#s|EcUmGcsdKFELJL zr!+1O^Y^}vH=LMKcsC>Bs`%aTM4))*?P(*-ZB7yPHmN9;@C)-kTP3xP3nDJ)vWC+K zQhzqD|6DHm_LI5r*-qf|XLu?R&GJrm+Jj#tx-4ch6VJ z-tf{%p>Hu@*{LitKDs$2s!&(ciiyvD9usfdsDzYH$5C5s48|-!t;v5hRDMJ z{r#AvsPeq>oKIlrmhfHWFkicI_j)ngW21b1|g()qH#ml@8j2&-e2IlK@J zq7&1qCco7b?$`UrL&8#PeOrb@cE7$;^Zz@)H2^;@3fxjeB7bPk-Jab_Hxyv`QWiwli8(( z>aAk&fP?AX>N{cKHa*@+3R4g31*W(nUnM-gfeEhqqCV4vE#Y*%Rd1$zK)cp8!?|zF zhTl1+c_djeWm7~rKX~_JA;h$837pw`QGsdBv=pR z2?rpMSv^oAd{jYy*8?d8yr~B#5J1xakn;xUd;>sE7NE=qU_{urq3;dA4guzPa1jA7 z@W2cKHI0A|5^01z2tqi_2L&|}&qg4aGeyEOEpS-631}d#n@uFQ!6sn*+eEjSWP(^` z?6yXl;dcRoH*8{s03=C43n>ZGqHHC#U^O3P+X@sBCDJP0Z6Qk9Hj?sm8*oQNFL%Mg zcHn?SB6q>pU2yRYspP6R;4-4&?*La35ZwVV2w-|k0&#DFD-zk<1umVWT>ZO1s|%PT znv5>si~!nh67cQ@9!O-e8@M6Bs0Y|1psWY>A>2LTcO*mXJ8%P`sNR$6@p(`3`M3-8 zdP(Cd>IFWCShSA>GWtLeVkp>80-61!JN&aB*dk)90TQSkAmx%9B&A5-1=Jr%k?SA8 zO{CZCF0dUU_39l0E(oPIOcLi0!?Q{l4&w-EdasWFUqrJoLaNYVlmv!HNki5f1MZA} ze8NNZW55m#uMq>!A(V>?846_uf7z@5>y$4$#0b*(2+j!-L~=W&FF!D%Pzh)hO5+a^ z*9B;02nge@QBgr3J^~R$&gK=ZBL{mL!v{^uf5^|;|CW2%0}jY)93Uq!ko!2`BO7x3 zP5*KP%uwAf-9?}SynoZF-Y~t;4;YY)%UtGZ!tmM56D|}=>5q)1K1d%3K2zg?q9#b$ zQYK(KNz5Ka4^2-1E@U3J3Dlj?e^Gj$z&<1k`InewCU~B5=}{=%KeEh55%q+FI*2(M z?1TR5Af+1q1p8TH_jqp6d{&6TQus78#sGXfqD02oJMeKTJ03WC&w1uGV&wvF&e}*UNkFO9> v6zbSscN8i+guW6g`V17H;Lm^=y}JQnU`Yu4tNMr39D4Q{7*WaA133JD{UP3H delta 5881 zcmZu#2{=_<*uC34hs>8uh0K}95K?5G%9!cPkRcL6w?s)4T{*~*q6ksO44E^9D`Vy{ zA|+*N;J^2rtMBjo|NA_gb=JGywcowZe)c|R=in$Kag_8X2Bc&(D8kRy>sSK)K~fw1 zMK0|S{&EVYiT}v(R~KJzseknZ;kqc(e}&xG1PWfPF`ywhVeNn#e0=~k;p+r2{XZFE z_>6;)eK(-N`j8-L^rSM_OdZ<)RUN^sn@lDN2dM9n?uqnZPdp82_5ot8AwtLP+*P7krFcTb;gl%!9haJW8|!R z7`kf;{@a106vzJfIL_dGswwumA_JYB2XySjr$L1x4C`&Cu>@*r6snyKs~IDV&1YnV zUbh395*Nz-)C8ZB5JqJ(7?iQ7kkb=VRQy7^XYkKz3|q&dR3gXq4T+2Lx{|`e1c7;S zBvr(S1O^?VBor{{ktU~t!H`ldB8Joq5b?ZL6e9N45kp#jV5o~Qv&IY*41|`0CQOfS z<7ZL@CwBFlF#b8AOSG&=X<-`2RjwzsUUfu^4$LrC|WCd{9_X$7PI_xNv96TdyhXD2CxL%~H_)#$=;q`bQ9b63h=yUc> zDimst6<>@}$;|OoN&4 zy4m`BMa;FLB{TOx3CQ>PyzyGrkMxrdD43I?C>=kfm7M$Hi(WDwi@FLCA$E88 zZi+2^O}dfKWY;vRRkQz1b+AfRCLW2JEh&rt-8^l zYu;jPOLb(8v}}|=rh5La=U8RydR8C&WGd0T<&d@2sh&IwbJlz-nUxwZwv=(jhoBV&?ec*+qp4Ta`uR~v!*-?d2+uhOj%uiFvhq|Al>|iTO$3aLC%V2 zi%2l`&dN!%pjKwp=&Xk}UE(yKMowK73cyy>V_xv&ESl+_?bWGzuI5!Kw(tI=kJZtS zr`cQ#Td&alKIiRGXw|h;PJ`n*$hh&*P(^-J(Atv0Kd$WQp<-K~8;nY?OPa$CmAgA* zo+T~>zjMy{hvhnbt8dxbDph&W@YVo@7g)YoJcoOzjJZO*->-Pd%oPoPn-Ipha;(!+>ej)2t^h(8aK* zBJ%D}H9x5iR*3uX2n9CqE_JJ;85keTJPsU@wQD~vD*eMTI?lc$wW3nd{#)Ni19OtR z!p&Fqd=ue;)(?9W)Y>yzA8uY3CJN0GlVJGbpw>4^#BrAMn<-k$3UACLxqzRO$gp^vcIS z95!dWtsEsTU6Vt`7C%0jm=t1A##Yyseqo*4eaJZ4Q^Dwrct%@k#?hApY;J*rl^?fF zhJr)AF-I7E*%Tp10ijw|G5MZdC-;ycPY+rg=4V^dg-`cJ22%dfbITs>UD+%)EG@4X zAT7ZB&TRZLvSYQ{#xuhF;_LXyxm7t#*T$N4JiDE|TDOYw3qCqDAjuGZuiZG5+$-N+52}K z)zmOI7kCc_aPUqA^KHvUG;K02)i2BxGC6(}Vd!g|bB=7+{%*5FUu!+otB6)%<-2KrzG_^1 ze6!egN;S=-B)6V-QRDI9B<)n=Z?1k9PoU}UVW!mSF3#wSOLNo+8k4`?T`;EM2;<{p ztGqqTm67XZ(}aEO#j!R|7N&eMa+_N#zEt2~k|vGtSAi#fWSrbB+`GfyN|lsW4AO7B zv5a*P71C=RntiqQyNciejqf_Lf)dsEPatjK~EK%N0!T5X-dEreTe z1?dQPGXN+eTtgrTg7=FGRSYmgR`~b`;EZtVw}BtL^;Wni00tx)k_cK6q@4`Zk%jzv z8u)<2q%7;dDDbZ!!YGsi3I+8p06EC+6=1?FUcFVCo^4NRX={@` ziYt}BSI)6vhGX`YeR3i$JFQZ??&qCEaf9+1=_p&@(^s3>LgvQ5d=AFs>S#>5swJD} zq_Ffb{KySrG)ZVnywzTEee;XM4Go@O+!|qw^ZE|G&19OA-%GCN9oeRS!SPO{%~k{R>L9Fv9U2W@|3%_&ar(5j#4FQ z6tC%2e+)=roSm!2di$YU;*2^QaJ~G&N23jVOohxlG!j*!$1g_Oy0DJxv^N0?OZLV*N-+yGTCGyrnOwN9;={K&rM~gV=_L)f4gaxS7{90M5 zhJva9FJ=KdfQ#8)pi*7)^w1A{blT@Wcczt2!|7+5y`?9v(uQs4pN;v)f@9?$83CHc zZ2`aX*)e8`O{v4t@&D*snq1gDQaqB&F(cIKSzw}8{-N(|9kpzqbEIb9*0FC_Fw*sx z0;w=;7U?vN>^BZ^p>+=rTcV$>K6$xvr|hzlK`zb$(<;Vmdq@6;RjT+Ia`~dE1h-Xf zKZobk9|j!;ExBR}g0`5&1ts+i#ZTvxWu(-{c%I3P^t7XnW#e>g%nzASNd0l9=wkdk z<#`#(9#6>vJ=Jx;hSG!vQ>}^S&VyQOT z(^t3RSTJWR261d_o3>?R6AQmnUk++19_OOzJ2_}~{{(;i{le4I0VHbUMHO*OINiz@ z1`w;md70kJBhLQ*irD8XTw|~6wH`3APn*ehPGyS=H;p{?;=FX6eD<)Y{Z@g#VZFPwEH7dyUPYJ{md@3R`R*-lJZ;SHl((9r3TfL za$a=5*Ga{_(@D-5eH2xub28(QWB~PLbN6Lg3TG*wm#sGOc1_fM!Ll3|J4)<3(oi;1 z{1WsLj6R8WnirELvcF{ve71bvb(@JSYy5vBf02AI{I(Kt{VrFB2+8Gdy}G>X zlFJx8t>< zq=H2)jg%Jq)K?xqu03sFa$V-lIl+*wg#5Db`0(P$c*Eb~8^OjOs>&fz|FnQDS89RF zD-QmlG)Of8FCxpk`6wWN-> zv;+4xT=dmTcC*R`j;^^L=NGzlA?tUQlhPGVCRgXY@E@5wU#;7A7_A?)ja+zVbjdYg zNUFPW&0D`I;(-`C*`bL#@KCQZI!f7;@sMq@BD><)cdB)?M*y}I{X>Z7HS0pHKPI=9 z277A`(#_BoU9Z|X<2Vzzzx1w+Q+B*zxJ&5o&Agf&?fhj8-U6|u;u_QKpam_Z64^!1 zL;VzuzZ@_b=7ba4-~=X|9o*cIg>M1|?Q^4@E*CH&5+=QFKL=xMNhy??NG zX^sNACEt2+KJ;Fg`hkn$J|CPm86ILTYj7vst`I5D83QAi*dtY=g20q*gQ%nIIC@}e zBkYsNM|wk=Aj-ZYqfaWM>Y0v+EXIP^`)O6PBejLxC%3%CZFM$29AS~+HgNkXtoqW; zw#Ivs%D3rV^7!hw?Wf(s^BCO^2k*Dn#_fK$Mb|N3tQg#_vkAXv{MqB{&dPR!L+?uW zM5>|A>D`}Q_8+>R;-p&nIM7m>`JX+6C!AV_t3yjWUNaX#H|-M0mJ}T`Me>@K)HiF# z9^K4%_;j<)yECimV0~xm!=2q*TfG17k@#KaR0&%aHRM?j3^2Vk5z;Iu+-AehbVLt* zIxGK{$-@C{c^q%@XBD>cxMh|fKUIo^s~_pTqo${G3|^#HKX=A}!G@a;GD*CzW_6P} z^$BGPyKuKcb_==VmnfF)=b;&vL80quXK1`?9$cp5b(+Y2Y``y>=ArNN&gBP`T4w#t zGrcZemQDF5FfpJ9BrK%(Z4v(??0#AeK#s6sL%|I|0|r$MKnez*8h{E64mSe$tN{vW z1n{W>)Yu42;1FvQaDqWd6R?88i&lV!R+^BL4``wpf2Y?>G=gK9&Hu(M;S_}yUh6005U1ZQE*(YN3{3<}=@3=E{Yh~PyR z@PHYfZX&qVO>Ap(54iP!)3Bz#2b_a}D2@mcaljj9$a;Y%3@-EnXBZ6j5`A>u5y8uM zz#k3?_Yvz!>O*{z`iXv?{lre-`avM9JuyH8^#kAv%xDb~LE|9t*`kMlBOD6f1Cv9< zrYweu&ad}?$a^Al?>)E(XHkz3!POCB*7^u=heKyaiQb zc_G_=KnLq(cT3CP)1y#{yeO2`U-~t3sCN<=!zyOq*yFNzS5y3Plj>h8QD=fm0`i^$ z+;H8oQvgj;?uxL3Q-B?2R|%|D0K%$F19o0Qv0vCurwQWEVV<#}P|APV#zTJ7-~^mn zJ&jML!9W+Lfh0sR1K41ecLvWoMj&ig1Ym&BIAWJbKgWGxz<2)%EefUgmuvHF=-Moh zf@a5n5bW}c;G&p7U=<+aS-=dJb(`$5rxz&-g`@oMn4EyF&H@v7Nc_*y*kxsvwV*TtSS^d513&#j=(nN5?DzH|MJfQeZrqJ!l9pp(1VgcAsWc! z1AZh4Ya)K( Date: Fri, 23 Feb 2018 11:36:06 +0200 Subject: [PATCH 07/15] Refactored ServerAccordion --- .../webserver/pages/parsing/InspectPage.java | 10 +- .../html/structure/AbstractAccordion.java | 56 ++++++++ .../html/structure/AccordionElement.java | 103 +++++++++++++++ .../AccordionElementContentBuilder.java | 52 ++++++++ .../html/structure/ServerAccordion.java | 112 ++++++++++++++++ .../structure/ServerAccordionCreator.java | 125 ------------------ 6 files changed, 329 insertions(+), 129 deletions(-) create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElement.java create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElementContentBuilder.java create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java delete mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordionCreator.java diff --git a/Plan/src/main/java/com/djrapitops/plan/system/webserver/pages/parsing/InspectPage.java b/Plan/src/main/java/com/djrapitops/plan/system/webserver/pages/parsing/InspectPage.java index c593540bd..1e88ee438 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/webserver/pages/parsing/InspectPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/webserver/pages/parsing/InspectPage.java @@ -28,7 +28,7 @@ import com.djrapitops.plan.utilities.html.HtmlUtils; import com.djrapitops.plan.utilities.html.graphs.PunchCardGraph; import com.djrapitops.plan.utilities.html.graphs.pie.ServerPreferencePie; import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; -import com.djrapitops.plan.utilities.html.structure.ServerAccordionCreator; +import com.djrapitops.plan.utilities.html.structure.ServerAccordion; import com.djrapitops.plan.utilities.html.tables.ActionsTable; import com.djrapitops.plan.utilities.html.tables.GeoInfoTable; import com.djrapitops.plan.utilities.html.tables.NicknameTable; @@ -123,10 +123,12 @@ public class InspectPage extends Page { .collect(Collectors.toList()); String[] sessionsAccordion = HtmlStructure.createSessionsTabContentInspectPage(sessionsByServerName, allSessions, uuid); - String[] serverAccordion = ServerAccordionCreator.createAccordion(profile, serverNames); + + ServerAccordion serverAccordion = new ServerAccordion(profile, serverNames); + addValue("accordionSessions", sessionsAccordion[0]); - addValue("accordionServers", serverAccordion[0]); - addValue("sessionTabGraphViewFunctions", sessionsAccordion[1] + serverAccordion[1]); + addValue("accordionServers", serverAccordion.toHtml()); + addValue("sessionTabGraphViewFunctions", sessionsAccordion[1] + serverAccordion.toViewScript()); long dayAgo = now - TimeAmount.DAY.ms(); long weekAgo = now - TimeAmount.WEEK.ms(); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java new file mode 100644 index 000000000..6afb32584 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java @@ -0,0 +1,56 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package com.djrapitops.plan.utilities.html.structure; + +import com.djrapitops.plugin.utilities.Format; + +import java.util.ArrayList; +import java.util.List; + +/** + * Utility for creating html accordions. + * + * @author Rsl1122 + */ +public class AbstractAccordion { + + private final String id; + private final List elements; + + private String emptyText = "No Data"; + + public AbstractAccordion(String id) { + this.id = new Format(id) + .removeSymbols() + .removeWhitespace() + .toString(); + elements = new ArrayList<>(); + } + + public String toHtml() { + StringBuilder html = new StringBuilder(); + + html.append("
"); + + if (elements.isEmpty()) { + return "

" + emptyText + "

"; + } else { + for (AccordionElement element : elements) { + html.append(element.toHtml()); + } + } + + return html.append("
").toString(); // Close panel-group scrollbar + } + + public void addElement(AccordionElement element) { + element.setParentId(id); + elements.add(element); + } + + protected void setEmptyText(String text) { + emptyText = text; + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElement.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElement.java new file mode 100644 index 000000000..638de3ba0 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElement.java @@ -0,0 +1,103 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package com.djrapitops.plan.utilities.html.structure; + +import com.djrapitops.plugin.utilities.Format; +import com.djrapitops.plugin.utilities.Verify; + +/** + * Utility for creating html accordion elements. + * + * @author Rsl1122 + */ +public class AccordionElement { + + private final String id; + private final String title; + private String color; + private String parentId; + private String leftSide; + private String rightSide; + + public AccordionElement(String id, String title) { + this.id = new Format(id) + .removeSymbols() + .removeWhitespace() + .toString(); + this.title = title; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public AccordionElement setColor(String color) { + this.color = color; + return this; + } + + public AccordionElement setLeftSide(String leftSide) { + this.leftSide = leftSide; + return this; + } + + public AccordionElement setRightSide(String rightSide) { + this.rightSide = rightSide; + return this; + } + + public String toHtml() { + Verify.nullCheck(parentId, () -> new IllegalStateException("Parent ID not specified")); + + StringBuilder html = new StringBuilder(); + + appendPanelHeading(html); + appendLeftContent(html); + appendRightContent(html); + + // Finalize content + html.append("") // Closes row clearfix + .append("") // Closes panel-body + .append("") // Closes panel-collapse + .append(""); // Closes panel + + return html.toString(); + } + + private void appendRightContent(StringBuilder html) { + if (rightSide != null) { + html.append("
") // Right col-6 + .append(rightSide) + .append("
"); // Right col-6 + } + } + + private void appendLeftContent(StringBuilder html) { + Verify.nullCheck(leftSide, () -> new IllegalStateException("No Content specified")); + html.append("
") + .append("
") + .append("
") // Left col-6 + .append(leftSide) + .append("
"); // Closes Left col-6 + } + + private void appendPanelHeading(StringBuilder html) { + html.append("
") + .append("
") + .append("

") + .append("") + .append(title) // Title (header) + .append("

") // Closes collapsed & panel title + .append("
"); // Closes panel heading + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElementContentBuilder.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElementContentBuilder.java new file mode 100644 index 000000000..5cd15fe11 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AccordionElementContentBuilder.java @@ -0,0 +1,52 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package com.djrapitops.plan.utilities.html.structure; + +import java.io.Serializable; + +/** + * Utility for filling AccordionElements. + * + * @author Rsl1122 + * @see AccordionElement + */ +public class AccordionElementContentBuilder { + + private StringBuilder html; + + public AccordionElementContentBuilder() { + this.html = new StringBuilder(); + } + + public AccordionElementContentBuilder addRowBold(String color, String icon, String text, Serializable value) { + html.append("

").append(text); + html.append("").append(value).append("

"); + return this; + } + + public AccordionElementContentBuilder addRow(String color, String icon, String text, Serializable value) { + html.append("

").append(text); + html.append("").append(value).append("

"); + return this; + } + + public AccordionElementContentBuilder addHtml(String html) { + this.html.append(html); + return this; + } + + public String toHtml() { + return html.toString(); + } + + public AccordionElementContentBuilder addBreak() { + html.append("
"); + return this; + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java new file mode 100644 index 000000000..48040f21d --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java @@ -0,0 +1,112 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package com.djrapitops.plan.utilities.html.structure; + +import com.djrapitops.plan.data.PlayerProfile; +import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.data.time.WorldTimes; +import com.djrapitops.plan.system.settings.theme.Theme; +import com.djrapitops.plan.system.settings.theme.ThemeVal; +import com.djrapitops.plan.utilities.FormatUtils; +import com.djrapitops.plan.utilities.analysis.MathUtils; +import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; +import com.djrapitops.plugin.utilities.Format; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** + * HTML utility class for creating a Server Accordion. + * + * @author Rsl1122 + */ +public class ServerAccordion extends AbstractAccordion { + + private final StringBuilder viewScript; + + public ServerAccordion(PlayerProfile profile, Map serverNames) { + super("server_accordion"); + + viewScript = new StringBuilder(); + + Map worldTimesPerServer = profile.getWorldTimesPerServer(); + if (worldTimesPerServer.isEmpty()) { + return; + } + + addElements(profile, serverNames, worldTimesPerServer); + } + + public String toViewScript() { + return viewScript.toString(); + } + + private void addElements(PlayerProfile profile, Map serverNames, Map worldTimesPerServer) { + int i = 0; + for (Map.Entry entry : worldTimesPerServer.entrySet()) { + UUID serverUUID = entry.getKey(); + String serverName = serverNames.getOrDefault(serverUUID, "Unknown"); + WorldTimes worldTimes = entry.getValue(); + + List sessions = profile.getSessions(serverUUID); + long playtime = PlayerProfile.getPlaytime(sessions.stream()); + int sessionCount = sessions.size(); + long avgSession = MathUtils.averageLong(playtime, sessionCount); + long sessionMedian = PlayerProfile.getSessionMedian(sessions.stream()); + long longestSession = PlayerProfile.getLongestSession(sessions.stream()); + + long mobKills = PlayerProfile.getMobKillCount(sessions.stream()); + long playerKills = PlayerProfile.getPlayerKills(sessions.stream()).count(); + long deaths = PlayerProfile.getDeathCount(sessions.stream()); + + String play = FormatUtils.formatTimeAmount(playtime); + String avg = sessionCount != 0 ? FormatUtils.formatTimeAmount(avgSession) : "-"; + String median = sessionCount != 0 ? FormatUtils.formatTimeAmount(sessionMedian) : "-"; + String longest = sessionCount != 0 ? FormatUtils.formatTimeAmount(longestSession) : "-"; + + String sanitizedServerName = new Format(serverName) + .removeSymbols() + .removeWhitespace().toString() + i; + String htmlID = "server_" + sanitizedServerName; + + String worldId = "worldPieServer" + sanitizedServerName; + + WorldPie worldPie = new WorldPie(worldTimes); + + String title = serverName + "" + play + ""; + + String leftSide = new AccordionElementContentBuilder() + .addRowBold("teal", "calendar-check-o", "Sessions", sessionCount) + .addRowBold("green", "clock-o", "Server Playtime", play) + .addRowBold("teal", "clock-o", "Longest Session", longest) + .addRowBold("teal", "clock-o", "Session Median", median) + .addBreak() + .addRowBold("red", "crosshairs", "Player Kills", playerKills) + .addRowBold("green", "crosshairs", "Mob Kills", mobKills) + .addRowBold("red", "frown-o", "Deaths", deaths) + .toHtml(); + + String rightSide = "
" + + ""; + + addElement(new AccordionElement(htmlID, title) + .setColor(Theme.getValue(ThemeVal.PARSED_SERVER_ACCORDION)) + .setLeftSide(leftSide) + .setRightSide(rightSide)); + + viewScript.append("worldPie(") + .append(worldId).append(", ") + .append(worldId).append("series, ") + .append(worldId).append("gmseries") + .append(");"); + + i++; + } + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordionCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordionCreator.java deleted file mode 100644 index ef48fa76f..000000000 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordionCreator.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licence is provided in the jar as license.yml also here: - * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml - */ -package com.djrapitops.plan.utilities.html.structure; - -import com.djrapitops.plan.data.PlayerProfile; -import com.djrapitops.plan.data.container.Session; -import com.djrapitops.plan.data.time.WorldTimes; -import com.djrapitops.plan.system.settings.theme.Theme; -import com.djrapitops.plan.system.settings.theme.ThemeVal; -import com.djrapitops.plan.utilities.FormatUtils; -import com.djrapitops.plan.utilities.analysis.MathUtils; -import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; -import com.djrapitops.plugin.utilities.Format; - -import java.util.List; -import java.util.Map; -import java.util.UUID; - -/** - * HTML utility class for creating a Server Accordion. - * - * @author Rsl1122 - */ -public class ServerAccordionCreator { - - public static String[] createAccordion(PlayerProfile profile, Map serverNames) { - StringBuilder html = new StringBuilder("
"); - StringBuilder viewScript = new StringBuilder(); - - Map worldTimesPerServer = profile.getWorldTimesPerServer(); - - if (worldTimesPerServer.isEmpty()) { - return new String[]{"
" + - "

No Sessions

" + - "
", ""}; - } - - int i = 0; - for (Map.Entry entry : worldTimesPerServer.entrySet()) { - UUID serverUUID = entry.getKey(); - String serverName = serverNames.getOrDefault(serverUUID, "Unknown"); - WorldTimes worldTimes = entry.getValue(); - - List sessions = profile.getSessions(serverUUID); - long playtime = PlayerProfile.getPlaytime(sessions.stream()); - int sessionCount = sessions.size(); - long avgSession = MathUtils.averageLong(playtime, sessionCount); - long sessionMedian = PlayerProfile.getSessionMedian(sessions.stream()); - long longestSession = PlayerProfile.getLongestSession(sessions.stream()); - - long mobKills = PlayerProfile.getMobKillCount(sessions.stream()); - long playerKills = PlayerProfile.getPlayerKills(sessions.stream()).count(); - long deaths = PlayerProfile.getDeathCount(sessions.stream()); - - String play = FormatUtils.formatTimeAmount(playtime); - String avg = sessionCount != 0 ? FormatUtils.formatTimeAmount(avgSession) : "-"; - String median = sessionCount != 0 ? FormatUtils.formatTimeAmount(sessionMedian) : "-"; - String longest = sessionCount != 0 ? FormatUtils.formatTimeAmount(longestSession) : "-"; - - String sanitizedServerName = new Format(serverName) - .removeSymbols() - .removeWhitespace().toString() + i; - String htmlID = "server_" + sanitizedServerName; - - String worldId = "worldPieServer" + sanitizedServerName; - - WorldPie worldPie = new WorldPie(worldTimes); - - // Accordion panel header - html.append("
") - .append("
") - .append("

") - .append("") - .append(serverName).append("").append(play).append("") // Title (header) - .append("

") // Closes collapsed, panel title - .append("
"); // Closes panel heading - - // Content - html.append("
") - .append("
") - .append("
") // Left col-6 - // Sessions - .append("

Sessions ").append(sessionCount).append("

") - // Playtime - .append("

Server Playtime").append(play).append("

") - .append("

Longest Session").append(longest).append("

") - .append("

Session Median").append(median).append("

") - .append("
") - // Player Kills - .append("

Player Kills").append(playerKills).append("

") - // Mob Kills - .append("

Mob Kills").append(mobKills).append("

") - // Deaths - .append("

Deaths").append(deaths).append("

") - .append("
") // Closes Left col-6 - .append("
") // Right col-6 - .append("
") - // World Pie data script - .append("") - .append("
") // Right col-6 - .append("
") // Closes row clearfix - .append("
") // Closes panel-body - .append("
") // Closes panel-collapse - .append("
"); // Closes panel - - viewScript.append("worldPie(") - .append(worldId).append(", ") - .append(worldId).append("series, ") - .append(worldId).append("gmseries") - .append(");"); - - i++; - } - return new String[]{html.append("
").toString(), viewScript.toString()}; - } - -} \ No newline at end of file From cdc4f36f2eca1fd3b40b58d273ac70a729db23d3 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 19:03:14 +0200 Subject: [PATCH 08/15] More debug logs for different connections (b2) --- .../com/djrapitops/plan/system/info/BukkitInfoSystem.java | 2 ++ .../plan/system/info/connection/ConnectionLog.java | 7 ++++++- .../plan/system/info/connection/ConnectionOut.java | 1 - Plan/src/main/resources/bungee.yml | 2 +- Plan/src/main/resources/plugin.yml | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/BukkitInfoSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/info/BukkitInfoSystem.java index 3818e46b8..3bb0b4b85 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/BukkitInfoSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/BukkitInfoSystem.java @@ -12,6 +12,7 @@ import com.djrapitops.plan.system.info.request.InfoRequest; import com.djrapitops.plan.system.info.request.SetupRequest; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.utilities.html.HtmlStructure; +import com.djrapitops.plugin.api.utility.log.Log; /** * InfoSystem for Bukkit servers. @@ -29,6 +30,7 @@ public class BukkitInfoSystem extends InfoSystem { if (infoRequest instanceof SetupRequest) { throw new NoServersException("Set-up requests can not be run locally."); } + Log.debug("LocalRun: " + infoRequest.getClass().getSimpleName()); infoRequest.runLocally(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionLog.java b/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionLog.java index 1064d5ff0..1bb5ccdb6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionLog.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionLog.java @@ -7,6 +7,7 @@ package com.djrapitops.plan.system.info.connection; import com.djrapitops.plan.system.info.request.InfoRequest; import com.djrapitops.plan.system.info.server.Server; import com.djrapitops.plan.utilities.MiscUtils; +import com.djrapitops.plugin.api.utility.log.Log; import java.util.HashMap; import java.util.Map; @@ -34,11 +35,15 @@ public class ConnectionLog { } public static void logConnectionTo(Server server, InfoRequest request, int responseCode) { - logConnection(server.getWebAddress(), "Out: " + request.getClass().getSimpleName(), responseCode); + String requestName = request.getClass().getSimpleName(); + String address = server.getWebAddress(); + logConnection(address, "Out: " + requestName, responseCode); + Log.debug("ConnectionOut: " + requestName + " to " + address); } public static void logConnectionFrom(String server, String requestTarget, int responseCode) { logConnection(server, "In: " + requestTarget, responseCode); + Log.debug("ConnectionIn: " + requestTarget + " from " + server); } private static void logConnection(String address, String infoRequestName, int responseCode) { diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionOut.java b/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionOut.java index 0e556df65..18d51f64c 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionOut.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/connection/ConnectionOut.java @@ -113,7 +113,6 @@ public class ConnectionOut { byte[] toSend = parameters.getBytes(); connection.setUseCaches(false); - Log.debug("ConnectionOut: " + infoRequest.getClass().getSimpleName() + " to " + address); try (DataOutputStream out = new DataOutputStream(connection.getOutputStream())) { out.write(toSend); } diff --git a/Plan/src/main/resources/bungee.yml b/Plan/src/main/resources/bungee.yml index 050ee6b39..0c9185359 100644 --- a/Plan/src/main/resources/bungee.yml +++ b/Plan/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.PlanBungee -version: 4.1.6-b1 \ No newline at end of file +version: 4.1.6-b2 \ No newline at end of file diff --git a/Plan/src/main/resources/plugin.yml b/Plan/src/main/resources/plugin.yml index e536d3362..4d30c0761 100644 --- a/Plan/src/main/resources/plugin.yml +++ b/Plan/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.Plan -version: 4.1.6-b1 +version: 4.1.6-b2 softdepend: - EssentialsX - Towny From 3cb195592877fe0c3be3a77df8cfe5d7c99294f0 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 23 Feb 2018 19:11:31 +0200 Subject: [PATCH 09/15] Fail debugs --- .../djrapitops/plan/system/info/InfoSystem.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java index 19c39860a..e966bf5ba 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java @@ -30,7 +30,7 @@ import java.util.UUID; * Information management system. *

* Subclasses should decide how InfoRequests are run locally if necessary. - * + *

* Everything should be called from an Async thread. * * @author Rsl1122 @@ -68,7 +68,7 @@ public abstract class InfoSystem implements SubSystem { /** * Refreshes Analysis page. - * + *

* No calls from non-async thread found on 09.02.2018 * * @param serverUUID UUID of the server to analyze @@ -85,7 +85,7 @@ public abstract class InfoSystem implements SubSystem { /** * Send an InfoRequest to another server or run locally if necessary. - * + *

* No calls from non-async thread found on 09.02.2018 * * @param infoRequest InfoRequest to send or run. @@ -94,13 +94,14 @@ public abstract class InfoSystem implements SubSystem { public void sendRequest(InfoRequest infoRequest) throws WebException { try { if (!connectionSystem.isServerAvailable()) { + Log.debug("Main server unavailable, running locally."); runLocally(infoRequest); return; } connectionSystem.sendInfoRequest(infoRequest); } catch (WebException original) { try { - // Attempt to run locally. + Log.debug("Exception during request: " + original.toString() + ", running locally."); runLocally(infoRequest); } catch (NoServersException e2) { throw original; @@ -110,7 +111,7 @@ public abstract class InfoSystem implements SubSystem { /** * Run the InfoRequest locally. - * + *

* No calls from non-async thread found on 09.02.2018 * * @param infoRequest InfoRequest to run. @@ -144,7 +145,7 @@ public abstract class InfoSystem implements SubSystem { /** * Updates Network page. - * + *

* No calls from non-async thread found on 09.02.2018 * * @throws WebException If fails. @@ -153,7 +154,7 @@ public abstract class InfoSystem implements SubSystem { /** * Requests Set up from Bungee. - * + *

* No calls from non-async thread found on 09.02.2018 * * @param addressToRequestServer Address of Bungee server. From 385e161d3730ca85a79f7b536f9a3cee93a2ed39 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 25 Feb 2018 12:10:26 +0200 Subject: [PATCH 10/15] Fixed possible error if a setting was empty on bungee config.yml --- .../plan/system/settings/network/NetworkSettings.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java index c60d56781..659dc88c3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/network/NetworkSettings.java @@ -86,8 +86,8 @@ public class NetworkSettings { String[] settings = configSettings.split(SPLIT); UUID thisServerUUID = ServerInfo.getServerUUID(); for (String settingAndVal : settings) { - String[] split = settingAndVal.split(VAL_SPLIT); - String setting = split[0]; + String[] settingValSplit = settingAndVal.split(VAL_SPLIT); + String setting = settingValSplit[0]; String[] pathSplit = setting.split(":"); String path; if (pathSplit.length == 2) { @@ -100,7 +100,7 @@ public class NetworkSettings { path = setting; } - String value = split[1]; + String value = settingValSplit.length == 2 ? settingValSplit[1] : ""; pathValueMap.put(path, value); } return pathValueMap; From eba17eb127247bee1da0806f787e6d0302695c04 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 28 Feb 2018 15:47:37 +0200 Subject: [PATCH 11/15] Server page splitting for #531 + b3 --- .../system/database/databases/sql/SQLDB.java | 6 +- .../databases/sql/statements/Column.java | 20 ++ .../sql/statements/TableSqlParser.java | 8 + .../databases/sql/tables/ServerTable.java | 34 +++- .../databases/sql/tables/TransferTable.java | 182 +++++++++++------- .../djrapitops/plan/utilities/Base64Util.java | 23 +++ Plan/src/main/resources/bungee.yml | 2 +- Plan/src/main/resources/plugin.yml | 2 +- .../system/database/databases/SQLiteTest.java | 23 +++ 9 files changed, 222 insertions(+), 78 deletions(-) create mode 100644 Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Column.java diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java index 29df952cd..25400feab 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLDB.java @@ -134,7 +134,7 @@ public abstract class SQLDB extends Database { if (newDatabase) { Log.info("New Database created."); - versionTable.setVersion(13); + versionTable.setVersion(14); } int version = versionTable.getVersion(); @@ -165,6 +165,10 @@ public abstract class SQLDB extends Database { geoInfoTable.alterTableV13(); versionTable.setVersion(13); } + if (version < 14) { + transferTable.alterTableV14(); + versionTable.setVersion(14); + } } catch (SQLException e) { throw new DBInitException("Failed to set-up Database", e); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Column.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Column.java new file mode 100644 index 000000000..5faf89a54 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Column.java @@ -0,0 +1,20 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package com.djrapitops.plan.system.database.databases.sql.statements; + +/** + * Interface for SQL column enum compatibility. + * + * @author Rsl1122 + */ +public interface Column { + + default String get() { + return toString(); + } + + String toString(); + +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java index ec0a0df70..eba97ae28 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java @@ -32,6 +32,10 @@ public class TableSqlParser extends SqlParser { return new TableSqlParser("").column(column, type); } + public TableSqlParser column(Column column, String type) { + return column(column.get(), type); + } + public TableSqlParser column(String column, String type) { if (columns > 0) { append(", "); @@ -43,6 +47,10 @@ public class TableSqlParser extends SqlParser { return this; } + public TableSqlParser foreignKey(Column column, String refrencedTable, Column referencedColumn) { + return foreignKey(column.get(), refrencedTable, referencedColumn.get()); + } + public TableSqlParser foreignKey(String column, String refrencedTable, String referencedColumn) { if (columns > 0) { append(", "); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java index 6968801bc..2b9b8bfc7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java @@ -35,6 +35,11 @@ import java.util.*; */ public class ServerTable extends Table { + @Deprecated + public String getColumnID() { + return Col.SERVER_ID.get(); + } + public final String statementSelectServerID; public final String statementSelectServerNameID; private static final String columnServerID = "id"; @@ -308,12 +313,33 @@ public class ServerTable extends Table { }); } - public String getColumnID() { - return columnServerID; + @Deprecated + public String getColumnUUID() { + return Col.SERVER_UUID.get(); } - public String getColumnUUID() { - return columnServerUUID; + public enum Col implements Column { + SERVER_ID("id"), + SERVER_UUID("uuid"), + NAME("name"), + WEBSERVER_ADDRESS("web_address"), + INSTALLED("is_installed"), + MAX_PLAYERS("max_players"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } } public void insertAllServers(List allServer) throws SQLException { diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java index afa78c478..2e8e8511f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java @@ -8,6 +8,7 @@ import com.djrapitops.plan.api.exceptions.database.DBInitException; import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; import com.djrapitops.plan.system.info.request.CacheAnalysisPageRequest; @@ -15,16 +16,14 @@ import com.djrapitops.plan.system.info.request.CacheInspectPageRequest; import com.djrapitops.plan.system.info.request.CacheInspectPluginsTabRequest; import com.djrapitops.plan.system.info.request.CacheNetworkPageContentRequest; import com.djrapitops.plan.system.info.server.ServerInfo; +import com.djrapitops.plan.utilities.Base64Util; import com.djrapitops.plan.utilities.MiscUtils; import com.djrapitops.plugin.api.TimeAmount; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; +import java.util.*; /** * Table that represents plan_transfer in SQL database. @@ -33,54 +32,65 @@ import java.util.UUID; */ public class TransferTable extends Table { - private static final String columnSenderID = "sender_server_id"; - private static final String columnExpiry = "expiry_date"; - private static final String columnInfoType = "type"; - private static final String columnContent = "content_64"; - private static final String columnExtraVariables = "extra_variables"; + private final String insertStatementNoParts; private final ServerTable serverTable; - - private final String insertStatement; + private final String insertStatementParts; private final String selectStatement; public TransferTable(SQLDB db) { super("plan_transfer", db); serverTable = db.getServerTable(); - insertStatement = "INSERT INTO " + tableName + " (" + - columnSenderID + ", " + - columnExpiry + ", " + - columnInfoType + ", " + - columnExtraVariables + ", " + - columnContent + + insertStatementParts = "REPLACE INTO " + tableName + " (" + + Col.SENDER_ID + ", " + + Col.EXPIRY + ", " + + Col.INFO_TYPE + ", " + + Col.EXTRA_VARIABLES + ", " + + Col.CONTENT + ", " + + Col.PART + + ") VALUES (" + + serverTable.statementSelectServerID + ", " + + "?, ?, ?, ?, ?)"; + insertStatementNoParts = "REPLACE INTO " + tableName + " (" + + Col.SENDER_ID + ", " + + Col.EXPIRY + ", " + + Col.INFO_TYPE + ", " + + Col.EXTRA_VARIABLES + ", " + + Col.CONTENT + ") VALUES (" + serverTable.statementSelectServerID + ", " + "?, ?, ?, ?)"; selectStatement = "SELECT * FROM " + tableName + - " WHERE " + columnInfoType + "= ?" + - " AND " + columnExpiry + "> ?" + - " ORDER BY " + columnExpiry + " DESC"; + " WHERE " + Col.INFO_TYPE + "= ?" + + " AND " + Col.EXPIRY + "> ?" + + " ORDER BY " + Col.EXPIRY + " DESC, " + + Col.PART + " ASC"; } @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnSenderID, Sql.INT).notNull() - .column(columnExpiry, Sql.LONG).notNull().defaultValue("0") - .column(columnInfoType, Sql.varchar(100)).notNull() - .column(columnExtraVariables, Sql.varchar(255)).defaultValue("''") - .column(columnContent, usingMySQL ? "MEDIUMTEXT" : Sql.varchar(1)) // SQLite does not enforce varchar limits. - .foreignKey(columnSenderID, serverTable.toString(), serverTable.getColumnID()) + .column(Col.SENDER_ID, Sql.INT).notNull() + .column(Col.EXPIRY, Sql.LONG).notNull().defaultValue("0") + .column(Col.INFO_TYPE, Sql.varchar(100)).notNull() + .column(Col.EXTRA_VARIABLES, Sql.varchar(255)).defaultValue("''") + .column(Col.CONTENT, usingMySQL ? "MEDIUMTEXT" : Sql.varchar(1)) // SQLite does not enforce varchar limits. + .column(Col.PART, Sql.LONG).notNull().defaultValue("0") + .foreignKey(Col.SENDER_ID, serverTable.toString(), ServerTable.Col.SERVER_ID) .toString() ); } + public void alterTableV14() { + addColumns(Col.PART + " bigint NOT NULL DEFAULT 0"); + } + public void clean() throws SQLException { String sql = "DELETE FROM " + tableName + - " WHERE " + columnExpiry + " < ?" + - " AND " + columnInfoType + " != ?"; + " WHERE " + Col.EXPIRY + " < ?" + + " AND " + Col.INFO_TYPE + " != ?"; execute(new ExecStatement(sql) { @Override @@ -90,8 +100,8 @@ public class TransferTable extends Table { } }); sql = "DELETE FROM " + tableName + - " WHERE " + columnSenderID + " = " + serverTable.statementSelectServerID + - " AND " + columnInfoType + " = ?"; + " WHERE " + Col.SENDER_ID + " = " + serverTable.statementSelectServerID + + " AND " + Col.INFO_TYPE + " = ?"; execute(new ExecStatement(sql) { @Override @@ -103,7 +113,7 @@ public class TransferTable extends Table { } public void storePlayerHtml(UUID player, String encodedHtml) throws SQLException { - execute(new ExecStatement(insertStatement) { + execute(new ExecStatement(insertStatementNoParts) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, ServerInfo.getServerUUID().toString()); @@ -116,20 +126,28 @@ public class TransferTable extends Table { } public void storeServerHtml(UUID serverUUID, String encodedHtml) throws SQLException { - execute(new ExecStatement(insertStatement) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, ServerInfo.getServerUUID().toString()); - statement.setLong(2, MiscUtils.getTime() + TimeAmount.MINUTE.ms()); - statement.setString(3, CacheAnalysisPageRequest.class.getSimpleName().toLowerCase()); - statement.setString(4, serverUUID.toString()); - statement.setString(5, encodedHtml); - } - }); + List split = Base64Util.split(encodedHtml, 500000L); + + int i = 0; + for (String part : split) { + final int partNumber = i; + execute(new ExecStatement(insertStatementParts) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, ServerInfo.getServerUUID().toString()); + statement.setLong(2, MiscUtils.getTime() + TimeAmount.MINUTE.ms()); + statement.setString(3, CacheAnalysisPageRequest.class.getSimpleName().toLowerCase()); + statement.setString(4, serverUUID.toString()); + statement.setString(5, part); + statement.setInt(6, partNumber); + } + }); + i++; + } } public void storeNetworkPageContent(UUID serverUUID, String encodedHtml) throws SQLException { - execute(new ExecStatement(insertStatement) { + execute(new ExecStatement(insertStatementNoParts) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, ServerInfo.getServerUUID().toString()); @@ -153,18 +171,29 @@ public class TransferTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map htmlPerUUID = new HashMap<>(); while (set.next()) { - String uuidString = set.getString(columnExtraVariables); + String uuidString = set.getString(Col.EXTRA_VARIABLES.get()); UUID uuid = UUID.fromString(uuidString); - if (!htmlPerUUID.containsKey(uuid)) { - htmlPerUUID.put(uuid, set.getString(columnContent)); - } + htmlPerUUID.put(uuid, htmlPerUUID.getOrDefault(uuid, "") + set.getString(Col.CONTENT.get())); } return htmlPerUUID; } }); } + public void storePlayerPluginsTab(UUID player, String encodedHtml) throws SQLException { + execute(new ExecStatement(insertStatementNoParts) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, ServerInfo.getServerUUID().toString()); + statement.setLong(2, MiscUtils.getTime() + TimeAmount.MINUTE.ms()); + statement.setString(3, CacheInspectPluginsTabRequest.class.getSimpleName().toLowerCase()); + statement.setString(4, player.toString()); + statement.setString(5, encodedHtml); + } + }); + } + public Map getPlayerHtml() throws SQLException { return getHtmlPerUUIDForCacheRequest(CacheInspectPageRequest.class); } @@ -177,30 +206,17 @@ public class TransferTable extends Table { return getHtmlPerUUIDForCacheRequest(CacheAnalysisPageRequest.class); } - public void storePlayerPluginsTab(UUID player, String encodedHtml) throws SQLException { - execute(new ExecStatement(insertStatement) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, ServerInfo.getServerUUID().toString()); - statement.setLong(2, MiscUtils.getTime() + TimeAmount.MINUTE.ms()); - statement.setString(3, CacheInspectPluginsTabRequest.class.getSimpleName().toLowerCase()); - statement.setString(4, player.toString()); - statement.setString(5, encodedHtml); - } - }); - } - public Map getPlayerPluginsTabs(UUID playerUUID) throws SQLException { String serverIDColumn = serverTable + "." + serverTable.getColumnID(); String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; String sql = "SELECT " + - columnContent + ", " + + Col.CONTENT + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnSenderID + - " WHERE " + columnInfoType + "= ?" + - " AND " + columnExpiry + "> ?" + - " AND " + columnExtraVariables + "=?"; + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SENDER_ID + + " WHERE " + Col.INFO_TYPE + "= ?" + + " AND " + Col.EXPIRY + "> ?" + + " AND " + Col.EXTRA_VARIABLES + "=?"; return query(new QueryStatement>(sql, 250) { @Override @@ -215,7 +231,7 @@ public class TransferTable extends Table { Map htmlPerUUID = new HashMap<>(); while (set.next()) { UUID serverUUID = UUID.fromString(set.getString("s_uuid")); - String html64 = set.getString(columnContent); + String html64 = set.getString(Col.CONTENT.get()); htmlPerUUID.put(serverUUID, html64); } @@ -231,9 +247,9 @@ public class TransferTable extends Table { String sql = "SELECT " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnSenderID + - " WHERE " + columnExtraVariables + "=?" + - " ORDER BY " + columnExpiry + " LIMIT 1"; + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SENDER_ID + + " WHERE " + Col.EXTRA_VARIABLES + "=?" + + " ORDER BY " + Col.EXPIRY + " LIMIT 1"; return query(new QueryStatement>(sql, 1) { @Override @@ -253,7 +269,7 @@ public class TransferTable extends Table { @Deprecated public void storePlayerOnlineOnThisServer(UUID playerUUID) throws SQLException { - execute(new ExecStatement(insertStatement) { + execute(new ExecStatement(insertStatementNoParts) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, ServerInfo.getServerUUID().toString()); @@ -266,7 +282,7 @@ public class TransferTable extends Table { } public void storeConfigSettings(String encodedSettingString) throws SQLException { - execute(new ExecStatement(insertStatement) { + execute(new ExecStatement(insertStatementNoParts) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, ServerInfo.getServerUUID().toString()); @@ -289,10 +305,34 @@ public class TransferTable extends Table { @Override public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { - return Optional.ofNullable(set.getString(columnContent)); + return Optional.ofNullable(set.getString(Col.CONTENT.get())); } return Optional.empty(); } }); } + + public enum Col implements Column { + SENDER_ID("sender_server_id"), + EXPIRY("expiry_date"), + INFO_TYPE("type"), + CONTENT("content_64"), + EXTRA_VARIABLES("extra_variables"), + PART("part"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/Base64Util.java b/Plan/src/main/java/com/djrapitops/plan/utilities/Base64Util.java index 64d15d04b..de2ca6bed 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/Base64Util.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/Base64Util.java @@ -4,7 +4,9 @@ */ package com.djrapitops.plan.utilities; +import java.util.ArrayList; import java.util.Base64; +import java.util.List; /** * Utility for performing Base64 operations. @@ -29,4 +31,25 @@ public class Base64Util { return new String(decoded); } + public static List split(String encoded, long partLength) { + List split = new ArrayList<>(); + StringBuilder builder = new StringBuilder(); + long length = 0; + for (char c : encoded.toCharArray()) { + builder.append(c); + length++; + if (length >= partLength) { + split.add(builder.toString()); + builder = new StringBuilder(); + length = 0; + } + } + + // Add the last part even if it isn't full length. + if (length != 0) { + split.add(builder.toString()); + } + + return split; + } } \ No newline at end of file diff --git a/Plan/src/main/resources/bungee.yml b/Plan/src/main/resources/bungee.yml index 0c9185359..503a149ea 100644 --- a/Plan/src/main/resources/bungee.yml +++ b/Plan/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.PlanBungee -version: 4.1.6-b2 \ No newline at end of file +version: 4.1.6-b3 \ No newline at end of file diff --git a/Plan/src/main/resources/plugin.yml b/Plan/src/main/resources/plugin.yml index 4d30c0761..f90bf3866 100644 --- a/Plan/src/main/resources/plugin.yml +++ b/Plan/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.Plan -version: 4.1.6-b2 +version: 4.1.6-b3 softdepend: - EssentialsX - Towny diff --git a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java index 54ac0a354..7a92db4c5 100644 --- a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java @@ -896,4 +896,27 @@ public class SQLiteTest { assertTrue(configSettings.isPresent()); assertEquals(testString, Base64Util.decode(configSettings.get())); } + + @Test + public void testTransferSplitAndRearrange() throws SQLException { + StringBuilder testData = new StringBuilder(); + for (int i = 0; i < 900000; i++) { + testData.append("a"); + } + + String testString = Base64Util.encode(testData.toString()); + + int length = testString.length(); + System.out.println("Test String Length: " + length); + assertTrue(length > 500000); + + System.out.println("Test Parts: " + (int) Math.ceil(length / 500000.0)); + + TransferTable transferTable = db.getTransferTable(); + transferTable.storeServerHtml(TestConstants.SERVER_UUID, testString); + + String result = transferTable.getServerHtml().get(TestConstants.SERVER_UUID); + assertNotNull(result); + assertEquals(testString, result); + } } From 9347ee383a5c24c3d5c82a2ae162896f5d578627 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 28 Feb 2018 16:17:02 +0200 Subject: [PATCH 12/15] Fixed multiple network boxes caused by previous commit --- .../database/databases/sql/tables/TransferTable.java | 12 ++++++++++-- .../com/djrapitops/plan/system/info/InfoSystem.java | 11 ----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java index 2e8e8511f..78569c5be 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java @@ -129,13 +129,14 @@ public class TransferTable extends Table { List split = Base64Util.split(encodedHtml, 500000L); int i = 0; + long expires = MiscUtils.getTime() + TimeAmount.MINUTE.ms(); for (String part : split) { final int partNumber = i; execute(new ExecStatement(insertStatementParts) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, ServerInfo.getServerUUID().toString()); - statement.setLong(2, MiscUtils.getTime() + TimeAmount.MINUTE.ms()); + statement.setLong(2, expires); statement.setString(3, CacheAnalysisPageRequest.class.getSimpleName().toLowerCase()); statement.setString(4, serverUUID.toString()); statement.setString(5, part); @@ -170,11 +171,18 @@ public class TransferTable extends Table { @Override public Map processResults(ResultSet set) throws SQLException { Map htmlPerUUID = new HashMap<>(); + Map expiry = new HashMap<>(); while (set.next()) { String uuidString = set.getString(Col.EXTRA_VARIABLES.get()); UUID uuid = UUID.fromString(uuidString); - htmlPerUUID.put(uuid, htmlPerUUID.getOrDefault(uuid, "") + set.getString(Col.CONTENT.get())); + long expires = set.getLong(Col.EXPIRY.get()); + + long correctExpiry = expiry.getOrDefault(uuid, expires); + if (expires == correctExpiry) { + htmlPerUUID.put(uuid, htmlPerUUID.getOrDefault(uuid, "") + set.getString(Col.CONTENT.get())); + expiry.put(uuid, correctExpiry); + } } return htmlPerUUID; } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java index e966bf5ba..593145358 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/InfoSystem.java @@ -18,7 +18,6 @@ import com.djrapitops.plan.system.info.request.InfoRequest; import com.djrapitops.plan.system.info.request.SendDBSettingsRequest; import com.djrapitops.plan.system.info.server.Server; import com.djrapitops.plan.system.info.server.ServerInfo; -import com.djrapitops.plan.system.processing.Processor; import com.djrapitops.plan.system.webserver.WebServerSystem; import com.djrapitops.plugin.api.Check; import com.djrapitops.plugin.api.utility.log.Log; @@ -122,16 +121,6 @@ public abstract class InfoSystem implements SubSystem { @Override public void enable() throws EnableException { connectionSystem.enable(); - Processor.queue(() -> { - try { - updateNetworkPage(); - } catch (NoServersException e) { - /* Ignored */ - } catch (WebException e) { - // TODO Exception handling - Log.toLog(this.getClass(), e); - } - }); } @Override From 63887c7e299f928354b75c5752d9e09504baef72 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 1 Mar 2018 12:01:14 +0200 Subject: [PATCH 13/15] Refactored all SQL tables to use Column enums instead of static variable --- .../databases/sql/statements/Insert.java | 7 + .../databases/sql/statements/Select.java | 7 + .../sql/statements/TableSqlParser.java | 8 + .../databases/sql/statements/Update.java | 6 + .../databases/sql/tables/ActionsTable.java | 231 +++++---- .../databases/sql/tables/CommandUseTable.java | 148 +++--- .../databases/sql/tables/GeoInfoTable.java | 126 +++-- .../databases/sql/tables/KillsTable.java | 220 ++++---- .../databases/sql/tables/NicknamesTable.java | 192 +++---- .../databases/sql/tables/SecurityTable.java | 102 ++-- .../databases/sql/tables/ServerTable.java | 295 +++++------ .../databases/sql/tables/SessionsTable.java | 488 +++++++++--------- .../databases/sql/tables/TPSTable.java | 325 ++++++------ .../databases/sql/tables/TransferTable.java | 14 +- .../databases/sql/tables/UserIDTable.java | 21 + .../databases/sql/tables/UserInfoTable.java | 243 +++++---- .../databases/sql/tables/UsersTable.java | 245 +++++---- .../databases/sql/tables/WorldTable.java | 77 +-- .../databases/sql/tables/WorldTimesTable.java | 300 ++++++----- 19 files changed, 1665 insertions(+), 1390 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Insert.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Insert.java index b3e7a44c2..8e1242771 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Insert.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Insert.java @@ -1,5 +1,7 @@ package com.djrapitops.plan.system.database.databases.sql.statements; +import java.util.Arrays; + public class Insert extends SqlParser { public Insert(String table) { @@ -7,6 +9,11 @@ public class Insert extends SqlParser { addSpace(); } + public static String values(String table, Column... columns) { + String[] cols = Arrays.stream(columns).map(Column::get).toArray(String[]::new); + return values(table, cols); + } + public static String values(String table, String... columns) { Insert parser = new Insert(table); parser.append("("); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Select.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Select.java index 9ed55c38c..e06a59079 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Select.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Select.java @@ -1,11 +1,18 @@ package com.djrapitops.plan.system.database.databases.sql.statements; +import java.util.Arrays; + public class Select extends WhereParser { public Select(String start) { super(start); } + public static Select from(String table, Column... columns) { + String[] cols = Arrays.stream(columns).map(Column::get).toArray(String[]::new); + return from(table, cols); + } + public static Select from(String table, String... columns) { Select parser = new Select("SELECT "); int size = columns.length; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java index eba97ae28..e3876b29e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/TableSqlParser.java @@ -88,6 +88,10 @@ public class TableSqlParser extends SqlParser { return this; } + public TableSqlParser primaryKeyIDColumn(boolean mySQL, Column column) { + return primaryKeyIDColumn(mySQL, column.get()); + } + public TableSqlParser primaryKeyIDColumn(boolean mySQL, String column) { if (columns > 0) { append(", "); @@ -99,6 +103,10 @@ public class TableSqlParser extends SqlParser { return this; } + public TableSqlParser primaryKey(boolean mySQL, Column column) { + return primaryKey(mySQL, column.get()); + } + public TableSqlParser primaryKey(boolean mySQL, String column) { if (mySQL) { if (columns > 0) { diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Update.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Update.java index 9e9b4b73c..1452998f2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Update.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/statements/Update.java @@ -4,6 +4,8 @@ */ package com.djrapitops.plan.system.database.databases.sql.statements; +import java.util.Arrays; + /** * @author Fuzzlemann */ @@ -14,6 +16,10 @@ public class Update extends WhereParser { addSpace(); } + public static Update values(String table, Column... values) { + String[] cols = Arrays.stream(values).map(Column::get).toArray(String[]::new); + return values(table, cols); + } public static Update values(String table, String... values) { Update parser = new Update(table); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java index 9856e5ff6..4d39beeaa 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java @@ -11,6 +11,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Select; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; @@ -24,63 +25,87 @@ import java.util.*; /** * Table that is in charge of storing actions. - *

- * plan_actions contains columns: - *

    - *
  • user_id (plan_users: id)
  • - *
  • server_id (plan_servers: id)
  • - *
  • action_id
  • - *
  • date
  • - *
  • additional_info
  • - *
+ * + * Table Name: plan_actions + * + * For contained columns {@see Col} * * @author Rsl1122 + * @see Action */ public class ActionsTable extends UserIDTable { - private static final String columnServerID = "server_id"; - private static final String columnDate = "date"; - private static final String columnActionID = "action_id"; - private static final String columnAdditionalInfo = "additional_info"; - - private final ServerTable serverTable; - private String insertStatement; - public ActionsTable(SQLDB db) { super("plan_actions", db); serverTable = db.getServerTable(); insertStatement = "INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnServerID + ", " - + columnActionID + ", " - + columnDate + ", " - + columnAdditionalInfo + + Col.USER_ID + ", " + + Col.SERVER_ID + ", " + + Col.ACTION_ID + ", " + + Col.DATE + ", " + + Col.ADDITIONAL_INFO + ") VALUES (" + usersTable.statementSelectID + ", " + serverTable.statementSelectServerID + ", " + "?, ?, ?)"; } + private final ServerTable serverTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { ServerTable serverTable = db.getServerTable(); createTable(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnServerID, Sql.INT).notNull() - .column(columnDate, Sql.LONG).notNull() - .column(columnActionID, Sql.INT).notNull() - .column(columnAdditionalInfo, Sql.varchar(300)) - .foreignKey(columnUserID, usersTable.toString(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID()) + .column(Col.USER_ID, Sql.INT).notNull() + .column(Col.SERVER_ID, Sql.INT).notNull() + .column(Col.DATE, Sql.LONG).notNull() + .column(Col.ACTION_ID, Sql.INT).notNull() + .column(Col.ADDITIONAL_INFO, Sql.varchar(300)) + .foreignKey(Col.USER_ID, usersTable.toString(), UsersTable.Col.ID) + .foreignKey(Col.SERVER_ID, serverTable.toString(), ServerTable.Col.SERVER_ID) .toString()); } public void alterTableV12() { if (usingMySQL) { - executeUnsafe("ALTER TABLE " + tableName + " MODIFY " + columnAdditionalInfo + " VARCHAR(300)"); + executeUnsafe("ALTER TABLE " + tableName + " MODIFY " + Col.ADDITIONAL_INFO + " VARCHAR(300)"); } } + /** + * Used to get all Actions done by a user on this server. + * + * @param uuid UUID of the player + * @return List of actions done by the player. Does not include the kills. + * @throws SQLException DB Error + */ + public List getActions(UUID uuid) throws SQLException { + String sql = Select.all(tableName) + .where(Col.USER_ID + "=" + usersTable.statementSelectID) + .toString(); + + return query(new QueryStatement>(sql, 5000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + } + + @Override + public List processResults(ResultSet set) throws SQLException { + List actions = new ArrayList<>(); + while (set.next()) { + int serverID = set.getInt(Col.SERVER_ID.get()); + long date = set.getLong(Col.DATE.get()); + Actions doneAction = Actions.getById(set.getInt(Col.ACTION_ID.get())); + String additionalInfo = set.getString(Col.ADDITIONAL_INFO.get()); + actions.add(new Action(date, doneAction, additionalInfo, serverID)); + } + return actions; + } + }); + } + public void insertAction(UUID uuid, Action action) throws SQLException { execute(new ExecStatement(insertStatement) { @Override @@ -94,53 +119,20 @@ public class ActionsTable extends UserIDTable { }); } - /** - * Used to get all Actions done by a user on this server. - * - * @param uuid UUID of the player - * @return List of actions done by the player. Does not include the kills. - * @throws SQLException DB Error - */ - public List getActions(UUID uuid) throws SQLException { - String sql = Select.all(tableName) - .where(columnUserID + "=" + usersTable.statementSelectID) - .toString(); - - return query(new QueryStatement>(sql, 5000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - } - - @Override - public List processResults(ResultSet set) throws SQLException { - List actions = new ArrayList<>(); - while (set.next()) { - int serverID = set.getInt(columnServerID); - long date = set.getLong(columnDate); - Actions doneAction = Actions.getById(set.getInt(columnActionID)); - String additionalInfo = set.getString(columnAdditionalInfo); - actions.add(new Action(date, doneAction, additionalInfo, serverID)); - } - return actions; - } - }); - } - public Map>> getAllActions() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + - columnActionID + ", " + - columnDate + ", " + - columnAdditionalInfo + ", " + + Col.ACTION_ID + ", " + + Col.DATE + ", " + + Col.ADDITIONAL_INFO + ", " + usersUUIDColumn + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID; + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID; return query(new QueryAllStatement>>>(sql, 20000) { @Override @@ -153,9 +145,9 @@ public class ActionsTable extends UserIDTable { Map> serverMap = map.getOrDefault(serverUUID, new HashMap<>()); List actions = serverMap.getOrDefault(uuid, new ArrayList<>()); - long date = set.getLong(columnDate); - Actions doneAction = Actions.getById(set.getInt(columnActionID)); - String additionalInfo = set.getString(columnAdditionalInfo); + long date = set.getLong(Col.DATE.get()); + Actions doneAction = Actions.getById(set.getInt(Col.ACTION_ID.get())); + String additionalInfo = set.getString(Col.ADDITIONAL_INFO.get()); actions.add(new Action(date, doneAction, additionalInfo, -1)); @@ -167,6 +159,45 @@ public class ActionsTable extends UserIDTable { }); } + public Map> getServerActions(UUID serverUUID) throws SQLException { + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; + String sql = "SELECT " + + Col.ACTION_ID + ", " + + Col.DATE + ", " + + Col.ADDITIONAL_INFO + ", " + + usersUUIDColumn + + " FROM " + tableName + + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " WHERE " + serverTable.statementSelectServerID + "=" + Col.SERVER_ID; + + return query(new QueryStatement>>(sql, 20000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, serverUUID.toString()); + } + + @Override + public Map> processResults(ResultSet set) throws SQLException { + Map> map = new HashMap<>(); + while (set.next()) { + UUID uuid = UUID.fromString(set.getString("uuid")); + + List actions = map.getOrDefault(uuid, new ArrayList<>()); + + long date = set.getLong(Col.DATE.get()); + Actions doneAction = Actions.getById(set.getInt(Col.ACTION_ID.get())); + String additionalInfo = set.getString(Col.ADDITIONAL_INFO.get()); + + actions.add(new Action(date, doneAction, additionalInfo, -1)); + + map.put(uuid, actions); + } + return map; + } + }); + } + public void insertActions(Map>> allActions) throws SQLException { if (Verify.isEmpty(allActions)) { return; @@ -195,42 +226,26 @@ public class ActionsTable extends UserIDTable { }); } - public Map> getServerActions(UUID serverUUID) throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; - String sql = "SELECT " + - columnActionID + ", " + - columnDate + ", " + - columnAdditionalInfo + ", " + - usersUUIDColumn + - " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " WHERE " + serverTable.statementSelectServerID + "=" + columnServerID; + public enum Col implements Column { + USER_ID(UserIDTable.Col.USER_ID.get()), + SERVER_ID("server_id"), + DATE("date"), + ACTION_ID("action_id"), + ADDITIONAL_INFO("additional_info"); - return query(new QueryStatement>>(sql, 20000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, serverUUID.toString()); - } + private final String column; - @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> map = new HashMap<>(); - while (set.next()) { - UUID uuid = UUID.fromString(set.getString("uuid")); + Col(String column) { + this.column = column; + } - List actions = map.getOrDefault(uuid, new ArrayList<>()); + public String get() { + return toString(); + } - long date = set.getLong(columnDate); - Actions doneAction = Actions.getById(set.getInt(columnActionID)); - String additionalInfo = set.getString(columnAdditionalInfo); - - actions.add(new Action(date, doneAction, additionalInfo, -1)); - - map.put(uuid, actions); - } - return map; - } - }); + @Override + public String toString() { + return column; + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java index 0a1aeae54..5c2404199 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Select; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; @@ -19,52 +20,43 @@ import java.util.Optional; import java.util.UUID; /** + * Table that is in charge of storing command data. + *

+ * Table Name: plan_commandusages + *

+ * For contained columns {@see Col} + * * @author Rsl1122 */ public class CommandUseTable extends Table { - private static final String columnCommandId = "id"; - private static final String columnCommand = "command"; - private static final String columnTimesUsed = "times_used"; - private static final String columnServerID = "server_id"; - - private final ServerTable serverTable; - private String insertStatement; - public CommandUseTable(SQLDB db) { super("plan_commandusages", db); serverTable = db.getServerTable(); insertStatement = "INSERT INTO " + tableName + " (" - + columnCommand + ", " - + columnTimesUsed + ", " - + columnServerID + + Col.COMMAND + ", " + + Col.TIMES_USED + ", " + + Col.SERVER_ID + ") VALUES (?, ?, " + serverTable.statementSelectServerID + ")"; } + private final ServerTable serverTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { ServerTable serverTable = db.getServerTable(); createTable(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnCommandId) - .column(columnCommand, Sql.varchar(20)).notNull() - .column(columnTimesUsed, Sql.INT).notNull() - .column(columnServerID, Sql.INT).notNull() - .primaryKey(usingMySQL, columnCommandId) - .foreignKey(columnServerID, serverTable.toString(), serverTable.getColumnID()) + .primaryKeyIDColumn(usingMySQL, Col.COMMAND_ID) + .column(Col.COMMAND, Sql.varchar(20)).notNull() + .column(Col.TIMES_USED, Sql.INT).notNull() + .column(Col.SERVER_ID, Sql.INT).notNull() + .primaryKey(usingMySQL, Col.COMMAND_ID) + .foreignKey(Col.SERVER_ID, serverTable.toString(), ServerTable.Col.SERVER_ID) .toString() ); } - /** - * Used to get all commands used in this server. - * - * @return command - times used Map - * @throws SQLException DB Error - */ - public Map getCommandUse() throws SQLException { - return getCommandUse(ServerInfo.getServerUUID()); - } - /** * Used to get all commands used in a server. * @@ -74,8 +66,8 @@ public class CommandUseTable extends Table { */ public Map getCommandUse(UUID serverUUID) throws SQLException { String sql = Select.from(tableName, - columnCommand, columnTimesUsed) - .where(columnServerID + "=" + serverTable.statementSelectServerID) + Col.COMMAND, Col.TIMES_USED) + .where(Col.SERVER_ID + "=" + serverTable.statementSelectServerID) .toString(); return query(new QueryStatement>(sql, 5000) { @@ -88,8 +80,8 @@ public class CommandUseTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map commandUse = new HashMap<>(); while (set.next()) { - String cmd = set.getString(columnCommand).toLowerCase(); - int amountUsed = set.getInt(columnTimesUsed); + String cmd = set.getString(Col.COMMAND.get()).toLowerCase(); + int amountUsed = set.getInt(Col.TIMES_USED.get()); commandUse.put(cmd, amountUsed); } return commandUse; @@ -97,15 +89,25 @@ public class CommandUseTable extends Table { }); } + /** + * Used to get all commands used in this server. + * + * @return command - times used Map + * @throws SQLException DB Error + */ + public Map getCommandUse() throws SQLException { + return getCommandUse(ServerInfo.getServerUUID()); + } + public void commandUsed(String command) throws SQLException { if (command.length() > 20) { return; } String sql = "UPDATE " + tableName + " SET " - + columnTimesUsed + "=" + columnTimesUsed + "+ 1" + - " WHERE " + columnServerID + "=" + serverTable.statementSelectServerID + - " AND " + columnCommand + "=?"; + + Col.TIMES_USED + "=" + Col.TIMES_USED + "+ 1" + + " WHERE " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID + + " AND " + Col.COMMAND + "=?"; boolean updated = execute(new ExecStatement(sql) { @Override @@ -119,6 +121,25 @@ public class CommandUseTable extends Table { } } + public Optional getCommandByID(int id) throws SQLException { + String sql = Select.from(tableName, Col.COMMAND).where(Col.COMMAND_ID + "=?").toString(); + + return query(new QueryStatement>(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setInt(1, id); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + return Optional.of(set.getString(Col.COMMAND.get())); + } + return Optional.empty(); + } + }); + } + private void insertCommand(String command) throws SQLException { execute(new ExecStatement(insertStatement) { @Override @@ -130,27 +151,8 @@ public class CommandUseTable extends Table { }); } - public Optional getCommandByID(int id) throws SQLException { - String sql = Select.from(tableName, columnCommand).where(columnCommandId + "=?").toString(); - - return query(new QueryStatement>(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setInt(1, id); - } - - @Override - public Optional processResults(ResultSet set) throws SQLException { - if (set.next()) { - return Optional.of(set.getString(columnCommand)); - } - return Optional.empty(); - } - }); - } - public Optional getCommandID(String command) throws SQLException { - String sql = Select.from(tableName, columnCommandId).where(columnCommand + "=?").toString(); + String sql = Select.from(tableName, Col.COMMAND_ID).where(Col.COMMAND + "=?").toString(); return query(new QueryStatement>(sql) { @Override @@ -161,7 +163,7 @@ public class CommandUseTable extends Table { @Override public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { - return Optional.of(set.getInt(columnCommandId)); + return Optional.of(set.getInt(Col.COMMAND_ID.get())); } return Optional.empty(); } @@ -169,14 +171,14 @@ public class CommandUseTable extends Table { } public Map> getAllCommandUsages() throws SQLException { - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + - columnCommand + ", " + - columnTimesUsed + ", " + + Col.COMMAND + ", " + + Col.TIMES_USED + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID; + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID; return query(new QueryAllStatement>>(sql, 10000) { @Override @@ -187,8 +189,8 @@ public class CommandUseTable extends Table { Map serverMap = map.getOrDefault(serverUUID, new HashMap<>()); - String command = set.getString(columnCommand); - int timesUsed = set.getInt(columnTimesUsed); + String command = set.getString(Col.COMMAND.get()); + int timesUsed = set.getInt(Col.TIMES_USED.get()); serverMap.put(command, timesUsed); map.put(serverUUID, serverMap); @@ -198,6 +200,28 @@ public class CommandUseTable extends Table { }); } + public enum Col implements Column { + COMMAND_ID("id"), + SERVER_ID("server_id"), + COMMAND("command"), + TIMES_USED("times_used"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } + public void insertCommandUsage(Map> allCommandUsages) throws SQLException { if (allCommandUsages.isEmpty()) { return; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java index 274dd8c05..0a31f0a2a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java @@ -6,6 +6,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Select; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; @@ -17,52 +18,55 @@ import java.sql.SQLException; import java.util.*; /** + * Table that is in charge of storing common IP and Geolocation data for users. + *

+ * Table Name: plan_ips + *

+ * For contained columns {@see Col} + * * @author Rsl1122 */ public class GeoInfoTable extends UserIDTable { - private static final String columnIP = "ip"; - private static final String columnGeolocation = "geolocation"; - private static final String columnLastUsed = "last_used"; - private String insertStatement; - public GeoInfoTable(SQLDB db) { super("plan_ips", db); insertStatement = "INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnIP + ", " - + columnGeolocation + ", " - + columnLastUsed + + Col.USER_ID + ", " + + Col.IP + ", " + + Col.GEOLOCATION + ", " + + Col.LAST_USED + ") VALUES (" + usersTable.statementSelectID + ", " + "?, ?, ?)"; } + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnIP, Sql.varchar(39)).notNull() - .column(columnGeolocation, Sql.varchar(50)).notNull() - .column(columnLastUsed, Sql.LONG).notNull().defaultValue("0") - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) + .column(Col.USER_ID, Sql.INT).notNull() + .column(Col.IP, Sql.varchar(39)).notNull() + .column(Col.GEOLOCATION, Sql.varchar(50)).notNull() + .column(Col.LAST_USED, Sql.LONG).notNull().defaultValue("0") + .foreignKey(Col.USER_ID, usersTable.getTableName(), UsersTable.Col.ID) .toString() ); } public void alterTableV12() { if (usingMySQL) { - executeUnsafe("ALTER TABLE " + tableName + " MODIFY " + columnIP + " VARCHAR(39) NOT NULL"); + executeUnsafe("ALTER TABLE " + tableName + " MODIFY " + Col.IP + " VARCHAR(39) NOT NULL"); } } public void alterTableV13() { - addColumns(columnLastUsed + " bigint NOT NULL DEFAULT 0"); + addColumns(Col.LAST_USED + " bigint NOT NULL DEFAULT 0"); } public List getGeoInfo(UUID uuid) throws SQLException { String sql = "SELECT DISTINCT * FROM " + tableName + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID; + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID; return query(new QueryStatement>(sql, 100) { @Override @@ -74,9 +78,9 @@ public class GeoInfoTable extends UserIDTable { public List processResults(ResultSet set) throws SQLException { List geoInfo = new ArrayList<>(); while (set.next()) { - String ip = set.getString(columnIP); - String geolocation = set.getString(columnGeolocation); - long lastUsed = set.getLong(columnLastUsed); + String ip = set.getString(Col.IP.get()); + String geolocation = set.getString(Col.GEOLOCATION.get()); + long lastUsed = set.getLong(Col.LAST_USED.get()); geoInfo.add(new GeoInfo(ip, geolocation, lastUsed)); } return geoInfo; @@ -84,6 +88,24 @@ public class GeoInfoTable extends UserIDTable { }); } + private void updateGeoInfo(UUID uuid, GeoInfo info) throws SQLException { + String sql = "UPDATE " + tableName + " SET " + + Col.LAST_USED + "=?" + + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID + + " AND " + Col.IP + "=?" + + " AND " + Col.GEOLOCATION + "=?"; + + execute(new ExecStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setLong(1, info.getLastUsed()); + statement.setString(2, uuid.toString()); + statement.setString(3, info.getIp()); + statement.setString(4, info.getGeolocation()); + } + }); + } + public void saveGeoInfo(UUID uuid, GeoInfo info) throws SQLException { List geoInfo = getGeoInfo(uuid); if (geoInfo.contains(info)) { @@ -104,27 +126,9 @@ public class GeoInfoTable extends UserIDTable { }); } - private void updateGeoInfo(UUID uuid, GeoInfo info) throws SQLException { - String sql = "UPDATE " + tableName + " SET " - + columnLastUsed + "=?" + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID + - " AND " + columnIP + "=?" + - " AND " + columnGeolocation + "=?"; - - execute(new ExecStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setLong(1, info.getLastUsed()); - statement.setString(2, uuid.toString()); - statement.setString(3, info.getIp()); - statement.setString(4, info.getGeolocation()); - } - }); - } - public Optional getGeolocation(String ip) throws SQLException { - String sql = Select.from(tableName, columnGeolocation) - .where(columnIP + "=?") + String sql = Select.from(tableName, Col.GEOLOCATION) + .where(Col.IP + "=?") .toString(); return query(new QueryStatement>(sql) { @@ -136,7 +140,7 @@ public class GeoInfoTable extends UserIDTable { @Override public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { - return Optional.of(set.getString(columnGeolocation)); + return Optional.of(set.getString(Col.GEOLOCATION.get())); } return Optional.empty(); } @@ -144,15 +148,15 @@ public class GeoInfoTable extends UserIDTable { } public Map> getAllGeoInfo() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; String sql = "SELECT " + - columnIP + ", " + - columnGeolocation + ", " + - columnLastUsed + ", " + + Col.IP + ", " + + Col.GEOLOCATION + ", " + + Col.LAST_USED + ", " + usersUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID; + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID; return query(new QueryAllStatement>>(sql, 50000) { @Override @@ -163,9 +167,9 @@ public class GeoInfoTable extends UserIDTable { List userGeoInfo = geoLocations.getOrDefault(uuid, new ArrayList<>()); - String ip = set.getString(columnIP); - String geolocation = set.getString(columnGeolocation); - long lastUsed = set.getLong(columnLastUsed); + String ip = set.getString(Col.IP.get()); + String geolocation = set.getString(Col.GEOLOCATION.get()); + long lastUsed = set.getLong(Col.LAST_USED.get()); userGeoInfo.add(new GeoInfo(ip, geolocation, lastUsed)); geoLocations.put(uuid, userGeoInfo); @@ -175,6 +179,28 @@ public class GeoInfoTable extends UserIDTable { }); } + public enum Col implements Column { + USER_ID(UserIDTable.Col.USER_ID.get()), + IP("ip"), + GEOLOCATION("geolocation"), + LAST_USED("last_used"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } + public void insertAllGeoInfo(Map> allIPsAndGeolocations) throws SQLException { if (Verify.isEmpty(allIPsAndGeolocations)) { return; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java index b7ab62c54..b091b3f5e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java @@ -7,6 +7,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; import com.djrapitops.plugin.utilities.Verify; @@ -17,45 +18,45 @@ import java.sql.SQLException; import java.util.*; /** + * Table that is in charge of storing kill data for each session. + *

+ * Table Name: plan_kills + *

+ * For contained columns {@see Col} + * * @author Rsl1122 */ public class KillsTable extends UserIDTable { - private static final String columnKillerUserID = "killer_id"; - private static final String columnVictimUserID = "victim_id"; - private static final String columnWeapon = "weapon"; - private static final String columnDate = "date"; - private static final String columnSessionID = "session_id"; - - private final SessionsTable sessionsTable; - private String insertStatement; - public KillsTable(SQLDB db) { super("plan_kills", db); sessionsTable = db.getSessionsTable(); insertStatement = "INSERT INTO " + tableName + " (" - + columnKillerUserID + ", " - + columnVictimUserID + ", " - + columnSessionID + ", " - + columnDate + ", " - + columnWeapon + + Col.KILLER_ID + ", " + + Col.VICTIM_ID + ", " + + Col.SESSION_ID + ", " + + Col.DATE + ", " + + Col.WEAPON + ") VALUES (" + usersTable.statementSelectID + ", " + usersTable.statementSelectID + ", " + "?, ?, ?)"; } + private final SessionsTable sessionsTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnKillerUserID, Sql.INT).notNull() - .column(columnVictimUserID, Sql.INT).notNull() - .column(columnWeapon, Sql.varchar(30)).notNull() - .column(columnDate, Sql.LONG).notNull() - .column(columnSessionID, Sql.INT).notNull() - .foreignKey(columnKillerUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnVictimUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) + .column(Col.KILLER_ID, Sql.INT).notNull() + .column(Col.VICTIM_ID, Sql.INT).notNull() + .column(Col.WEAPON, Sql.varchar(30)).notNull() + .column(Col.DATE, Sql.LONG).notNull() + .column(Col.SESSION_ID, Sql.INT).notNull() + .foreignKey(Col.KILLER_ID, usersTable.getTableName(), UsersTable.Col.ID) + .foreignKey(Col.VICTIM_ID, usersTable.getTableName(), UsersTable.Col.ID) + .foreignKey(Col.SESSION_ID, sessionsTable.getTableName(), SessionsTable.Col.ID) .toString() ); } @@ -63,8 +64,8 @@ public class KillsTable extends UserIDTable { @Override public void removeUser(UUID uuid) throws SQLException { String sql = "DELETE FROM " + tableName + - " WHERE " + columnKillerUserID + " = " + usersTable.statementSelectID + - " OR " + columnVictimUserID + " = " + usersTable.statementSelectID; + " WHERE " + Col.KILLER_ID + " = " + usersTable.statementSelectID + + " OR " + Col.VICTIM_ID + " = " + usersTable.statementSelectID; execute(new ExecStatement(sql) { @Override @@ -75,6 +76,43 @@ public class KillsTable extends UserIDTable { }); } + public void addKillsToSessions(UUID uuid, Map sessions) throws SQLException { + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as victim_uuid"; + String sql = "SELECT " + + Col.SESSION_ID + ", " + + Col.DATE + ", " + + Col.WEAPON + ", " + + usersUUIDColumn + + " FROM " + tableName + + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.VICTIM_ID + + " WHERE " + Col.KILLER_ID + "=" + usersTable.statementSelectID; + + query(new QueryStatement(sql, 50000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + } + + @Override + public Object processResults(ResultSet set) throws SQLException { + while (set.next()) { + int sessionID = set.getInt(Col.SESSION_ID.get()); + Session session = sessions.get(sessionID); + if (session == null) { + continue; + } + String uuidS = set.getString("victim_uuid"); + UUID victim = UUID.fromString(uuidS); + long date = set.getLong(Col.DATE.get()); + String weapon = set.getString(Col.WEAPON.get()); + session.getPlayerKills().add(new PlayerKill(victim, weapon, date)); + } + return null; + } + }); + } + public void savePlayerKills(UUID uuid, int sessionID, List playerKills) throws SQLException { if (Verify.isEmpty(playerKills)) { return; @@ -102,56 +140,19 @@ public class KillsTable extends UserIDTable { }); } - public void addKillsToSessions(UUID uuid, Map sessions) throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid"; - String sql = "SELECT " + - columnSessionID + ", " + - columnDate + ", " + - columnWeapon + ", " + - usersUUIDColumn + - " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID + - " WHERE " + columnKillerUserID + "=" + usersTable.statementSelectID; - - query(new QueryStatement(sql, 50000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - } - - @Override - public Object processResults(ResultSet set) throws SQLException { - while (set.next()) { - int sessionID = set.getInt(columnSessionID); - Session session = sessions.get(sessionID); - if (session == null) { - continue; - } - String uuidS = set.getString("victim_uuid"); - UUID victim = UUID.fromString(uuidS); - long date = set.getLong(columnDate); - String weapon = set.getString(columnWeapon); - session.getPlayerKills().add(new PlayerKill(victim, weapon, date)); - } - return null; - } - }); - } - public Map> getPlayerKills() throws SQLException { - String usersVictimIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersKillerIDColumn = "a." + usersTable.getColumnID(); - String usersVictimUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid"; - String usersKillerUUIDColumn = "a." + usersTable.getColumnUUID() + " as killer_uuid"; + String usersVictimIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersKillerIDColumn = "a." + UsersTable.Col.ID; + String usersVictimUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as victim_uuid"; + String usersKillerUUIDColumn = "a." + UsersTable.Col.UUID + " as killer_uuid"; String sql = "SELECT " + - columnDate + ", " + - columnWeapon + ", " + + Col.DATE + ", " + + Col.WEAPON + ", " + usersVictimUUIDColumn + ", " + usersKillerUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersVictimIDColumn + "=" + columnVictimUserID + - " INNER JOIN " + usersTable + " a on " + usersKillerIDColumn + "=" + columnKillerUserID; + " INNER JOIN " + usersTable + " on " + usersVictimIDColumn + "=" + Col.VICTIM_ID + + " INNER JOIN " + usersTable + " a on " + usersKillerIDColumn + "=" + Col.KILLER_ID; return query(new QueryAllStatement>>(sql, 50000) { @Override @@ -160,8 +161,8 @@ public class KillsTable extends UserIDTable { while (set.next()) { UUID killer = UUID.fromString(set.getString("killer_uuid")); UUID victim = UUID.fromString(set.getString("victim_uuid")); - long date = set.getLong(columnDate); - String weapon = set.getString(columnWeapon); + long date = set.getLong(Col.DATE.get()); + String weapon = set.getString(Col.WEAPON.get()); List kills = allKills.getOrDefault(killer, new ArrayList<>()); kills.add(new PlayerKill(victim, weapon, date)); allKills.put(killer, kills); @@ -171,6 +172,39 @@ public class KillsTable extends UserIDTable { }); } + public Map> getAllPlayerKillsBySessionID() throws SQLException { + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as victim_uuid"; + String sql = "SELECT " + + Col.SESSION_ID + ", " + + Col.DATE + ", " + + Col.WEAPON + ", " + + usersUUIDColumn + + " FROM " + tableName + + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.VICTIM_ID; + + return query(new QueryAllStatement>>(sql, 50000) { + @Override + public Map> processResults(ResultSet set) throws SQLException { + Map> allPlayerKills = new HashMap<>(); + while (set.next()) { + int sessionID = set.getInt(Col.SESSION_ID.get()); + + List playerKills = allPlayerKills.getOrDefault(sessionID, new ArrayList<>()); + + String uuidS = set.getString("victim_uuid"); + UUID victim = UUID.fromString(uuidS); + long date = set.getLong(Col.DATE.get()); + String weapon = set.getString(Col.WEAPON.get()); + playerKills.add(new PlayerKill(victim, weapon, date)); + + allPlayerKills.put(sessionID, playerKills); + } + return allPlayerKills; + } + }); + } + public void addKillsToSessions(Map>> map) throws SQLException { Map> playerKillsBySessionID = getAllPlayerKillsBySessionID(); for (UUID serverUUID : map.keySet()) { @@ -221,36 +255,26 @@ public class KillsTable extends UserIDTable { }); } - public Map> getAllPlayerKillsBySessionID() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as victim_uuid"; - String sql = "SELECT " + - columnSessionID + ", " + - columnDate + ", " + - columnWeapon + ", " + - usersUUIDColumn + - " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnVictimUserID; + public enum Col implements Column { + KILLER_ID("killer_id"), + VICTIM_ID("victim_id"), + SESSION_ID("session_id"), + WEAPON("weapon"), + DATE("date"); - return query(new QueryAllStatement>>(sql, 50000) { - @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> allPlayerKills = new HashMap<>(); - while (set.next()) { - int sessionID = set.getInt(columnSessionID); + private final String column; - List playerKills = allPlayerKills.getOrDefault(sessionID, new ArrayList<>()); + Col(String column) { + this.column = column; + } - String uuidS = set.getString("victim_uuid"); - UUID victim = UUID.fromString(uuidS); - long date = set.getLong(columnDate); - String weapon = set.getString(columnWeapon); - playerKills.add(new PlayerKill(victim, weapon, date)); + public String get() { + return toString(); + } - allPlayerKills.put(sessionID, playerKills); - } - return allPlayerKills; - } - }); + @Override + public String toString() { + return column; + } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java index 16a0beb8e..68c958929 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -16,37 +17,40 @@ import java.sql.SQLException; import java.util.*; /** + * Table that is in charge of storing nickname data. + *

+ * Table Name: plan_nicknames + *

+ * For contained columns {@see Col} + * * @author Rsl1122 */ public class NicknamesTable extends UserIDTable { - private static final String columnNick = "nickname"; - private static final String columnServerID = "server_id"; - - private final ServerTable serverTable; - private String insertStatement; - public NicknamesTable(SQLDB db) { super("plan_nicknames", db); serverTable = db.getServerTable(); insertStatement = "INSERT INTO " + tableName + " (" + - columnUserID + ", " + - columnServerID + ", " + - columnNick + + Col.USER_ID + ", " + + Col.SERVER_ID + ", " + + Col.NICKNAME + ") VALUES (" + usersTable.statementSelectID + ", " + serverTable.statementSelectServerID + ", " + "?)"; } + private final ServerTable serverTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnNick, Sql.varchar(75)).notNull() - .column(columnServerID, Sql.INT).notNull() - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) + .column(Col.USER_ID, Sql.INT).notNull() + .column(Col.NICKNAME, Sql.varchar(75)).notNull() + .column(Col.SERVER_ID, Sql.INT).notNull() + .foreignKey(Col.USER_ID, usersTable.getTableName(), UsersTable.Col.ID) + .foreignKey(Col.SERVER_ID, serverTable.getTableName(), ServerTable.Col.SERVER_ID) .toString() ); } @@ -61,14 +65,14 @@ public class NicknamesTable extends UserIDTable { * @throws SQLException when an error at retrieval happens */ public Map> getAllNicknames(UUID uuid) throws SQLException { - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + - columnNick + ", " + + Col.NICKNAME + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID + - " WHERE (" + columnUserID + "=" + usersTable.statementSelectID + ")"; + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID + + " WHERE (" + Col.USER_ID + "=" + usersTable.statementSelectID + ")"; return query(new QueryStatement>>(sql, 5000) { @@ -85,7 +89,7 @@ public class NicknamesTable extends UserIDTable { List nicknames = map.getOrDefault(serverUUID, new ArrayList<>()); - nicknames.add(set.getString(columnNick)); + nicknames.add(set.getString(Col.NICKNAME.get())); map.put(serverUUID, nicknames); } @@ -94,6 +98,45 @@ public class NicknamesTable extends UserIDTable { }); } + /** + * Get nicknames of the user on a server. + *

+ * Get's nicknames from other servers as well. + * + * @param uuid UUID of the Player + * @param serverUUID UUID of the server + * @return The nicknames of the User + * @throws SQLException when an error at retrieval happens + */ + public List getNicknames(UUID uuid, UUID serverUUID) throws SQLException { + String sql = "SELECT " + Col.NICKNAME + " FROM " + tableName + + " WHERE (" + Col.USER_ID + "=" + usersTable.statementSelectID + ")" + + " AND " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; + + return query(new QueryStatement>(sql, 1000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + statement.setString(2, serverUUID.toString()); + } + + @Override + public List processResults(ResultSet set) throws SQLException { + List nicknames = new ArrayList<>(); + while (set.next()) { + String nickname = set.getString(Col.NICKNAME.get()); + if (nickname.isEmpty()) { + continue; + } + if (!nicknames.contains(nickname)) { + nicknames.add(nickname); + } + } + return nicknames; + } + }); + } + /** * Get nicknames of the user on THIS server. *

@@ -107,41 +150,36 @@ public class NicknamesTable extends UserIDTable { return getNicknames(uuid, ServerInfo.getServerUUID()); } - /** - * Get nicknames of the user on a server. - *

- * Get's nicknames from other servers as well. - * - * @param uuid UUID of the Player - * @param serverUUID UUID of the server - * @return The nicknames of the User - * @throws SQLException when an error at retrieval happens - */ - public List getNicknames(UUID uuid, UUID serverUUID) throws SQLException { - String sql = "SELECT " + columnNick + " FROM " + tableName + - " WHERE (" + columnUserID + "=" + usersTable.statementSelectID + ")" + - " AND " + columnServerID + "=" + serverTable.statementSelectServerID; + public Map>> getAllNicknames() throws SQLException { + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; + String sql = "SELECT " + + Col.NICKNAME + ", " + + usersUUIDColumn + ", " + + serverUUIDColumn + + " FROM " + tableName + + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID; - return query(new QueryStatement>(sql, 1000) { + return query(new QueryAllStatement>>>(sql, 5000) { @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - statement.setString(2, serverUUID.toString()); - } - - @Override - public List processResults(ResultSet set) throws SQLException { - List nicknames = new ArrayList<>(); + public Map>> processResults(ResultSet set) throws SQLException { + Map>> map = new HashMap<>(); while (set.next()) { - String nickname = set.getString(columnNick); - if (nickname.isEmpty()) { - continue; - } - if (!nicknames.contains(nickname)) { - nicknames.add(nickname); - } + UUID serverUUID = UUID.fromString(set.getString("s_uuid")); + UUID uuid = UUID.fromString(set.getString("uuid")); + + Map> serverMap = map.getOrDefault(serverUUID, new HashMap<>()); + List nicknames = serverMap.getOrDefault(uuid, new ArrayList<>()); + + nicknames.add(set.getString(Col.NICKNAME.get())); + + serverMap.put(uuid, nicknames); + map.put(serverUUID, serverMap); } - return nicknames; + return map; } }); } @@ -162,38 +200,25 @@ public class NicknamesTable extends UserIDTable { }); } - public Map>> getAllNicknames() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; - String sql = "SELECT " + - columnNick + ", " + - usersUUIDColumn + ", " + - serverUUIDColumn + - " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID; + public enum Col implements Column { + USER_ID(UserIDTable.Col.USER_ID.get()), + SERVER_ID("server_id"), + NICKNAME("nickname"); - return query(new QueryAllStatement>>>(sql, 5000) { - @Override - public Map>> processResults(ResultSet set) throws SQLException { - Map>> map = new HashMap<>(); - while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString("s_uuid")); - UUID uuid = UUID.fromString(set.getString("uuid")); + private final String column; - Map> serverMap = map.getOrDefault(serverUUID, new HashMap<>()); - List nicknames = serverMap.getOrDefault(uuid, new ArrayList<>()); + Col(String column) { + this.column = column; + } - nicknames.add(set.getString(columnNick)); + public String get() { + return toString(); + } - serverMap.put(uuid, nicknames); - map.put(serverUUID, serverMap); - } - return map; - } - }); + @Override + public String toString() { + return column; + } } public void insertNicknames(Map>> allNicknames) throws SQLException { @@ -222,13 +247,4 @@ public class NicknamesTable extends UserIDTable { } }); } - - public String getColumnNick() { - return columnNick; - } - - public String getColumnUserID() { - return columnUserID; - } - } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java index 3ef5bf6a6..e6873e062 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java @@ -11,10 +11,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; -import com.djrapitops.plan.system.database.databases.sql.statements.Insert; -import com.djrapitops.plan.system.database.databases.sql.statements.Select; -import com.djrapitops.plan.system.database.databases.sql.statements.Sql; -import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; +import com.djrapitops.plan.system.database.databases.sql.statements.*; import com.djrapitops.plugin.utilities.Verify; import java.sql.PreparedStatement; @@ -24,35 +21,39 @@ import java.util.ArrayList; import java.util.List; /** + * Table that is in charge of storing WebUser data. + *

+ * Table Name: plan_security + *

+ * For contained columns {@see Col} + * * @author Rsl1122 + * @see WebUser */ public class SecurityTable extends Table { - private static final String columnUser = "username"; - private static final String columnSaltedHash = "salted_pass_hash"; - private static final String columnPermLevel = "permission_level"; - private String insertStatement; - public SecurityTable(SQLDB db) { super("plan_security", db); insertStatement = Insert.values(tableName, - columnUser, - columnSaltedHash, - columnPermLevel); + Col.USERNAME, + Col.SALT_PASSWORD_HASH, + Col.PERMISSION_LEVEL); } + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnUser, Sql.varchar(100)).notNull().unique() - .column(columnSaltedHash, Sql.varchar(100)).notNull().unique() - .column(columnPermLevel, Sql.INT).notNull() + .column(Col.USERNAME, Sql.varchar(100)).notNull().unique() + .column(Col.SALT_PASSWORD_HASH, Sql.varchar(100)).notNull().unique() + .column(Col.PERMISSION_LEVEL, Sql.INT).notNull() .toString() ); } public void removeUser(String user) throws SQLException { - String sql = "DELETE FROM " + tableName + " WHERE (" + columnUser + "=?)"; + String sql = "DELETE FROM " + tableName + " WHERE (" + Col.USERNAME + "=?)"; execute(new ExecStatement(sql) { @Override @@ -62,6 +63,27 @@ public class SecurityTable extends Table { }); } + public WebUser getWebUser(String user) throws SQLException { + String sql = Select.all(tableName).where(Col.USERNAME + "=?").toString(); + + return query(new QueryStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, user); + } + + @Override + public WebUser processResults(ResultSet set) throws SQLException { + if (set.next()) { + String saltedPassHash = set.getString(Col.SALT_PASSWORD_HASH.get()); + int permissionLevel = set.getInt(Col.PERMISSION_LEVEL.get()); + return new WebUser(user, saltedPassHash, permissionLevel); + } + return null; + } + }); + } + public void addNewUser(WebUser info) throws SQLException { addNewUser(info.getName(), info.getSaltedPassHash(), info.getPermLevel()); } @@ -81,27 +103,6 @@ public class SecurityTable extends Table { return getWebUser(user) != null; } - public WebUser getWebUser(String user) throws SQLException { - String sql = Select.all(tableName).where(columnUser + "=?").toString(); - - return query(new QueryStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, user); - } - - @Override - public WebUser processResults(ResultSet set) throws SQLException { - if (set.next()) { - String saltedPassHash = set.getString(columnSaltedHash); - int permissionLevel = set.getInt(columnPermLevel); - return new WebUser(user, saltedPassHash, permissionLevel); - } - return null; - } - }); - } - public List getUsers() throws SQLException { String sql = Select.all(tableName).toString(); @@ -110,9 +111,9 @@ public class SecurityTable extends Table { public List processResults(ResultSet set) throws SQLException { List list = new ArrayList<>(); while (set.next()) { - String user = set.getString(columnUser); - String saltedPassHash = set.getString(columnSaltedHash); - int permissionLevel = set.getInt(columnPermLevel); + String user = set.getString(Col.USERNAME.get()); + String saltedPassHash = set.getString(Col.SALT_PASSWORD_HASH.get()); + int permissionLevel = set.getInt(Col.PERMISSION_LEVEL.get()); WebUser info = new WebUser(user, saltedPassHash, permissionLevel); list.add(info); } @@ -121,6 +122,27 @@ public class SecurityTable extends Table { }); } + public enum Col implements Column { + USERNAME("username"), + SALT_PASSWORD_HASH("salted_pass_hash"), + PERMISSION_LEVEL("permission_level"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } + public void addUsers(List users) throws SQLException { if (Verify.isEmpty(users)) { return; diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java index 2b9b8bfc7..93ddf6e92 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java @@ -21,20 +21,27 @@ import java.util.*; /** * Table for managing multiple server's data in the database. *

- * plan_servers contains columns: - *

    - *
  • id
  • - *
  • uuid
  • - *
  • name
  • - *
  • web_address
  • - *
  • is_installed
  • - *
- * Columns refer to Server Information. + * Table Name: plan_servers + *

+ * For contained columns {@see Col} * * @author Rsl1122 + * @see Server */ public class ServerTable extends Table { + public ServerTable(SQLDB db) { + super("plan_servers", db); + statementSelectServerID = "(" + Select.from(tableName, tableName + "." + Col.SERVER_ID).where(tableName + "." + Col.SERVER_UUID + "=?").toString() + " LIMIT 1)"; + statementSelectServerNameID = "(" + Select.from(tableName, tableName + "." + Col.NAME).where(tableName + "." + Col.SERVER_ID + "=?").toString() + " LIMIT 1)"; + insertStatement = Insert.values(tableName, + Col.SERVER_UUID, + Col.NAME, + Col.WEBSERVER_ADDRESS, + Col.INSTALLED, + Col.MAX_PLAYERS); + } + @Deprecated public String getColumnID() { return Col.SERVER_ID.get(); @@ -42,62 +49,36 @@ public class ServerTable extends Table { public final String statementSelectServerID; public final String statementSelectServerNameID; - private static final String columnServerID = "id"; - private static final String columnServerUUID = "uuid"; - private static final String columnServerName = "name"; - private static final String columnWebserverAddress = "web_address"; - private static final String columnInstalled = "is_installed"; - private static final String columnMaxPlayers = "max_players"; private String insertStatement; - public ServerTable(SQLDB db) { - super("plan_servers", db); - statementSelectServerID = "(" + Select.from(tableName, tableName + "." + columnServerID).where(tableName + "." + columnServerUUID + "=?").toString() + " LIMIT 1)"; - statementSelectServerNameID = "(" + Select.from(tableName, tableName + "." + columnServerName).where(tableName + "." + columnServerID + "=?").toString() + " LIMIT 1)"; - insertStatement = Insert.values(tableName, - columnServerUUID, - columnServerName, - columnWebserverAddress, - columnInstalled, - columnMaxPlayers); - } - @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnServerID) - .column(columnServerUUID, Sql.varchar(36)).notNull().unique() - .column(columnServerName, Sql.varchar(100)) - .column(columnWebserverAddress, Sql.varchar(100)) - .column(columnInstalled, Sql.BOOL).notNull().defaultValue(false) - .column(columnMaxPlayers, Sql.INT).notNull().defaultValue("-1") - .primaryKey(usingMySQL, columnServerID) + .primaryKeyIDColumn(usingMySQL, Col.SERVER_ID) + .column(Col.SERVER_UUID, Sql.varchar(36)).notNull().unique() + .column(Col.NAME, Sql.varchar(100)) + .column(Col.WEBSERVER_ADDRESS, Sql.varchar(100)) + .column(Col.INSTALLED, Sql.BOOL).notNull().defaultValue(false) + .column(Col.MAX_PLAYERS, Sql.INT).notNull().defaultValue("-1") + .primaryKey(usingMySQL, Col.SERVER_ID) .toString() ); } public void alterTableV11() { if (usingMySQL) { - executeUnsafe("ALTER TABLE " + tableName + " MODIFY " + columnMaxPlayers + " INTEGER NOT NULL DEFAULT -1"); - } - } - - public void saveCurrentServerInfo(Server info) throws SQLException { - if (getServerID(info.getUuid()).isPresent()) { - updateServerInfo(info); - } else { - saveNewServerInfo(info); + executeUnsafe("ALTER TABLE " + tableName + " MODIFY " + Col.MAX_PLAYERS + " INTEGER NOT NULL DEFAULT -1"); } } private void updateServerInfo(Server info) throws SQLException { String sql = Update.values(tableName, - columnServerUUID, - columnServerName, - columnWebserverAddress, - columnInstalled, - columnMaxPlayers) - .where(columnServerID + "=?") + Col.SERVER_UUID, + Col.NAME, + Col.WEBSERVER_ADDRESS, + Col.INSTALLED, + Col.MAX_PLAYERS) + .where(Col.SERVER_ID + "=?") .toString(); execute(new ExecStatement(sql) { @@ -113,6 +94,44 @@ public class ServerTable extends Table { }); } + public void saveCurrentServerInfo(Server info) throws SQLException { + if (getServerID(info.getUuid()).isPresent()) { + updateServerInfo(info); + } else { + saveNewServerInfo(info); + } + } + + /** + * Returns server ID for a matching UUID + * + * @param serverUUID UUID of the server. + * @return ID or or empty optional. + * @throws SQLException DB Error + */ + public Optional getServerID(UUID serverUUID) throws SQLException { + String sql = Select.from(tableName, + Col.SERVER_ID) + .where(Col.SERVER_UUID + "=?") + .toString(); + + return query(new QueryStatement>(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, serverUUID.toString()); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + return Optional.of(set.getInt(Col.SERVER_ID.get())); + } else { + return Optional.empty(); + } + } + }); + } + /** * Inserts new row for a server into the table. * @@ -138,36 +157,6 @@ public class ServerTable extends Table { }); } - /** - * Returns server ID for a matching UUID - * - * @param serverUUID UUID of the server. - * @return ID or or empty optional. - * @throws SQLException DB Error - */ - public Optional getServerID(UUID serverUUID) throws SQLException { - String sql = Select.from(tableName, - columnServerID) - .where(columnServerUUID + "=?") - .toString(); - - return query(new QueryStatement>(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, serverUUID.toString()); - } - - @Override - public Optional processResults(ResultSet set) throws SQLException { - if (set.next()) { - return Optional.of(set.getInt(columnServerID)); - } else { - return Optional.empty(); - } - } - }); - } - /** * Returns server Name for a matching UUID * @@ -177,8 +166,8 @@ public class ServerTable extends Table { */ public Optional getServerName(UUID serverUUID) throws SQLException { String sql = Select.from(tableName, - columnServerName) - .where(columnServerUUID + "=?") + Col.NAME) + .where(Col.SERVER_UUID + "=?") .toString(); return query(new QueryStatement>(sql) { @@ -190,7 +179,7 @@ public class ServerTable extends Table { @Override public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { - return Optional.of(set.getString(columnServerName)); + return Optional.of(set.getString(Col.NAME.get())); } else { return Optional.empty(); } @@ -200,7 +189,7 @@ public class ServerTable extends Table { public Map getServerNamesByID() throws SQLException { String sql = Select.from(tableName, - columnServerID, columnServerName) + Col.SERVER_ID, Col.NAME) .toString(); return query(new QueryAllStatement>(sql) { @@ -208,8 +197,8 @@ public class ServerTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map names = new HashMap<>(); while (set.next()) { - int id = set.getInt(columnServerID); - names.put(id, set.getString(columnServerName)); + int id = set.getInt(Col.SERVER_ID.get()); + names.put(id, set.getString(Col.NAME.get())); } return names; } @@ -218,7 +207,7 @@ public class ServerTable extends Table { public Map getServerNames() throws SQLException { String sql = Select.from(tableName, - columnServerUUID, columnServerName) + Col.SERVER_UUID, Col.NAME) .toString(); return query(new QueryAllStatement>(sql) { @@ -226,8 +215,8 @@ public class ServerTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map names = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(columnServerUUID)); - names.put(serverUUID, set.getString(columnServerName)); + UUID serverUUID = UUID.fromString(set.getString(Col.SERVER_UUID.get())); + names.put(serverUUID, set.getString(Col.NAME.get())); } return names; } @@ -236,7 +225,7 @@ public class ServerTable extends Table { public Map getServerUUIDsByID() throws SQLException { String sql = Select.from(tableName, - columnServerID, columnServerUUID) + Col.SERVER_ID, Col.SERVER_UUID) .toString(); return query(new QueryAllStatement>(sql) { @@ -244,8 +233,8 @@ public class ServerTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map uuids = new HashMap<>(); while (set.next()) { - int id = set.getInt(columnServerID); - uuids.put(id, UUID.fromString(set.getString(columnServerUUID))); + int id = set.getInt(Col.SERVER_ID.get()); + uuids.put(id, UUID.fromString(set.getString(Col.SERVER_UUID.get()))); } return uuids; } @@ -260,7 +249,7 @@ public class ServerTable extends Table { */ public Optional getBungeeInfo() throws SQLException { String sql = Select.from(tableName, "*") - .where(columnServerName + "=?") + .where(Col.NAME + "=?") .toString(); return query(new QueryStatement>(sql) { @@ -273,11 +262,11 @@ public class ServerTable extends Table { public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { return Optional.of(new Server( - set.getInt(columnServerID), - UUID.fromString(set.getString(columnServerUUID)), - set.getString(columnServerName), - set.getString(columnWebserverAddress), - set.getInt(columnMaxPlayers))); + set.getInt(Col.SERVER_ID.get()), + UUID.fromString(set.getString(Col.SERVER_UUID.get())), + set.getString(Col.NAME.get()), + set.getString(Col.WEBSERVER_ADDRESS.get()), + set.getInt(Col.MAX_PLAYERS.get()))); } else { return Optional.empty(); } @@ -287,7 +276,7 @@ public class ServerTable extends Table { public Map getBukkitServers() throws SQLException { String sql = Select.from(tableName, "*") - .where(columnServerName + "!=?") + .where(Col.NAME + "!=?") .toString(); return query(new QueryStatement>(sql, 100) { @@ -300,48 +289,40 @@ public class ServerTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map servers = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(columnServerUUID)); + UUID serverUUID = UUID.fromString(set.getString(Col.SERVER_UUID.get())); servers.put(serverUUID, new Server( - set.getInt(columnServerID), + set.getInt(Col.SERVER_ID.get()), serverUUID, - set.getString(columnServerName), - set.getString(columnWebserverAddress), - set.getInt(columnMaxPlayers))); + set.getString(Col.NAME.get()), + set.getString(Col.WEBSERVER_ADDRESS.get()), + set.getInt(Col.MAX_PLAYERS.get()))); } return servers; } }); } + public List getServerUUIDs() throws SQLException { + String sql = Select.from(tableName, Col.SERVER_UUID) + .toString(); + + return query(new QueryAllStatement>(sql) { + @Override + public List processResults(ResultSet set) throws SQLException { + List uuids = new ArrayList<>(); + while (set.next()) { + uuids.add(UUID.fromString(set.getString(Col.SERVER_UUID.get()))); + } + return uuids; + } + }); + } + @Deprecated public String getColumnUUID() { return Col.SERVER_UUID.get(); } - public enum Col implements Column { - SERVER_ID("id"), - SERVER_UUID("uuid"), - NAME("name"), - WEBSERVER_ADDRESS("web_address"), - INSTALLED("is_installed"), - MAX_PLAYERS("max_players"); - - private final String column; - - Col(String column) { - this.column = column; - } - - public String get() { - return toString(); - } - - @Override - public String toString() { - return column; - } - } - public void insertAllServers(List allServer) throws SQLException { if (Verify.isEmpty(allServer)) { return; @@ -370,26 +351,10 @@ public class ServerTable extends Table { }); } - public List getServerUUIDs() throws SQLException { - String sql = Select.from(tableName, columnServerUUID) - .toString(); - - return query(new QueryAllStatement>(sql) { - @Override - public List processResults(ResultSet set) throws SQLException { - List uuids = new ArrayList<>(); - while (set.next()) { - uuids.add(UUID.fromString(set.getString(columnServerUUID))); - } - return uuids; - } - }); - } - public Optional getServerUUID(String serverName) throws SQLException { String sql = Select.from(tableName, - columnServerUUID) - .where(columnServerName + "=?") + Col.SERVER_UUID) + .where(Col.NAME + "=?") .toString(); return query(new QueryStatement>(sql) { @@ -401,7 +366,7 @@ public class ServerTable extends Table { @Override public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { - return Optional.of(UUID.fromString(set.getString(columnServerUUID))); + return Optional.of(UUID.fromString(set.getString(Col.SERVER_UUID.get()))); } else { return Optional.empty(); } @@ -411,7 +376,7 @@ public class ServerTable extends Table { public Optional getServerInfo(UUID serverUUID) throws SQLException { String sql = Select.from(tableName, "*") - .where(columnServerUUID + "=?") + .where(Col.SERVER_UUID + "=?") .toString(); return query(new QueryStatement>(sql) { @@ -424,11 +389,11 @@ public class ServerTable extends Table { public Optional processResults(ResultSet set) throws SQLException { if (set.next()) { return Optional.of(new Server( - set.getInt(columnServerID), - UUID.fromString(set.getString(columnServerUUID)), - set.getString(columnServerName), - set.getString(columnWebserverAddress), - set.getInt(columnMaxPlayers))); + set.getInt(Col.SERVER_ID.get()), + UUID.fromString(set.getString(Col.SERVER_UUID.get())), + set.getString(Col.NAME.get()), + set.getString(Col.WEBSERVER_ADDRESS.get()), + set.getInt(Col.MAX_PLAYERS.get()))); } return Optional.empty(); } @@ -436,7 +401,7 @@ public class ServerTable extends Table { } public int getMaxPlayers() throws SQLException { - String sql = "SELECT SUM(" + columnMaxPlayers + ") AS max FROM " + tableName; + String sql = "SELECT SUM(" + Col.MAX_PLAYERS + ") AS max FROM " + tableName; return query(new QueryAllStatement(sql) { @Override @@ -448,4 +413,28 @@ public class ServerTable extends Table { } }); } + + public enum Col implements Column { + SERVER_ID("id"), + SERVER_UUID("uuid"), + NAME("name"), + WEBSERVER_ADDRESS("web_address"), + INSTALLED("is_installed"), + MAX_PLAYERS("max_players"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java index 505b7fb1b..8ab80befa 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java @@ -6,6 +6,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Select; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; @@ -26,49 +27,73 @@ import java.util.stream.Collectors; */ public class SessionsTable extends UserIDTable { - private static final String columnID = "id"; - private static final String columnSessionStart = "session_start"; - private static final String columnSessionEnd = "session_end"; - private static final String columnServerID = "server_id"; - private static final String columnMobKills = "mob_kills"; - private static final String columnDeaths = "deaths"; - - private final ServerTable serverTable; - private String insertStatement; - public SessionsTable(SQLDB db) { super("plan_sessions", db); serverTable = db.getServerTable(); insertStatement = "INSERT INTO " + tableName + " (" - + columnUserID + ", " - + columnSessionStart + ", " - + columnSessionEnd + ", " - + columnDeaths + ", " - + columnMobKills + ", " - + columnServerID + + Col.USER_ID + ", " + + Col.SESSION_START + ", " + + Col.SESSION_END + ", " + + Col.DEATHS + ", " + + Col.MOB_KILLS + ", " + + Col.SERVER_ID + ") VALUES (" + usersTable.statementSelectID + ", " + "?, ?, ?, ?, " + serverTable.statementSelectServerID + ")"; } + private final ServerTable serverTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(this.tableName) - .primaryKeyIDColumn(usingMySQL, columnID) - .column(columnUserID, Sql.INT).notNull() - .column(columnServerID, Sql.INT).notNull() - .column(columnSessionStart, Sql.LONG).notNull() - .column(columnSessionEnd, Sql.LONG).notNull() - .column(columnMobKills, Sql.INT).notNull() - .column(columnDeaths, Sql.INT).notNull() - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) - .primaryKey(usingMySQL, columnID) + .primaryKeyIDColumn(usingMySQL, Col.ID) + .column(Col.USER_ID, Sql.INT).notNull() + .column(Col.SERVER_ID, Sql.INT).notNull() + .column(Col.SESSION_START, Sql.LONG).notNull() + .column(Col.SESSION_END, Sql.LONG).notNull() + .column(Col.MOB_KILLS, Sql.INT).notNull() + .column(Col.DEATHS, Sql.INT).notNull() + .foreignKey(Col.USER_ID, usersTable.getTableName(), UsersTable.Col.ID) + .foreignKey(Col.SERVER_ID, serverTable.getTableName(), ServerTable.Col.SERVER_ID) + .primaryKey(usingMySQL, Col.ID) .toString() ); } + /** + * Used to get the sessionID of a newly inserted row. + * + * @param uuid UUID of the player + * @param session session inserted. + * @return ID of the inserted session or -1 if session has not been inserted. + */ + private int getSessionID(UUID uuid, Session session) throws SQLException { + String sql = "SELECT " + Col.ID + " FROM " + tableName + + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID + + " AND " + Col.SESSION_START + "=?" + + " AND " + Col.SESSION_END + "=?"; + + return query(new QueryStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + statement.setLong(2, session.getSessionStart()); + statement.setLong(3, session.getSessionEnd()); + } + + @Override + public Integer processResults(ResultSet set) throws SQLException { + if (set.next()) { + return set.getInt(Col.ID.get()); + } + return -1; + } + }); + } + /** * Used to save a session, with all it's information into the database. *

@@ -112,37 +137,6 @@ public class SessionsTable extends UserIDTable { }); } - /** - * Used to get the sessionID of a newly inserted row. - * - * @param uuid UUID of the player - * @param session session inserted. - * @return ID of the inserted session or -1 if session has not been inserted. - */ - private int getSessionID(UUID uuid, Session session) throws SQLException { - String sql = "SELECT " + columnID + " FROM " + tableName + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID + - " AND " + columnSessionStart + "=?" + - " AND " + columnSessionEnd + "=?"; - - return query(new QueryStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - statement.setLong(2, session.getSessionStart()); - statement.setLong(3, session.getSessionEnd()); - } - - @Override - public Integer processResults(ResultSet set) throws SQLException { - if (set.next()) { - return set.getInt(columnID); - } - return -1; - } - }); - } - /** * Returns a Map containing Lists of sessions, key as ServerName. *

@@ -156,7 +150,7 @@ public class SessionsTable extends UserIDTable { private Map> getSessionInformation(UUID uuid) throws SQLException { Map serverUUIDs = serverTable.getServerUUIDsByID(); String sql = Select.from(tableName, "*") - .where(columnUserID + "=" + usersTable.statementSelectID) + .where(Col.USER_ID + "=" + usersTable.statementSelectID) .toString(); return query(new QueryStatement>>(sql, 10000) { @@ -169,17 +163,17 @@ public class SessionsTable extends UserIDTable { public Map> processResults(ResultSet set) throws SQLException { Map> sessionsByServer = new HashMap<>(); while (set.next()) { - int id = set.getInt(columnID); - long start = set.getLong(columnSessionStart); - long end = set.getLong(columnSessionEnd); - UUID serverUUID = serverUUIDs.get(set.getInt(columnServerID)); + int id = set.getInt(Col.ID.get()); + long start = set.getLong(Col.SESSION_START.get()); + long end = set.getLong(Col.SESSION_END.get()); + UUID serverUUID = serverUUIDs.get(set.getInt(Col.SERVER_ID.get())); if (serverUUID == null) { throw new IllegalStateException("Server not present"); } - int deaths = set.getInt(columnDeaths); - int mobKills = set.getInt(columnMobKills); + int deaths = set.getInt(Col.DEATHS.get()); + int mobKills = set.getInt(Col.MOB_KILLS.get()); List sessions = sessionsByServer.getOrDefault(serverUUID, new ArrayList<>()); sessions.add(new Session(id, start, end, mobKills, deaths)); sessionsByServer.put(serverUUID, sessions); @@ -189,6 +183,41 @@ public class SessionsTable extends UserIDTable { }); } + /** + * Used to get Playtime after Epoch ms on a server. + * + * @param uuid UUID of the player. + * @param serverUUID UUID of the server. @see ServerTable + * @param afterDate Epoch ms (Playtime after this date is calculated) + * @return Milliseconds played after given epoch ms on the server. 0 if player or server not found. + * @throws SQLException DB Error + */ + public long getPlaytime(UUID uuid, UUID serverUUID, long afterDate) throws SQLException { + String sql = "SELECT" + + " (SUM(" + Col.SESSION_END + ") - SUM(" + Col.SESSION_START + ")) as playtime" + + " FROM " + tableName + + " WHERE " + Col.SESSION_START + ">?" + + " AND " + Col.USER_ID + "=" + usersTable.statementSelectID + + " AND " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; + + return query(new QueryStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setLong(1, afterDate); + statement.setString(2, uuid.toString()); + statement.setString(3, serverUUID.toString()); + } + + @Override + public Long processResults(ResultSet set) throws SQLException { + if (set.next()) { + return set.getLong("playtime"); + } + return 0L; + } + }); + } + public Map> getSessions(UUID uuid) throws SQLException { Map> sessions = getSessionInformation(uuid); Map allSessions = sessions.values().stream().flatMap(Collection::stream).collect(Collectors.toMap(Session::getSessionID, Function.identity())); @@ -234,36 +263,38 @@ public class SessionsTable extends UserIDTable { } /** - * Used to get Playtime after Epoch ms on a server. + * Used to get Playtimes after a date in a Map, sorted by ServerNames. * - * @param uuid UUID of the player. - * @param serverUUID UUID of the server. @see ServerTable - * @param afterDate Epoch ms (Playtime after this date is calculated) - * @return Milliseconds played after given epoch ms on the server. 0 if player or server not found. + * @param uuid UUID of the Player. + * @param afterDate Epoch ms (Playtime after this date is calculated) + * @return key - ServerName, value ms played * @throws SQLException DB Error */ - public long getPlaytime(UUID uuid, UUID serverUUID, long afterDate) throws SQLException { - String sql = "SELECT" + - " (SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime" + + public Map getPlaytimeByServer(UUID uuid, long afterDate) throws SQLException { + Map serverNames = serverTable.getServerNamesByID(); + String sql = "SELECT " + + "(SUM(" + Col.SESSION_END + ") - SUM(" + Col.SESSION_START + ")) as playtime, " + + Col.SERVER_ID + " FROM " + tableName + - " WHERE " + columnSessionStart + ">?" + - " AND " + columnUserID + "=" + usersTable.statementSelectID + - " AND " + columnServerID + "=" + serverTable.statementSelectServerID; - - return query(new QueryStatement(sql) { + " WHERE " + Col.SESSION_START + ">?" + + " AND " + Col.USER_ID + "=" + usersTable.statementSelectID + + " GROUP BY " + Col.SERVER_ID; + return query(new QueryStatement>(sql, 100) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setLong(1, afterDate); statement.setString(2, uuid.toString()); - statement.setString(3, serverUUID.toString()); } @Override - public Long processResults(ResultSet set) throws SQLException { - if (set.next()) { - return set.getLong("playtime"); + public Map processResults(ResultSet set) throws SQLException { + Map playtimes = new HashMap<>(); + while (set.next()) { + String serverName = serverNames.get(set.getInt(Col.SERVER_ID.get())); + long playtime = set.getLong("playtime"); + playtimes.put(serverName, playtime); } - return 0L; + return playtimes; } }); } @@ -280,38 +311,33 @@ public class SessionsTable extends UserIDTable { } /** - * Used to get Playtimes after a date in a Map, sorted by ServerNames. + * Used to get Playtime after a date of a Server. * - * @param uuid UUID of the Player. - * @param afterDate Epoch ms (Playtime after this date is calculated) - * @return key - ServerName, value ms played + * @param serverUUID UUID of the server. + * @param afterDate Epoch ms (Playtime after this date is calculated) + * @return Milliseconds played after given epoch ms on the server. 0 if server not found. * @throws SQLException DB Error */ - public Map getPlaytimeByServer(UUID uuid, long afterDate) throws SQLException { - Map serverNames = serverTable.getServerNamesByID(); - String sql = "SELECT " + - "(SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime, " + - columnServerID + + public long getPlaytimeOfServer(UUID serverUUID, long afterDate) throws SQLException { + String sql = "SELECT" + + " (SUM(" + Col.SESSION_END + ") - SUM(" + Col.SESSION_START + ")) as playtime" + " FROM " + tableName + - " WHERE " + columnSessionStart + ">?" + - " AND " + columnUserID + "=" + usersTable.statementSelectID + - " GROUP BY " + columnServerID; - return query(new QueryStatement>(sql, 100) { + " WHERE " + Col.SESSION_START + ">?" + + " AND " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; + + return query(new QueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setLong(1, afterDate); - statement.setString(2, uuid.toString()); + statement.setString(2, serverUUID.toString()); } @Override - public Map processResults(ResultSet set) throws SQLException { - Map playtimes = new HashMap<>(); - while (set.next()) { - String serverName = serverNames.get(set.getInt(columnServerID)); - long playtime = set.getLong("playtime"); - playtimes.put(serverName, playtime); + public Long processResults(ResultSet set) throws SQLException { + if (set.next()) { + return set.getLong("playtime"); } - return playtimes; + return 0L; } }); } @@ -349,33 +375,36 @@ public class SessionsTable extends UserIDTable { } /** - * Used to get Playtime after a date of a Server. + * Used to get total Session count of a Player on a server after a given epoch ms. * + * @param uuid UUID of the player. * @param serverUUID UUID of the server. - * @param afterDate Epoch ms (Playtime after this date is calculated) - * @return Milliseconds played after given epoch ms on the server. 0 if server not found. + * @param afterDate Epoch ms (Session count after this date is calculated) + * @return How many sessions player has. 0 if player or server not found. * @throws SQLException DB Error */ - public long getPlaytimeOfServer(UUID serverUUID, long afterDate) throws SQLException { + public int getSessionCount(UUID uuid, UUID serverUUID, long afterDate) throws SQLException { String sql = "SELECT" + - " (SUM(" + columnSessionEnd + ") - SUM(" + columnSessionStart + ")) as playtime" + + " COUNT(*) as logintimes" + " FROM " + tableName + - " WHERE " + columnSessionStart + ">?" + - " AND " + columnServerID + "=" + serverTable.statementSelectServerID; + " WHERE (" + Col.SESSION_START + " >= ?)" + + " AND " + Col.USER_ID + "=" + usersTable.statementSelectID + + " AND " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; - return query(new QueryStatement(sql) { + return query(new QueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setLong(1, afterDate); - statement.setString(2, serverUUID.toString()); + statement.setString(2, uuid.toString()); + statement.setString(3, serverUUID.toString()); } @Override - public Long processResults(ResultSet set) throws SQLException { + public Integer processResults(ResultSet set) throws SQLException { if (set.next()) { - return set.getLong("playtime"); + return set.getInt("logintimes"); } - return 0L; + return 0; } }); } @@ -415,62 +444,24 @@ public class SessionsTable extends UserIDTable { return getSessionCount(uuid, serverUUID, 0L); } - /** - * Used to get total Session count of a Player on a server after a given epoch ms. - * - * @param uuid UUID of the player. - * @param serverUUID UUID of the server. - * @param afterDate Epoch ms (Session count after this date is calculated) - * @return How many sessions player has. 0 if player or server not found. - * @throws SQLException DB Error - */ - public int getSessionCount(UUID uuid, UUID serverUUID, long afterDate) throws SQLException { - String sql = "SELECT" + - " COUNT(*) as logintimes" + - " FROM " + tableName + - " WHERE (" + columnSessionStart + " >= ?)" + - " AND " + columnUserID + "=" + usersTable.statementSelectID + - " AND " + columnServerID + "=" + serverTable.statementSelectServerID; - - return query(new QueryStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setLong(1, afterDate); - statement.setString(2, uuid.toString()); - statement.setString(3, serverUUID.toString()); - } - - @Override - public Integer processResults(ResultSet set) throws SQLException { - if (set.next()) { - return set.getInt("logintimes"); - } - return 0; - } - }); - } - + @Deprecated public String getColumnID() { - return columnID; - } - - public Map> getSessionInfoOfServer() throws SQLException { - return getSessionInfoOfServer(ServerInfo.getServerUUID()); + return Col.ID.get(); } public Map> getSessionInfoOfServer(UUID serverUUID) throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; String sql = "SELECT " + - tableName + "." + columnID + ", " + - columnSessionStart + ", " + - columnSessionEnd + ", " + - columnDeaths + ", " + - columnMobKills + ", " + + tableName + "." + Col.ID + ", " + + Col.SESSION_START + ", " + + Col.SESSION_END + ", " + + Col.DEATHS + ", " + + Col.MOB_KILLS + ", " + usersUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " WHERE " + columnServerID + "=" + serverTable.statementSelectServerID; + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " WHERE " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; return query(new QueryStatement>>(sql, 5000) { @Override @@ -483,13 +474,13 @@ public class SessionsTable extends UserIDTable { Map> sessionsByUser = new HashMap<>(); while (set.next()) { UUID uuid = UUID.fromString(set.getString("uuid")); - long start = set.getLong(columnSessionStart); - long end = set.getLong(columnSessionEnd); + long start = set.getLong(Col.SESSION_START.get()); + long end = set.getLong(Col.SESSION_END.get()); - int deaths = set.getInt(columnDeaths); - int mobKills = set.getInt(columnMobKills); + int deaths = set.getInt(Col.DEATHS.get()); + int mobKills = set.getInt(Col.MOB_KILLS.get()); List sessions = sessionsByUser.getOrDefault(uuid, new ArrayList<>()); - sessions.add(new Session(set.getInt(columnID), start, end, mobKills, deaths)); + sessions.add(new Session(set.getInt(Col.ID.get()), start, end, mobKills, deaths)); sessionsByUser.put(uuid, sessions); } return sessionsByUser; @@ -497,12 +488,16 @@ public class SessionsTable extends UserIDTable { }); } + public Map> getSessionInfoOfServer() throws SQLException { + return getSessionInfoOfServer(ServerInfo.getServerUUID()); + } + // TODO Write tests for this method public long getLastSeen(UUID uuid) throws SQLException { String sql = "SELECT" + - " MAX(" + columnSessionEnd + ") as last_seen" + + " MAX(" + Col.SESSION_END + ") as last_seen" + " FROM " + tableName + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID; + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID; return query(new QueryStatement(sql) { @Override @@ -522,13 +517,13 @@ public class SessionsTable extends UserIDTable { // TODO Write tests for this method public Map getLastSeenForAllPlayers() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; String sql = "SELECT" + - " MAX(" + columnSessionEnd + ") as last_seen, " + + " MAX(" + Col.SESSION_END + ") as last_seen, " + usersUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + " GROUP BY uuid"; return query(new QueryAllStatement>(sql, 20000) { @@ -550,13 +545,13 @@ public class SessionsTable extends UserIDTable { Map serverUUIDsByID = serverTable.getServerUUIDsByID(); String sql = "SELECT " + - columnID + ", " + - columnUserID + ", " + - columnServerID + ", " + - columnSessionStart + ", " + - columnSessionEnd + ", " + - columnDeaths + ", " + - columnMobKills + + Col.ID + ", " + + Col.USER_ID + ", " + + Col.SERVER_ID + ", " + + Col.SESSION_START + ", " + + Col.SESSION_END + ", " + + Col.DEATHS + ", " + + Col.MOB_KILLS + " FROM " + tableName; return query(new QueryAllStatement>>>(sql, 20000) { @@ -564,18 +559,18 @@ public class SessionsTable extends UserIDTable { public Map>> processResults(ResultSet set) throws SQLException { Map>> map = new HashMap<>(); while (set.next()) { - UUID serverUUID = serverUUIDsByID.get(set.getInt(columnServerID)); - UUID uuid = uuidsByID.get(set.getInt(columnUserID)); + UUID serverUUID = serverUUIDsByID.get(set.getInt(Col.SERVER_ID.get())); + UUID uuid = uuidsByID.get(set.getInt(Col.USER_ID.get())); Map> sessionsByUser = map.getOrDefault(serverUUID, new HashMap<>()); List sessions = sessionsByUser.getOrDefault(uuid, new ArrayList<>()); - long start = set.getLong(columnSessionStart); - long end = set.getLong(columnSessionEnd); + long start = set.getLong(Col.SESSION_START.get()); + long end = set.getLong(Col.SESSION_END.get()); - int deaths = set.getInt(columnDeaths); - int mobKills = set.getInt(columnMobKills); - int id = set.getInt(columnID); + int deaths = set.getInt(Col.DEATHS.get()); + int mobKills = set.getInt(Col.MOB_KILLS.get()); + int id = set.getInt(Col.ID.get()); Session session = new Session(id, start, end, mobKills, deaths); sessions.add(session); @@ -592,6 +587,55 @@ public class SessionsTable extends UserIDTable { }); } + public Map>> getSessionInLastMonth() throws SQLException { + Map uuidsByID = usersTable.getUUIDsByID(); + Map serverUUIDsByID = serverTable.getServerUUIDsByID(); + + String sql = "SELECT " + + Col.ID + ", " + + Col.USER_ID + ", " + + Col.SERVER_ID + ", " + + Col.SESSION_START + ", " + + Col.SESSION_END + ", " + + Col.DEATHS + ", " + + Col.MOB_KILLS + + " FROM " + tableName + + " WHERE " + Col.SESSION_START + ">?"; + + return query(new QueryStatement>>>(sql, 20000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setLong(1, MiscUtils.getTime() - TimeAmount.MONTH.ms()); + } + + @Override + public Map>> processResults(ResultSet set) throws SQLException { + Map>> map = new HashMap<>(); + while (set.next()) { + UUID serverUUID = serverUUIDsByID.get(set.getInt(Col.SERVER_ID.get())); + UUID uuid = uuidsByID.get(set.getInt(Col.USER_ID.get())); + + Map> sessionsByUser = map.getOrDefault(serverUUID, new HashMap<>()); + List sessions = sessionsByUser.getOrDefault(uuid, new ArrayList<>()); + + long start = set.getLong(Col.SESSION_START.get()); + long end = set.getLong(Col.SESSION_END.get()); + + int deaths = set.getInt(Col.DEATHS.get()); + int mobKills = set.getInt(Col.MOB_KILLS.get()); + int id = set.getInt(Col.ID.get()); + + Session session = new Session(id, start, end, mobKills, deaths); + sessions.add(session); + + sessionsByUser.put(uuid, sessions); + map.put(serverUUID, sessionsByUser); + } + return map; + } + }); + } + public void insertSessions(Map>> allSessions, boolean saveKillsAndWorldTimes) throws SQLException { if (Verify.isEmpty(allSessions)) { return; @@ -674,56 +718,28 @@ public class SessionsTable extends UserIDTable { } } - String getcolumnServerID() { - return columnServerID; - } + public enum Col implements Column { + USER_ID(UserIDTable.Col.USER_ID.get()), + ID("id"), + SERVER_ID("server_id"), + SESSION_START("session_start"), + SESSION_END("session_end"), + MOB_KILLS("mob_kills"), + DEATHS("deaths"); - public Map>> getSessionInLastMonth() throws SQLException { - Map uuidsByID = usersTable.getUUIDsByID(); - Map serverUUIDsByID = serverTable.getServerUUIDsByID(); + private final String column; - String sql = "SELECT " + - columnID + ", " + - columnUserID + ", " + - columnServerID + ", " + - columnSessionStart + ", " + - columnSessionEnd + ", " + - columnDeaths + ", " + - columnMobKills + - " FROM " + tableName + - " WHERE " + columnSessionStart + ">?"; + Col(String column) { + this.column = column; + } - return query(new QueryStatement>>>(sql, 20000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setLong(1, MiscUtils.getTime() - TimeAmount.MONTH.ms()); - } + public String get() { + return toString(); + } - @Override - public Map>> processResults(ResultSet set) throws SQLException { - Map>> map = new HashMap<>(); - while (set.next()) { - UUID serverUUID = serverUUIDsByID.get(set.getInt(columnServerID)); - UUID uuid = uuidsByID.get(set.getInt(columnUserID)); - - Map> sessionsByUser = map.getOrDefault(serverUUID, new HashMap<>()); - List sessions = sessionsByUser.getOrDefault(uuid, new ArrayList<>()); - - long start = set.getLong(columnSessionStart); - long end = set.getLong(columnSessionEnd); - - int deaths = set.getInt(columnDeaths); - int mobKills = set.getInt(columnMobKills); - int id = set.getInt(columnID); - - Session session = new Session(id, start, end, mobKills, deaths); - sessions.add(session); - - sessionsByUser.put(uuid, sessions); - map.put(serverUUID, sessionsByUser); - } - return map; - } - }); + @Override + public String toString() { + return column; + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java index 240e56e55..61b0ccd36 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java @@ -7,6 +7,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Select; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; @@ -22,68 +23,55 @@ import java.sql.SQLException; import java.util.*; /** - * Class representing database table plan_tps + * Table that is in charge of storing TPS, Players Online & Performance data. + *

+ * Table Name: plan_tps + *

+ * For contained columns {@see Col} * * @author Rsl1122 - * @since 3.5.0 */ public class TPSTable extends Table { - private static final String columnServerID = "server_id"; - private static final String columnDate = "date"; - private static final String columnTPS = "tps"; - private static final String columnPlayers = "players_online"; - private static final String columnCPUUsage = "cpu_usage"; - private static final String columnRAMUsage = "ram_usage"; - private static final String columnEntities = "entities"; - private static final String columnChunksLoaded = "chunks_loaded"; - - private final ServerTable serverTable; - private String insertStatement; - public TPSTable(SQLDB db) { super("plan_tps", db); serverTable = db.getServerTable(); insertStatement = "INSERT INTO " + tableName + " (" - + columnServerID + ", " - + columnDate + ", " - + columnTPS + ", " - + columnPlayers + ", " - + columnCPUUsage + ", " - + columnRAMUsage + ", " - + columnEntities + ", " - + columnChunksLoaded + + Col.SERVER_ID + ", " + + Col.DATE + ", " + + Col.TPS + ", " + + Col.PLAYERS_ONLINE + ", " + + Col.CPU_USAGE + ", " + + Col.RAM_USAGE + ", " + + Col.ENTITIES + ", " + + Col.CHUNKS + ") VALUES (" + serverTable.statementSelectServerID + ", " + "?, ?, ?, ?, ?, ?, ?)"; } + private final ServerTable serverTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnServerID, Sql.INT).notNull() - .column(columnDate, Sql.LONG).notNull() - .column(columnTPS, Sql.DOUBLE).notNull() - .column(columnPlayers, Sql.INT).notNull() - .column(columnCPUUsage, Sql.DOUBLE).notNull() - .column(columnRAMUsage, Sql.LONG).notNull() - .column(columnEntities, Sql.INT).notNull() - .column(columnChunksLoaded, Sql.INT).notNull() - .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) + .column(Col.SERVER_ID, Sql.INT).notNull() + .column(Col.DATE, Sql.LONG).notNull() + .column(Col.TPS, Sql.DOUBLE).notNull() + .column(Col.PLAYERS_ONLINE, Sql.INT).notNull() + .column(Col.CPU_USAGE, Sql.DOUBLE).notNull() + .column(Col.RAM_USAGE, Sql.LONG).notNull() + .column(Col.ENTITIES, Sql.INT).notNull() + .column(Col.CHUNKS, Sql.INT).notNull() + .foreignKey(Col.SERVER_ID, serverTable.getTableName(), ServerTable.Col.SERVER_ID) .toString() ); } - /** - * @return @throws SQLException - */ - public List getTPSData() throws SQLException { - return getTPSData(ServerInfo.getServerUUID()); - } - public List getTPSData(UUID serverUUID) throws SQLException { String sql = Select.all(tableName) - .where(columnServerID + "=" + serverTable.statementSelectServerID) + .where(Col.SERVER_ID + "=" + serverTable.statementSelectServerID) .toString(); return query(new QueryStatement>(sql, 50000) { @@ -98,13 +86,13 @@ public class TPSTable extends Table { while (set.next()) { TPS tps = TPSBuilder.get() - .date(set.getLong(columnDate)) - .tps(set.getDouble(columnTPS)) - .playersOnline(set.getInt(columnPlayers)) - .usedCPU(set.getDouble(columnCPUUsage)) - .usedMemory(set.getLong(columnRAMUsage)) - .entities(set.getInt(columnEntities)) - .chunksLoaded(set.getInt(columnChunksLoaded)) + .date(set.getLong(Col.DATE.get())) + .tps(set.getDouble(Col.TPS.get())) + .playersOnline(set.getInt(Col.PLAYERS_ONLINE.get())) + .usedCPU(set.getDouble(Col.CPU_USAGE.get())) + .usedMemory(set.getLong(Col.RAM_USAGE.get())) + .entities(set.getInt(Col.ENTITIES.get())) + .chunksLoaded(set.getInt(Col.CHUNKS.get())) .toTPS(); data.add(tps); @@ -114,6 +102,42 @@ public class TPSTable extends Table { }); } + /** + * @return @throws SQLException + */ + public List getTPSData() throws SQLException { + return getTPSData(ServerInfo.getServerUUID()); + } + + /** + * Clean the TPS Table of old data. + * + * @throws SQLException DB Error + */ + public void clean() throws SQLException { + Optional allTimePeak = getAllTimePeak(); + int p = -1; + if (allTimePeak.isPresent()) { + p = allTimePeak.get().getPlayers(); + } + final int pValue = p; + + String sql = "DELETE FROM " + tableName + + " WHERE (" + Col.DATE + " allTimePeak = getAllTimePeak(); - int p = -1; - if (allTimePeak.isPresent()) { - p = allTimePeak.get().getPlayers(); - } - final int pValue = p; + public Optional getPeakPlayerCount(UUID serverUUID, long afterDate) throws SQLException { + String sql = Select.all(tableName) + .where(Col.SERVER_ID + "=" + serverTable.statementSelectServerID) + .and(Col.PLAYERS_ONLINE + "= (SELECT MAX(" + Col.PLAYERS_ONLINE + ") FROM " + tableName + ")") + .and(Col.DATE + ">= ?") + .toString(); - String sql = "DELETE FROM " + tableName + - " WHERE (" + columnDate + ">(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { - statement.setInt(1, pValue); - // More than 2 Months ago. - long fiveWeeks = TimeAmount.MONTH.ms() * 2L; - statement.setLong(2, MiscUtils.getTime() - fiveWeeks); + statement.setString(1, serverUUID.toString()); + statement.setLong(2, afterDate); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + + TPS tps = TPSBuilder.get() + .date(set.getLong(Col.DATE.get())) + .tps(set.getDouble(Col.TPS.get())) + .playersOnline(set.getInt(Col.PLAYERS_ONLINE.get())) + .usedCPU(set.getDouble(Col.CPU_USAGE.get())) + .usedMemory(set.getLong(Col.RAM_USAGE.get())) + .entities(set.getInt(Col.ENTITIES.get())) + .chunksLoaded(set.getInt(Col.CHUNKS.get())) + .toTPS(); + + return Optional.of(tps); + } + return Optional.empty(); } }); } @@ -171,55 +201,20 @@ public class TPSTable extends Table { return getPeakPlayerCount(ServerInfo.getServerUUID(), afterDate); } - public Optional getPeakPlayerCount(UUID serverUUID, long afterDate) throws SQLException { - String sql = Select.all(tableName) - .where(columnServerID + "=" + serverTable.statementSelectServerID) - .and(columnPlayers + "= (SELECT MAX(" + columnPlayers + ") FROM " + tableName + ")") - .and(columnDate + ">= ?") - .toString(); - - return query(new QueryStatement>(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, serverUUID.toString()); - statement.setLong(2, afterDate); - } - - @Override - public Optional processResults(ResultSet set) throws SQLException { - if (set.next()) { - - TPS tps = TPSBuilder.get() - .date(set.getLong(columnDate)) - .tps(set.getDouble(columnTPS)) - .playersOnline(set.getInt(columnPlayers)) - .usedCPU(set.getDouble(columnCPUUsage)) - .usedMemory(set.getLong(columnRAMUsage)) - .entities(set.getInt(columnEntities)) - .chunksLoaded(set.getInt(columnChunksLoaded)) - .toTPS(); - - return Optional.of(tps); - } - return Optional.empty(); - } - }); - } - public Map> getAllTPS() throws SQLException { - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + - columnDate + ", " + - columnTPS + ", " + - columnPlayers + ", " + - columnCPUUsage + ", " + - columnRAMUsage + ", " + - columnEntities + ", " + - columnChunksLoaded + ", " + + Col.DATE + ", " + + Col.TPS + ", " + + Col.PLAYERS_ONLINE + ", " + + Col.CPU_USAGE + ", " + + Col.RAM_USAGE + ", " + + Col.ENTITIES + ", " + + Col.CHUNKS + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID; + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID; return query(new QueryAllStatement>>(sql, 50000) { @Override @@ -231,13 +226,13 @@ public class TPSTable extends Table { List tpsList = serverMap.getOrDefault(serverUUID, new ArrayList<>()); TPS tps = TPSBuilder.get() - .date(set.getLong(columnDate)) - .tps(set.getDouble(columnTPS)) - .playersOnline(set.getInt(columnPlayers)) - .usedCPU(set.getDouble(columnCPUUsage)) - .usedMemory(set.getLong(columnRAMUsage)) - .entities(set.getInt(columnEntities)) - .chunksLoaded(set.getInt(columnChunksLoaded)) + .date(set.getLong(Col.DATE.get())) + .tps(set.getDouble(Col.TPS.get())) + .playersOnline(set.getInt(Col.PLAYERS_ONLINE.get())) + .usedCPU(set.getDouble(Col.CPU_USAGE.get())) + .usedMemory(set.getLong(Col.RAM_USAGE.get())) + .entities(set.getInt(Col.ENTITIES.get())) + .chunksLoaded(set.getInt(Col.CHUNKS.get())) .toTPS(); tpsList.add(tps); @@ -248,6 +243,43 @@ public class TPSTable extends Table { }); } + public List getNetworkOnlineData() throws SQLException { + Optional bungeeInfo = serverTable.getBungeeInfo(); + if (!bungeeInfo.isPresent()) { + return new ArrayList<>(); + } + UUID bungeeUUID = bungeeInfo.get().getUuid(); + + String sql = "SELECT " + + Col.DATE + ", " + + Col.PLAYERS_ONLINE + + " FROM " + tableName + + " WHERE " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; + + return query(new QueryStatement>(sql, 50000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, bungeeUUID.toString()); + } + + @Override + public List processResults(ResultSet set) throws SQLException { + List tpsList = new ArrayList<>(); + while (set.next()) { + + TPS tps = TPSBuilder.get() + .date(set.getLong(Col.DATE.get())) + .skipTPS() + .playersOnline(set.getInt(Col.PLAYERS_ONLINE.get())) + .toTPS(); + + tpsList.add(tps); + } + return tpsList; + } + }); + } + public void insertAllTPS(Map> allTPS) throws SQLException { if (Verify.isEmpty(allTPS)) { return; @@ -277,40 +309,29 @@ public class TPSTable extends Table { }); } - public List getNetworkOnlineData() throws SQLException { - Optional bungeeInfo = serverTable.getBungeeInfo(); - if (!bungeeInfo.isPresent()) { - return new ArrayList<>(); + public enum Col implements Column { + SERVER_ID("server_id"), + DATE("date"), + TPS("tps"), + PLAYERS_ONLINE("players_online"), + CPU_USAGE("cpu_usage"), + RAM_USAGE("ram_usage"), + ENTITIES("entities"), + CHUNKS("chunks_loaded"); + + private final String column; + + Col(String column) { + this.column = column; } - UUID bungeeUUID = bungeeInfo.get().getUuid(); - String sql = "SELECT " + - columnDate + ", " + - columnPlayers + - " FROM " + tableName + - " WHERE " + columnServerID + "=" + serverTable.statementSelectServerID; + public String get() { + return toString(); + } - return query(new QueryStatement>(sql, 50000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, bungeeUUID.toString()); - } - - @Override - public List processResults(ResultSet set) throws SQLException { - List tpsList = new ArrayList<>(); - while (set.next()) { - - TPS tps = TPSBuilder.get() - .date(set.getLong(columnDate)) - .skipTPS() - .playersOnline(set.getInt(columnPlayers)) - .toTPS(); - - tpsList.add(tps); - } - return tpsList; - } - }); + @Override + public String toString() { + return column; + } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java index 78569c5be..59a96bd28 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java @@ -26,7 +26,11 @@ import java.sql.SQLException; import java.util.*; /** - * Table that represents plan_transfer in SQL database. + * Table that is in charge of transferring data between network servers. + *

+ * Table Name: plan_transfer + *

+ * For contained columns {@see Col} * * @author Rsl1122 */ @@ -215,8 +219,8 @@ public class TransferTable extends Table { } public Map getPlayerPluginsTabs(UUID playerUUID) throws SQLException { - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + Col.CONTENT + ", " + serverUUIDColumn + @@ -250,8 +254,8 @@ public class TransferTable extends Table { @Deprecated public Optional getServerPlayerIsOnline(UUID playerUUID) throws SQLException { - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + serverUUIDColumn + " FROM " + tableName + diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java index 5b7154751..c9a7ad677 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java @@ -2,6 +2,7 @@ package com.djrapitops.plan.system.database.databases.sql.tables; import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -15,7 +16,27 @@ import java.util.UUID; */ public abstract class UserIDTable extends Table { + @Deprecated protected final String columnUserID = "user_id"; + + public enum Col implements Column { + USER_ID("user_id"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } protected final UsersTable usersTable; public UserIDTable(String name, SQLDB db) { diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java index 6fcc19cd7..50936571a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java @@ -10,10 +10,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; -import com.djrapitops.plan.system.database.databases.sql.statements.Select; -import com.djrapitops.plan.system.database.databases.sql.statements.Sql; -import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; -import com.djrapitops.plan.system.database.databases.sql.statements.Update; +import com.djrapitops.plan.system.database.databases.sql.statements.*; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plugin.utilities.Verify; @@ -23,18 +20,28 @@ import java.sql.SQLException; import java.util.*; /** - * Server Specific user information table. + * Table that is in charge of storing server specific player data. *

- * Represents plan_user_info. + * Table Name: plan_user_info + *

+ * For contained columns {@see Col} * * @author Rsl1122 */ public class UserInfoTable extends UserIDTable { - private static final String columnRegistered = "registered"; - private static final String columnOP = "opped"; - private static final String columnBanned = "banned"; - private static final String columnServerID = "server_id"; + @Override + public void createTable() throws DBInitException { + createTable(TableSqlParser.createTable(tableName) + .column(Col.USER_ID, Sql.INT).notNull() + .column(Col.REGISTERED, Sql.LONG).notNull() + .column(Col.OP, Sql.BOOL).notNull().defaultValue(false) + .column(Col.BANNED, Sql.BOOL).notNull().defaultValue(false) + .column(Col.SERVER_ID, Sql.INT).notNull() + .foreignKey(Col.USER_ID, usersTable.getTableName(), UsersTable.Col.ID) + .foreignKey(Col.SERVER_ID, serverTable.getTableName(), ServerTable.Col.SERVER_ID) + .toString()); + } private final ServerTable serverTable; @@ -43,28 +50,15 @@ public class UserInfoTable extends UserIDTable { serverTable = db.getServerTable(); } - @Override - public void createTable() throws DBInitException { - createTable(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnRegistered, Sql.LONG).notNull() - .column(columnOP, Sql.BOOL).notNull().defaultValue(false) - .column(columnBanned, Sql.BOOL).notNull().defaultValue(false) - .column(columnServerID, Sql.INT).notNull() - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnServerID, serverTable.getTableName(), serverTable.getColumnID()) - .toString()); - } - public void registerUserInfo(UUID uuid, long registered) throws SQLException { if (!usersTable.isRegistered(uuid)) { usersTable.registerUser(uuid, registered, "Waiting for Update.."); } String sql = "INSERT INTO " + tableName + " (" + - columnUserID + ", " + - columnRegistered + ", " + - columnServerID + + Col.USER_ID + ", " + + Col.REGISTERED + ", " + + Col.SERVER_ID + ") VALUES (" + usersTable.statementSelectID + ", " + "?, " + @@ -80,14 +74,10 @@ public class UserInfoTable extends UserIDTable { }); } - public boolean isRegistered(UUID uuid) throws SQLException { - return isRegistered(uuid, ServerInfo.getServerUUID()); - } - public boolean isRegistered(UUID uuid, UUID serverUUID) throws SQLException { - String sql = Select.from(tableName, "COUNT(" + columnUserID + ") as c") - .where(columnUserID + "=" + usersTable.statementSelectID) - .and(columnServerID + "=" + serverTable.statementSelectServerID) + String sql = Select.from(tableName, "COUNT(" + Col.USER_ID + ") as c") + .where(Col.USER_ID + "=" + usersTable.statementSelectID) + .and(Col.SERVER_ID + "=" + serverTable.statementSelectServerID) .toString(); return query(new QueryStatement(sql) { @@ -104,9 +94,13 @@ public class UserInfoTable extends UserIDTable { }); } + public boolean isRegistered(UUID uuid) throws SQLException { + return isRegistered(uuid, ServerInfo.getServerUUID()); + } + public void updateOpStatus(UUID uuid, boolean op) throws SQLException { - String sql = Update.values(tableName, columnOP) - .where(columnUserID + "=" + usersTable.statementSelectID) + String sql = Update.values(tableName, Col.OP) + .where(Col.USER_ID + "=" + usersTable.statementSelectID) .toString(); execute(new ExecStatement(sql) { @@ -119,8 +113,8 @@ public class UserInfoTable extends UserIDTable { } public void updateBanStatus(UUID uuid, boolean banned) throws SQLException { - String sql = Update.values(tableName, columnBanned) - .where(columnUserID + "=" + usersTable.statementSelectID) + String sql = Update.values(tableName, Col.BANNED) + .where(Col.USER_ID + "=" + usersTable.statementSelectID) .toString(); execute(new ExecStatement(sql) { @@ -132,25 +126,21 @@ public class UserInfoTable extends UserIDTable { }); } - public UserInfo getUserInfo(UUID uuid) throws SQLException { - return getAllUserInfo(uuid).get(ServerInfo.getServerUUID()); - } - public Map getAllUserInfo(UUID uuid) throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String usersNameColumn = usersTable + "." + usersTable.getColumnName() + " as name"; - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String usersNameColumn = usersTable + "." + UsersTable.Col.USER_NAME + " as name"; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + - tableName + "." + columnRegistered + ", " + - columnBanned + ", " + - columnOP + ", " + + tableName + "." + Col.REGISTERED + ", " + + Col.BANNED + ", " + + Col.OP + ", " + usersNameColumn + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID; + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID + + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID; return query(new QueryStatement>(sql) { @Override @@ -162,19 +152,56 @@ public class UserInfoTable extends UserIDTable { public Map processResults(ResultSet set) throws SQLException { Map map = new HashMap<>(); while (set.next()) { - long registered = set.getLong(columnRegistered); - boolean opped = set.getBoolean(columnOP); - boolean banned = set.getBoolean(columnBanned); + long registered = set.getLong(Col.REGISTERED.get()); + boolean op = set.getBoolean(Col.OP.get()); + boolean banned = set.getBoolean(Col.BANNED.get()); String name = set.getString("name"); UUID serverUUID = UUID.fromString(set.getString("s_uuid")); - map.put(serverUUID, new UserInfo(uuid, name, registered, opped, banned)); + map.put(serverUUID, new UserInfo(uuid, name, registered, op, banned)); } return map; } }); } + public UserInfo getUserInfo(UUID uuid) throws SQLException { + return getAllUserInfo(uuid).get(ServerInfo.getServerUUID()); + } + + public List getServerUserInfo(UUID serverUUID) throws SQLException { + Map playerNames = usersTable.getPlayerNames(); + Map uuidsByID = usersTable.getUUIDsByID(); + + String sql = "SELECT * FROM " + tableName + + " WHERE " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; + + return query(new QueryStatement>(sql, 20000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, serverUUID.toString()); + } + + @Override + public List processResults(ResultSet set) throws SQLException { + List userInfo = new ArrayList<>(); + while (set.next()) { + long registered = set.getLong(Col.REGISTERED.get()); + boolean op = set.getBoolean(Col.OP.get()); + boolean banned = set.getBoolean(Col.BANNED.get()); + int userId = set.getInt(Col.USER_ID.get()); + UUID uuid = uuidsByID.get(userId); + String name = playerNames.getOrDefault(uuid, "Unknown"); + UserInfo info = new UserInfo(uuid, name, registered, op, banned); + if (!userInfo.contains(info)) { + userInfo.add(info); + } + } + return userInfo; + } + }); + } + /** * Used for getting info of all users on THIS server. * @@ -184,53 +211,20 @@ public class UserInfoTable extends UserIDTable { return getServerUserInfo(ServerInfo.getServerUUID()); } - public List getServerUserInfo(UUID serverUUID) throws SQLException { - Map playerNames = usersTable.getPlayerNames(); - Map uuidsByID = usersTable.getUUIDsByID(); - - String sql = "SELECT * FROM " + tableName + - " WHERE " + columnServerID + "=" + serverTable.statementSelectServerID; - - return query(new QueryStatement>(sql, 20000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, serverUUID.toString()); - } - - @Override - public List processResults(ResultSet set) throws SQLException { - List userInfo = new ArrayList<>(); - while (set.next()) { - long registered = set.getLong(columnRegistered); - boolean opped = set.getBoolean(columnOP); - boolean banned = set.getBoolean(columnBanned); - int userId = set.getInt(columnUserID); - UUID uuid = uuidsByID.get(userId); - String name = playerNames.getOrDefault(uuid, "Unknown"); - UserInfo info = new UserInfo(uuid, name, registered, opped, banned); - if (!userInfo.contains(info)) { - userInfo.add(info); - } - } - return userInfo; - } - }); - } - public Map> getAllUserInfo() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + - tableName + "." + columnRegistered + ", " + - columnBanned + ", " + - columnOP + ", " + + tableName + "." + Col.REGISTERED + ", " + + Col.BANNED + ", " + + Col.OP + ", " + usersUUIDColumn + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID; + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID; return query(new QueryAllStatement>>(sql, 50000) { @Override @@ -242,9 +236,9 @@ public class UserInfoTable extends UserIDTable { List userInfos = serverMap.getOrDefault(serverUUID, new ArrayList<>()); - long registered = set.getLong(columnRegistered); - boolean banned = set.getBoolean(columnBanned); - boolean op = set.getBoolean(columnOP); + long registered = set.getLong(Col.REGISTERED.get()); + boolean banned = set.getBoolean(Col.BANNED.get()); + boolean op = set.getBoolean(Col.OP.get()); userInfos.add(new UserInfo(uuid, "", registered, op, banned)); @@ -261,11 +255,11 @@ public class UserInfoTable extends UserIDTable { } String sql = "INSERT INTO " + tableName + " (" + - columnUserID + ", " + - columnRegistered + ", " + - columnServerID + ", " + - columnBanned + ", " + - columnOP + + Col.USER_ID + ", " + + Col.REGISTERED + ", " + + Col.SERVER_ID + ", " + + Col.BANNED + ", " + + Col.OP + ") VALUES (" + usersTable.statementSelectID + ", " + "?, " + @@ -292,16 +286,16 @@ public class UserInfoTable extends UserIDTable { } public Map> getSavedUUIDs() throws SQLException { - String usersIDColumn = usersTable + "." + usersTable.getColumnID(); - String usersUUIDColumn = usersTable + "." + usersTable.getColumnUUID() + " as uuid"; - String serverIDColumn = serverTable + "." + serverTable.getColumnID(); - String serverUUIDColumn = serverTable + "." + serverTable.getColumnUUID() + " as s_uuid"; + String usersIDColumn = usersTable + "." + UsersTable.Col.ID; + String usersUUIDColumn = usersTable + "." + UsersTable.Col.UUID + " as uuid"; + String serverIDColumn = serverTable + "." + ServerTable.Col.SERVER_ID; + String serverUUIDColumn = serverTable + "." + ServerTable.Col.SERVER_UUID + " as s_uuid"; String sql = "SELECT " + usersUUIDColumn + ", " + serverUUIDColumn + " FROM " + tableName + - " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + columnUserID + - " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + columnServerID; + " INNER JOIN " + usersTable + " on " + usersIDColumn + "=" + Col.USER_ID + + " INNER JOIN " + serverTable + " on " + serverIDColumn + "=" + Col.SERVER_ID; return query(new QueryAllStatement>>(sql, 50000) { @Override @@ -323,9 +317,9 @@ public class UserInfoTable extends UserIDTable { public int getServerUserCount(UUID serverUUID) throws SQLException { String sql = "SELECT " + - " COUNT(" + columnRegistered + ") as c" + + " COUNT(" + Col.REGISTERED + ") as c" + " FROM " + tableName + - " WHERE " + columnServerID + "=" + serverTable.statementSelectServerID; + " WHERE " + Col.SERVER_ID + "=" + serverTable.statementSelectServerID; return query(new QueryAllStatement(sql, 20000) { @Override @@ -343,6 +337,29 @@ public class UserInfoTable extends UserIDTable { }); } + public enum Col implements Column { + USER_ID(UserIDTable.Col.USER_ID.get()), + SERVER_ID("server_id"), + REGISTERED("registered"), + OP("opped"), + BANNED("banned"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } + // TODO improve performance of this method. public Set getSavedUUIDs(UUID serverUUID) throws SQLException { return getSavedUUIDs().get(serverUUID); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java index 34bc6e202..39fa1389d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java @@ -15,36 +15,37 @@ import java.sql.SQLException; import java.util.*; /** + * Table that is in charge of storing common player data for all servers. + *

+ * Table Name: plan_users + *

+ * For contained columns {@see Col} + * * @author Rsl1122 */ public class UsersTable extends UserIDTable { - public final String statementSelectID; - private static final String columnID = "id"; - private static final String columnUUID = "uuid"; - private static final String columnRegistered = "registered"; - private static final String columnName = "name"; - private static final String columnTimesKicked = "times_kicked"; - private String insertStatement; - public UsersTable(SQLDB db) { super("plan_users", db); - statementSelectID = "(" + Select.from(tableName, tableName + "." + columnID).where(columnUUID + "=?").toString() + " LIMIT 1)"; + statementSelectID = "(" + Select.from(tableName, tableName + "." + Col.ID).where(Col.UUID + "=?").toString() + " LIMIT 1)"; insertStatement = Insert.values(tableName, - columnUUID, - columnRegistered, - columnName); + Col.UUID, + Col.REGISTERED, + Col.USER_NAME); } + public final String statementSelectID; + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnID) - .column(columnUUID, Sql.varchar(36)).notNull().unique() - .column(columnRegistered, Sql.LONG).notNull() - .column(columnName, Sql.varchar(16)).notNull() - .column(columnTimesKicked, Sql.INT).notNull().defaultValue("0") - .primaryKey(usingMySQL, columnID) + .primaryKeyIDColumn(usingMySQL, Col.ID) + .column(Col.UUID, Sql.varchar(36)).notNull().unique() + .column(Col.REGISTERED, Sql.LONG).notNull() + .column(Col.USER_NAME, Sql.varchar(16)).notNull() + .column(Col.TIMES_KICKED, Sql.INT).notNull().defaultValue("0") + .primaryKey(usingMySQL, Col.ID) .toString() ); } @@ -54,14 +55,14 @@ public class UsersTable extends UserIDTable { * @throws SQLException when an error at retrieving the UUIDs happens */ public Set getSavedUUIDs() throws SQLException { - String sql = Select.from(tableName, columnUUID).toString(); + String sql = Select.from(tableName, Col.UUID).toString(); return query(new QueryAllStatement>(sql, 50000) { @Override public Set processResults(ResultSet set) throws SQLException { Set uuids = new HashSet<>(); while (set.next()) { - UUID uuid = UUID.fromString(set.getString(columnUUID)); + UUID uuid = UUID.fromString(set.getString(Col.UUID.get())); uuids.add(uuid); } return uuids; @@ -77,7 +78,7 @@ public class UsersTable extends UserIDTable { */ @Override public void removeUser(UUID uuid) throws SQLException { - String sql = "DELETE FROM " + tableName + " WHERE (" + columnUUID + "=?)"; + String sql = "DELETE FROM " + tableName + " WHERE (" + Col.UUID + "=?)"; execute(new ExecStatement(sql) { @Override @@ -90,15 +91,17 @@ public class UsersTable extends UserIDTable { /** * @return the name of the column that inherits the ID. */ + @Deprecated public String getColumnID() { - return columnID; + return Col.ID.get(); } /** * @return the name of the column that inherits the UUID. */ + @Deprecated public String getColumnUUID() { - return columnUUID; + return Col.UUID.get(); } /** @@ -109,8 +112,8 @@ public class UsersTable extends UserIDTable { * @throws SQLException DB Error */ public UUID getUuidOf(String playerName) throws SQLException { - String sql = Select.from(tableName, columnUUID) - .where("UPPER(" + columnName + ")=UPPER(?)") + String sql = Select.from(tableName, Col.UUID) + .where("UPPER(" + Col.USER_NAME + ")=UPPER(?)") .toString(); return query(new QueryStatement(sql) { @@ -122,7 +125,7 @@ public class UsersTable extends UserIDTable { @Override public UUID processResults(ResultSet set) throws SQLException { if (set.next()) { - String uuidS = set.getString(columnUUID); + String uuidS = set.getString(Col.UUID.get()); return UUID.fromString(uuidS); } return null; @@ -131,20 +134,38 @@ public class UsersTable extends UserIDTable { } public List getRegisterDates() throws SQLException { - String sql = Select.from(tableName, columnRegistered).toString(); + String sql = Select.from(tableName, Col.REGISTERED).toString(); return query(new QueryAllStatement>(sql, 50000) { @Override public List processResults(ResultSet set) throws SQLException { List registerDates = new ArrayList<>(); while (set.next()) { - registerDates.add(set.getLong(columnRegistered)); + registerDates.add(set.getLong(Col.REGISTERED.get())); } return registerDates; } }); } + public boolean isRegistered(UUID uuid) throws SQLException { + String sql = Select.from(tableName, "COUNT(" + Col.ID + ") as c") + .where(Col.UUID + "=?") + .toString(); + + return query(new QueryStatement(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + } + + @Override + public Boolean processResults(ResultSet set) throws SQLException { + return set.next() && set.getInt("c") >= 1; + } + }); + } + /** * Register a new user (UUID) to the database. * @@ -167,27 +188,9 @@ public class UsersTable extends UserIDTable { }); } - public boolean isRegistered(UUID uuid) throws SQLException { - String sql = Select.from(tableName, "COUNT(" + columnID + ") as c") - .where(columnUUID + "=?") - .toString(); - - return query(new QueryStatement(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - } - - @Override - public Boolean processResults(ResultSet set) throws SQLException { - return set.next() && set.getInt("c") >= 1; - } - }); - } - public void updateName(UUID uuid, String name) throws SQLException { - String sql = Update.values(tableName, columnName) - .where(columnUUID + "=?") + String sql = Update.values(tableName, Col.USER_NAME.get()) + .where(Col.UUID + "=?") .toString(); execute(new ExecStatement(sql) { @@ -200,8 +203,8 @@ public class UsersTable extends UserIDTable { } public int getTimesKicked(UUID uuid) throws SQLException { - String sql = Select.from(tableName, columnTimesKicked) - .where(columnUUID + "=?") + String sql = Select.from(tableName, Col.TIMES_KICKED) + .where(Col.UUID + "=?") .toString(); return query(new QueryStatement(sql) { @@ -213,7 +216,7 @@ public class UsersTable extends UserIDTable { @Override public Integer processResults(ResultSet set) throws SQLException { if (set.next()) { - return set.getInt(columnTimesKicked); + return set.getInt(Col.TIMES_KICKED.get()); } return 0; } @@ -222,8 +225,8 @@ public class UsersTable extends UserIDTable { public void kicked(UUID uuid) throws SQLException { String sql = "UPDATE " + tableName + " SET " - + columnTimesKicked + "=" + columnTimesKicked + "+ 1" + - " WHERE " + columnUUID + "=?"; + + Col.TIMES_KICKED + "=" + Col.TIMES_KICKED + "+ 1" + + " WHERE " + Col.UUID + "=?"; execute(new ExecStatement(sql) { @Override @@ -234,7 +237,7 @@ public class UsersTable extends UserIDTable { } public String getPlayerName(UUID uuid) throws SQLException { - String sql = Select.from(tableName, columnName).where(columnUUID + "=?").toString(); + String sql = Select.from(tableName, Col.USER_NAME).where(Col.UUID + "=?").toString(); return query(new QueryStatement(sql) { @Override @@ -245,7 +248,7 @@ public class UsersTable extends UserIDTable { @Override public String processResults(ResultSet set) throws SQLException { if (set.next()) { - return set.getString(columnName); + return set.getString(Col.USER_NAME.get()); } return null; } @@ -262,11 +265,11 @@ public class UsersTable extends UserIDTable { public List getMatchingNames(String name) throws SQLException { String searchString = "%" + name.toLowerCase() + "%"; NicknamesTable nicknamesTable = db.getNicknamesTable(); - String sql = "SELECT DISTINCT " + columnName + " FROM " + tableName + - " WHERE " + columnName + " LIKE ?" + - " UNION SELECT DISTINCT " + columnName + " FROM " + tableName + - " INNER JOIN " + nicknamesTable + " on " + columnID + "=" + nicknamesTable + "." + nicknamesTable.getColumnUserID() + - " WHERE " + nicknamesTable.getColumnNick() + " LIKE ?"; + String sql = "SELECT DISTINCT " + Col.USER_NAME + " FROM " + tableName + + " WHERE " + Col.USER_NAME + " LIKE ?" + + " UNION SELECT DISTINCT " + Col.USER_NAME + " FROM " + tableName + + " INNER JOIN " + nicknamesTable + " on " + Col.ID + "=" + nicknamesTable + "." + NicknamesTable.Col.USER_ID + + " WHERE " + NicknamesTable.Col.NICKNAME + " LIKE ?"; return query(new QueryStatement>(sql, 5000) { @Override @@ -289,8 +292,28 @@ public class UsersTable extends UserIDTable { }); } + @Deprecated public String getColumnName() { - return columnName; + return Col.USER_NAME.get(); + } + + public Map getUsers() throws SQLException { + String sql = Select.all(tableName).toString(); + + return query(new QueryAllStatement>(sql, 20000) { + @Override + public Map processResults(ResultSet set) throws SQLException { + Map users = new HashMap<>(); + while (set.next()) { + UUID uuid = UUID.fromString(set.getString(Col.UUID.get())); + String name = set.getString(Col.USER_NAME.get()); + long registered = set.getLong(Col.REGISTERED.get()); + + users.put(uuid, new UserInfo(uuid, name, registered, false, false)); + } + return users; + } + }); } /** @@ -325,31 +348,12 @@ public class UsersTable extends UserIDTable { }); } - public Map getUsers() throws SQLException { - String sql = Select.all(tableName).toString(); - - return query(new QueryAllStatement>(sql, 20000) { - @Override - public Map processResults(ResultSet set) throws SQLException { - Map users = new HashMap<>(); - while (set.next()) { - UUID uuid = UUID.fromString(set.getString(columnUUID)); - String name = set.getString(columnName); - long registered = set.getLong(columnRegistered); - - users.put(uuid, new UserInfo(uuid, name, registered, false, false)); - } - return users; - } - }); - } - public void updateKicked(Map timesKicked) throws SQLException { if (Verify.isEmpty(timesKicked)) { return; } - String sql = "UPDATE " + tableName + " SET " + columnTimesKicked + "=? WHERE " + columnUUID + "=?"; + String sql = "UPDATE " + tableName + " SET " + Col.TIMES_KICKED + "=? WHERE " + Col.UUID + "=?"; executeBatch(new ExecStatement(sql) { @Override @@ -366,15 +370,15 @@ public class UsersTable extends UserIDTable { } public Map getAllTimesKicked() throws SQLException { - String sql = Select.from(tableName, columnUUID, columnTimesKicked).toString(); + String sql = Select.from(tableName, Col.UUID, Col.TIMES_KICKED).toString(); return query(new QueryAllStatement>(sql, 20000) { @Override public Map processResults(ResultSet set) throws SQLException { Map timesKicked = new HashMap<>(); while (set.next()) { - UUID uuid = UUID.fromString(set.getString(columnUUID)); - int kickCount = set.getInt(columnTimesKicked); + UUID uuid = UUID.fromString(set.getString(Col.UUID.get())); + int kickCount = set.getInt(Col.TIMES_KICKED.get()); timesKicked.put(uuid, kickCount); } @@ -384,15 +388,15 @@ public class UsersTable extends UserIDTable { } public Map getPlayerNames() throws SQLException { - String sql = Select.from(tableName, columnUUID, columnName).toString(); + String sql = Select.from(tableName, Col.UUID, Col.USER_NAME).toString(); return query(new QueryAllStatement>(sql, 20000) { @Override public Map processResults(ResultSet set) throws SQLException { Map names = new HashMap<>(); while (set.next()) { - UUID uuid = UUID.fromString(set.getString(columnUUID)); - String name = set.getString(columnName); + UUID uuid = UUID.fromString(set.getString(Col.UUID.get())); + String name = set.getString(Col.USER_NAME.get()); names.put(uuid, name); } @@ -401,6 +405,25 @@ public class UsersTable extends UserIDTable { }); } + public Optional getRegisterDate(UUID uuid) throws SQLException { + String sql = Select.from(tableName, Col.REGISTERED).where(Col.UUID + "=?").toString(); + + return query(new QueryStatement>(sql) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + } + + @Override + public Optional processResults(ResultSet set) throws SQLException { + if (set.next()) { + return Optional.of(set.getLong(Col.REGISTERED.get())); + } + return Optional.empty(); + } + }); + } + public int getPlayerCount() throws SQLException { String sql = "SELECT COUNT(*) AS player_count FROM " + tableName; @@ -415,27 +438,8 @@ public class UsersTable extends UserIDTable { }); } - public Optional getRegisterDate(UUID uuid) throws SQLException { - String sql = Select.from(tableName, columnRegistered).where(columnUUID + "=?").toString(); - - return query(new QueryStatement>(sql) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - } - - @Override - public Optional processResults(ResultSet set) throws SQLException { - if (set.next()) { - return Optional.of(set.getLong(columnRegistered)); - } - return Optional.empty(); - } - }); - } - public Map getUUIDsByID() throws SQLException { - String sql = Select.from(tableName, columnID, columnUUID).toString(); + String sql = Select.from(tableName, Col.ID, Col.UUID).toString(); return query(new QueryAllStatement>(sql, 20000) { @Override @@ -443,8 +447,8 @@ public class UsersTable extends UserIDTable { Map uuidsByID = new TreeMap<>(); while (set.next()) { - int id = set.getInt(columnID); - UUID uuid = UUID.fromString(set.getString(columnUUID)); + int id = set.getInt(Col.ID.get()); + UUID uuid = UUID.fromString(set.getString(Col.UUID.get())); uuidsByID.put(id, uuid); } @@ -452,4 +456,27 @@ public class UsersTable extends UserIDTable { } }); } + + public enum Col implements Column { + ID("id"), + UUID("uuid"), + REGISTERED("registered"), + USER_NAME("name"), + TIMES_KICKED("times_kicked"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java index e1c10ffd7..9e2bc997a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -25,21 +26,19 @@ import java.util.*; */ public class WorldTable extends Table { - public final String statementSelectID; - private static final String columnWorldId = "id"; - private static final String columnWorldName = "world_name"; - public WorldTable(SQLDB db) { super("plan_worlds", db); - statementSelectID = "(SELECT " + columnWorldId + " FROM " + tableName + " WHERE (" + columnWorldName + "=?) LIMIT 1)"; + statementSelectID = "(SELECT " + Col.ID + " FROM " + tableName + " WHERE (" + Col.NAME + "=?) LIMIT 1)"; } + public final String statementSelectID; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .primaryKeyIDColumn(usingMySQL, columnWorldId) - .column(columnWorldName, Sql.varchar(100)).notNull() - .primaryKey(usingMySQL, columnWorldId) + .primaryKeyIDColumn(usingMySQL, Col.ID) + .column(Col.NAME, Sql.varchar(100)).notNull() + .primaryKey(usingMySQL, Col.ID) .toString() ); } @@ -58,7 +57,7 @@ public class WorldTable extends Table { public List processResults(ResultSet set) throws SQLException { List worldNames = new ArrayList<>(); while (set.next()) { - String worldName = set.getString(columnWorldName); + String worldName = set.getString(Col.NAME.get()); worldNames.add(worldName); } return worldNames; @@ -85,7 +84,7 @@ public class WorldTable extends Table { } String sql = "INSERT INTO " + tableName + " (" - + columnWorldName + + Col.NAME + ") VALUES (?)"; executeBatch(new ExecStatement(sql) { @@ -99,18 +98,6 @@ public class WorldTable extends Table { }); } - public String getColumnID() { - return columnWorldId; - } - - public String getColumnWorldName() { - return columnWorldName; - } - - public Set getWorldNames() throws SQLException { - return getWorldNames(ServerInfo.getServerUUID()); - } - public Set getWorldNames(UUID serverUUID) throws SQLException { WorldTimesTable worldTimesTable = db.getWorldTimesTable(); SessionsTable sessionsTable = db.getSessionsTable(); @@ -118,15 +105,15 @@ public class WorldTable extends Table { String statementSelectServerID = serverTable.statementSelectServerID; - String worldIDColumn = worldTimesTable + "." + worldTimesTable.getColumnWorldId(); - String worldSessionIDColumn = worldTimesTable + "." + worldTimesTable.getColumnSessionID(); - String sessionIDColumn = sessionsTable + "." + sessionsTable.getColumnID(); - String sessionServerIDColumn = sessionsTable + "." + sessionsTable.getcolumnServerID(); + String worldIDColumn = worldTimesTable + "." + WorldTimesTable.Col.WORLD_ID; + String worldSessionIDColumn = worldTimesTable + "." + WorldTimesTable.Col.SESSION_ID; + String sessionIDColumn = sessionsTable + "." + SessionsTable.Col.ID; + String sessionServerIDColumn = sessionsTable + "." + SessionsTable.Col.SERVER_ID; String sql = "SELECT DISTINCT " + - columnWorldName + " FROM " + + Col.NAME + " FROM " + tableName + - " INNER JOIN " + worldTimesTable + " on " + worldIDColumn + "=" + tableName + "." + columnWorldId + + " INNER JOIN " + worldTimesTable + " on " + worldIDColumn + "=" + tableName + "." + Col.ID + " INNER JOIN " + sessionsTable + " on " + worldSessionIDColumn + "=" + sessionIDColumn + " WHERE " + statementSelectServerID + "=" + sessionServerIDColumn; @@ -140,17 +127,21 @@ public class WorldTable extends Table { public Set processResults(ResultSet set) throws SQLException { Set worldNames = new HashSet<>(); while (set.next()) { - worldNames.add(set.getString(columnWorldName)); + worldNames.add(set.getString(Col.NAME.get())); } return worldNames; } }); } + public Set getWorldNames() throws SQLException { + return getWorldNames(ServerInfo.getServerUUID()); + } + public Map getWorldIds() throws SQLException { String sql = "SELECT DISTINCT " + - columnWorldName + ", " + - columnWorldId + " FROM " + + Col.NAME + ", " + + Col.ID + " FROM " + tableName; return query(new QueryAllStatement>(sql, 200) { @@ -158,12 +149,32 @@ public class WorldTable extends Table { public Map processResults(ResultSet set) throws SQLException { Map worldIds = new HashMap<>(); while (set.next()) { - String worldName = set.getString(columnWorldName); - int worldId = set.getInt(columnWorldId); + String worldName = set.getString(Col.NAME.get()); + int worldId = set.getInt(Col.ID.get()); worldIds.put(worldName, worldId); } return worldIds; } }); } + + public enum Col implements Column { + ID("id"), + NAME("world_name"); + + private final String column; + + Col(String column) { + this.column = column; + } + + public String get() { + return toString(); + } + + @Override + public String toString() { + return column; + } + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java index baf21dd16..70b790409 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java @@ -8,6 +8,7 @@ import com.djrapitops.plan.system.database.databases.sql.SQLDB; import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; +import com.djrapitops.plan.system.database.databases.sql.statements.Column; import com.djrapitops.plan.system.database.databases.sql.statements.Sql; import com.djrapitops.plan.system.database.databases.sql.statements.TableSqlParser; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -20,59 +21,103 @@ import java.util.*; import java.util.stream.Collectors; /** - * Table class representing database table plan_world_times. + * Table that is in charge of storing playtime data for each world in each GameMode. + *

+ * Table Name: plan_world_times + *

+ * For contained columns {@see Col} * * @author Rsl1122 - * @since 4.0.0 */ public class WorldTimesTable extends UserIDTable { - private static final String columnSessionID = "session_id"; - private static final String columnWorldId = "world_id"; - private static final String columnSurvival = "survival_time"; - private static final String columnCreative = "creative_time"; - private static final String columnAdventure = "adventure_time"; - private static final String columnSpectator = "spectator_time"; - - private final WorldTable worldTable; - private final SessionsTable sessionsTable; - private String insertStatement; - public WorldTimesTable(SQLDB db) { super("plan_world_times", db); worldTable = db.getWorldTable(); sessionsTable = db.getSessionsTable(); insertStatement = "INSERT INTO " + tableName + " (" + - columnUserID + ", " + - columnWorldId + ", " + - columnSessionID + ", " + - columnSurvival + ", " + - columnCreative + ", " + - columnAdventure + ", " + - columnSpectator + + Col.USER_ID + ", " + + Col.WORLD_ID + ", " + + Col.SESSION_ID + ", " + + Col.SURVIVAL + ", " + + Col.CREATIVE + ", " + + Col.ADVENTURE + ", " + + Col.SPECTATOR + ") VALUES (" + usersTable.statementSelectID + ", " + worldTable.statementSelectID + ", " + "?, ?, ?, ?, ?)"; } + private final WorldTable worldTable; + private final SessionsTable sessionsTable; + private String insertStatement; + @Override public void createTable() throws DBInitException { createTable(TableSqlParser.createTable(tableName) - .column(columnUserID, Sql.INT).notNull() - .column(columnWorldId, Sql.INT).notNull() - .column(columnSessionID, Sql.INT).notNull() - .column(columnSurvival, Sql.LONG).notNull().defaultValue("0") - .column(columnCreative, Sql.LONG).notNull().defaultValue("0") - .column(columnAdventure, Sql.LONG).notNull().defaultValue("0") - .column(columnSpectator, Sql.LONG).notNull().defaultValue("0") - .foreignKey(columnUserID, usersTable.getTableName(), usersTable.getColumnID()) - .foreignKey(columnWorldId, worldTable.getTableName(), worldTable.getColumnID()) - .foreignKey(columnSessionID, sessionsTable.getTableName(), sessionsTable.getColumnID()) + .column(Col.USER_ID, Sql.INT).notNull() + .column(Col.WORLD_ID, Sql.INT).notNull() + .column(Col.SESSION_ID, Sql.INT).notNull() + .column(Col.SURVIVAL, Sql.LONG).notNull().defaultValue("0") + .column(Col.CREATIVE, Sql.LONG).notNull().defaultValue("0") + .column(Col.ADVENTURE, Sql.LONG).notNull().defaultValue("0") + .column(Col.SPECTATOR, Sql.LONG).notNull().defaultValue("0") + .foreignKey(Col.USER_ID, usersTable.getTableName(), UsersTable.Col.ID) + .foreignKey(Col.WORLD_ID, worldTable.getTableName(), WorldTable.Col.ID) + .foreignKey(Col.SESSION_ID, sessionsTable.getTableName(), SessionsTable.Col.ID) .toString() ); } + public void addWorldTimesToSessions(UUID uuid, Map sessions) throws SQLException { + String worldIDColumn = worldTable + "." + WorldTable.Col.ID; + String worldNameColumn = worldTable + "." + WorldTable.Col.NAME + " as world_name"; + String sql = "SELECT " + + Col.SESSION_ID + ", " + + Col.SURVIVAL + ", " + + Col.CREATIVE + ", " + + Col.ADVENTURE + ", " + + Col.SPECTATOR + ", " + + worldNameColumn + + " FROM " + tableName + + " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + Col.WORLD_ID + + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID; + + query(new QueryStatement(sql, 2000) { + @Override + public void prepare(PreparedStatement statement) throws SQLException { + statement.setString(1, uuid.toString()); + } + + @Override + public Object processResults(ResultSet set) throws SQLException { + String[] gms = GMTimes.getGMKeyArray(); + + while (set.next()) { + int sessionID = set.getInt(Col.SESSION_ID.get()); + Session session = sessions.get(sessionID); + + if (session == null) { + continue; + } + + String worldName = set.getString("world_name"); + + Map gmMap = new HashMap<>(); + gmMap.put(gms[0], set.getLong(Col.SURVIVAL.get())); + gmMap.put(gms[1], set.getLong(Col.CREATIVE.get())); + gmMap.put(gms[2], set.getLong(Col.ADVENTURE.get())); + gmMap.put(gms[3], set.getLong(Col.SPECTATOR.get())); + GMTimes gmTimes = new GMTimes(gmMap); + + session.getWorldTimes().setGMTimesForWorld(worldName, gmTimes); + } + return null; + } + }); + } + public void saveWorldTimes(UUID uuid, int sessionID, WorldTimes worldTimes) throws SQLException { Map worldTimesMap = worldTimes.getWorldTimes(); if (Verify.isEmpty(worldTimesMap)) { @@ -103,74 +148,22 @@ public class WorldTimesTable extends UserIDTable { }); } - public void addWorldTimesToSessions(UUID uuid, Map sessions) throws SQLException { - String worldIDColumn = worldTable + "." + worldTable.getColumnID(); - String worldNameColumn = worldTable + "." + worldTable.getColumnWorldName() + " as world_name"; - String sql = "SELECT " + - columnSessionID + ", " + - columnSurvival + ", " + - columnCreative + ", " + - columnAdventure + ", " + - columnSpectator + ", " + - worldNameColumn + - " FROM " + tableName + - " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + columnWorldId + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID; - - query(new QueryStatement(sql, 2000) { - @Override - public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, uuid.toString()); - } - - @Override - public Object processResults(ResultSet set) throws SQLException { - String[] gms = GMTimes.getGMKeyArray(); - - while (set.next()) { - int sessionID = set.getInt(columnSessionID); - Session session = sessions.get(sessionID); - - if (session == null) { - continue; - } - - String worldName = set.getString("world_name"); - - Map gmMap = new HashMap<>(); - gmMap.put(gms[0], set.getLong(columnSurvival)); - gmMap.put(gms[1], set.getLong(columnCreative)); - gmMap.put(gms[2], set.getLong(columnAdventure)); - gmMap.put(gms[3], set.getLong(columnSpectator)); - GMTimes gmTimes = new GMTimes(gmMap); - - session.getWorldTimes().setGMTimesForWorld(worldName, gmTimes); - } - return null; - } - }); - } - - public WorldTimes getWorldTimesOfServer() throws SQLException { - return getWorldTimesOfServer(ServerInfo.getServerUUID()); - } - public WorldTimes getWorldTimesOfServer(UUID serverUUID) throws SQLException { - String worldIDColumn = worldTable + "." + worldTable.getColumnID(); - String worldNameColumn = worldTable + "." + worldTable.getColumnWorldName() + " as world_name"; - String sessionIDColumn = sessionsTable + "." + sessionsTable.getColumnID(); + String worldIDColumn = worldTable + "." + WorldTable.Col.ID; + String worldNameColumn = worldTable + "." + WorldTable.Col.NAME + " as world_name"; + String sessionIDColumn = sessionsTable + "." + SessionsTable.Col.ID; String sessionServerIDColumn = sessionsTable + ".server_id"; String sql = "SELECT " + - "SUM(" + columnSurvival + ") as survival, " + - "SUM(" + columnCreative + ") as creative, " + - "SUM(" + columnAdventure + ") as adventure, " + - "SUM(" + columnSpectator + ") as spectator, " + + "SUM(" + Col.SURVIVAL + ") as survival, " + + "SUM(" + Col.CREATIVE + ") as creative, " + + "SUM(" + Col.ADVENTURE + ") as adventure, " + + "SUM(" + Col.SPECTATOR + ") as spectator, " + worldNameColumn + " FROM " + tableName + - " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + columnWorldId + - " INNER JOIN " + sessionsTable + " on " + sessionIDColumn + "=" + columnSessionID + + " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + Col.WORLD_ID + + " INNER JOIN " + sessionsTable + " on " + sessionIDColumn + "=" + Col.SESSION_ID + " WHERE " + sessionServerIDColumn + "=" + db.getServerTable().statementSelectServerID + - " GROUP BY " + columnWorldId; + " GROUP BY " + Col.WORLD_ID; return query(new QueryStatement(sql, 1000) { @Override @@ -200,19 +193,23 @@ public class WorldTimesTable extends UserIDTable { }); } + public WorldTimes getWorldTimesOfServer() throws SQLException { + return getWorldTimesOfServer(ServerInfo.getServerUUID()); + } + public WorldTimes getWorldTimesOfUser(UUID uuid) throws SQLException { - String worldIDColumn = worldTable + "." + worldTable.getColumnID(); - String worldNameColumn = worldTable + "." + worldTable.getColumnWorldName() + " as world_name"; + String worldIDColumn = worldTable + "." + WorldTable.Col.ID; + String worldNameColumn = worldTable + "." + WorldTable.Col.NAME + " as world_name"; String sql = "SELECT " + - "SUM(" + columnSurvival + ") as survival, " + - "SUM(" + columnCreative + ") as creative, " + - "SUM(" + columnAdventure + ") as adventure, " + - "SUM(" + columnSpectator + ") as spectator, " + + "SUM(" + Col.SURVIVAL + ") as survival, " + + "SUM(" + Col.CREATIVE + ") as creative, " + + "SUM(" + Col.ADVENTURE + ") as adventure, " + + "SUM(" + Col.SPECTATOR + ") as spectator, " + worldNameColumn + " FROM " + tableName + - " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + columnWorldId + - " WHERE " + columnUserID + "=" + usersTable.statementSelectID + - " GROUP BY " + columnWorldId; + " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + Col.WORLD_ID + + " WHERE " + Col.USER_ID + "=" + usersTable.statementSelectID + + " GROUP BY " + Col.WORLD_ID; return query(new QueryStatement(sql) { @Override @@ -242,6 +239,46 @@ public class WorldTimesTable extends UserIDTable { }); } + public Map getAllWorldTimesBySessionID() throws SQLException { + String worldIDColumn = worldTable + "." + WorldTable.Col.ID; + String worldNameColumn = worldTable + "." + WorldTable.Col.NAME + " as world_name"; + String sql = "SELECT " + + Col.SESSION_ID + ", " + + Col.SURVIVAL + ", " + + Col.CREATIVE + ", " + + Col.ADVENTURE + ", " + + Col.SPECTATOR + ", " + + worldNameColumn + + " FROM " + tableName + + " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + Col.WORLD_ID; + + return query(new QueryAllStatement>(sql, 50000) { + @Override + public Map processResults(ResultSet set) throws SQLException { + String[] gms = GMTimes.getGMKeyArray(); + + Map worldTimes = new HashMap<>(); + while (set.next()) { + int sessionID = set.getInt(Col.SESSION_ID.get()); + + String worldName = set.getString("world_name"); + + Map gmMap = new HashMap<>(); + gmMap.put(gms[0], set.getLong(Col.SURVIVAL.get())); + gmMap.put(gms[1], set.getLong(Col.CREATIVE.get())); + gmMap.put(gms[2], set.getLong(Col.ADVENTURE.get())); + gmMap.put(gms[3], set.getLong(Col.SPECTATOR.get())); + GMTimes gmTimes = new GMTimes(gmMap); + + WorldTimes worldTOfSession = worldTimes.getOrDefault(sessionID, new WorldTimes(new HashMap<>())); + worldTOfSession.setGMTimesForWorld(worldName, gmTimes); + worldTimes.put(sessionID, worldTOfSession); + } + return worldTimes; + } + }); + } + public void addWorldTimesToSessions(Map>> map) throws SQLException { Map worldTimesBySessionID = getAllWorldTimesBySessionID(); @@ -306,51 +343,28 @@ public class WorldTimesTable extends UserIDTable { }); } - public Map getAllWorldTimesBySessionID() throws SQLException { - String worldIDColumn = worldTable + "." + worldTable.getColumnID(); - String worldNameColumn = worldTable + "." + worldTable.getColumnWorldName() + " as world_name"; - String sql = "SELECT " + - columnSessionID + ", " + - columnSurvival + ", " + - columnCreative + ", " + - columnAdventure + ", " + - columnSpectator + ", " + - worldNameColumn + - " FROM " + tableName + - " INNER JOIN " + worldTable + " on " + worldIDColumn + "=" + columnWorldId; + public enum Col implements Column { + USER_ID(UserIDTable.Col.USER_ID.get()), + SESSION_ID("session_id"), + WORLD_ID("world_id"), + SURVIVAL("survival_time"), + CREATIVE("creative_time"), + ADVENTURE("adventure_time"), + SPECTATOR("spectator_time"); - return query(new QueryAllStatement>(sql, 50000) { - @Override - public Map processResults(ResultSet set) throws SQLException { - String[] gms = GMTimes.getGMKeyArray(); + private final String column; - Map worldTimes = new HashMap<>(); - while (set.next()) { - int sessionID = set.getInt(columnSessionID); + Col(String column) { + this.column = column; + } - String worldName = set.getString("world_name"); + public String get() { + return toString(); + } - Map gmMap = new HashMap<>(); - gmMap.put(gms[0], set.getLong(columnSurvival)); - gmMap.put(gms[1], set.getLong(columnCreative)); - gmMap.put(gms[2], set.getLong(columnAdventure)); - gmMap.put(gms[3], set.getLong(columnSpectator)); - GMTimes gmTimes = new GMTimes(gmMap); - - WorldTimes worldTOfSession = worldTimes.getOrDefault(sessionID, new WorldTimes(new HashMap<>())); - worldTOfSession.setGMTimesForWorld(worldName, gmTimes); - worldTimes.put(sessionID, worldTOfSession); - } - return worldTimes; - } - }); - } - - String getColumnWorldId() { - return columnWorldId; - } - - String getColumnSessionID() { - return columnSessionID; + @Override + public String toString() { + return column; + } } } From 28435c2dc534b6a37d51662cf400c15aebf3440c Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Thu, 1 Mar 2018 12:05:58 +0200 Subject: [PATCH 14/15] Added missing override annotations --- .../system/database/databases/sql/tables/ActionsTable.java | 1 + .../system/database/databases/sql/tables/CommandUseTable.java | 1 + .../system/database/databases/sql/tables/GeoInfoTable.java | 1 + .../plan/system/database/databases/sql/tables/KillsTable.java | 1 + .../system/database/databases/sql/tables/NicknamesTable.java | 1 + .../system/database/databases/sql/tables/SecurityTable.java | 1 + .../plan/system/database/databases/sql/tables/ServerTable.java | 1 + .../system/database/databases/sql/tables/SessionsTable.java | 1 + .../plan/system/database/databases/sql/tables/TPSTable.java | 1 + .../system/database/databases/sql/tables/TransferTable.java | 1 + .../plan/system/database/databases/sql/tables/UserIDTable.java | 1 + .../system/database/databases/sql/tables/UserInfoTable.java | 1 + .../plan/system/database/databases/sql/tables/UsersTable.java | 1 + .../plan/system/database/databases/sql/tables/WorldTable.java | 1 + .../system/database/databases/sql/tables/WorldTimesTable.java | 1 + .../plan/system/webserver/HTTPSWebServerAuthTest.java | 3 +++ 16 files changed, 18 insertions(+) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java index 4d39beeaa..909211fd1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ActionsTable.java @@ -239,6 +239,7 @@ public class ActionsTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java index 5c2404199..7789cd356 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/CommandUseTable.java @@ -212,6 +212,7 @@ public class CommandUseTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java index 0a31f0a2a..af8b8b133 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/GeoInfoTable.java @@ -191,6 +191,7 @@ public class GeoInfoTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java index b091b3f5e..72d34a41f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/KillsTable.java @@ -268,6 +268,7 @@ public class KillsTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java index 68c958929..fed5411e9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/NicknamesTable.java @@ -211,6 +211,7 @@ public class NicknamesTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java index e6873e062..991253570 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SecurityTable.java @@ -133,6 +133,7 @@ public class SecurityTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java index 93ddf6e92..f0bb04d92 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java @@ -428,6 +428,7 @@ public class ServerTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java index 8ab80befa..0e9f0441d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java @@ -733,6 +733,7 @@ public class SessionsTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java index 61b0ccd36..a690bafa4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TPSTable.java @@ -325,6 +325,7 @@ public class TPSTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java index 59a96bd28..7e16e2cad 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/TransferTable.java @@ -338,6 +338,7 @@ public class TransferTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java index c9a7ad677..38ca270d6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserIDTable.java @@ -28,6 +28,7 @@ public abstract class UserIDTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java index 50936571a..547fe2e53 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java @@ -350,6 +350,7 @@ public class UserInfoTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java index 39fa1389d..d205d4977 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UsersTable.java @@ -470,6 +470,7 @@ public class UsersTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java index 9e2bc997a..feb37de00 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTable.java @@ -168,6 +168,7 @@ public class WorldTable extends Table { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java index 70b790409..6c9b6897d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/WorldTimesTable.java @@ -358,6 +358,7 @@ public class WorldTimesTable extends UserIDTable { this.column = column; } + @Override public String get() { return toString(); } diff --git a/Plan/src/test/java/com/djrapitops/plan/system/webserver/HTTPSWebServerAuthTest.java b/Plan/src/test/java/com/djrapitops/plan/system/webserver/HTTPSWebServerAuthTest.java index 43ea62a77..a4dbf2278 100644 --- a/Plan/src/test/java/com/djrapitops/plan/system/webserver/HTTPSWebServerAuthTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/system/webserver/HTTPSWebServerAuthTest.java @@ -72,14 +72,17 @@ public class HTTPSWebServerAuthTest { private static final TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { + @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } + @Override public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { //No need to implement. } + @Override public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { //No need to implement. } From 5ea82565d52224246a70c2fc265e30669c3517a1 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 2 Mar 2018 17:20:57 +0200 Subject: [PATCH 15/15] Version bump to 4.1.7 --- Plan/src/main/resources/bungee.yml | 2 +- Plan/src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plan/src/main/resources/bungee.yml b/Plan/src/main/resources/bungee.yml index 503a149ea..d41124a40 100644 --- a/Plan/src/main/resources/bungee.yml +++ b/Plan/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.PlanBungee -version: 4.1.6-b3 \ No newline at end of file +version: 4.1.7 \ No newline at end of file diff --git a/Plan/src/main/resources/plugin.yml b/Plan/src/main/resources/plugin.yml index f90bf3866..1d04e5fa3 100644 --- a/Plan/src/main/resources/plugin.yml +++ b/Plan/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.Plan -version: 4.1.6-b3 +version: 4.1.7 softdepend: - EssentialsX - Towny