Browse Source

Changelog:

* Destination::toString().
* BukkitUtilities.java
* Local cache files are renamed to be closer [in alphabetic order].
* Deployment creates schema.
* A bit better example entities.
master
Stanislav Usenkov 9 years ago
parent
commit
05e21b047d
  1. 15
      src/main/java/ru/simsonic/rscPermissions/API/Destination.java
  2. 7
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  3. 8
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java
  4. 3
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java
  5. 23
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
  6. 24
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java
  7. 21
      src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
  8. 9
      src/main/resources/sqlt/Deployment.sqlt
  9. 13
      src/main/resources/sqlt/ExampleContents.sqlt

15
src/main/java/ru/simsonic/rscPermissions/API/Destination.java

@ -69,21 +69,26 @@ public class Destination
"<wildcard>" + testing.toLowerCase() + "</wildcard>",
"<wildcard>" + pattern.toLowerCase() + "</wildcard>");
}
private static final Pattern destinationPattern = Pattern.compile(
private static final Pattern DESTINATION_PATTERN = Pattern.compile(
"(?:([\\w\\-\\_\\*\\?]*):)?([\\w\\-\\_\\*\\?]*)?(?:@([\\w\\-\\_\\*\\?]*))?");
public static Destination parseDestination(String destination)
{
final Matcher match = destinationPattern.matcher(destination);
final Matcher match = DESTINATION_PATTERN.matcher(destination);
if(match.find())
{
final String groupR = match.group(1);
final String groupW = match.group(2);
final String groupS = match.group(3);
final String region = (groupR == null || "".equals(groupR)) ? "*" : groupR;
final String world = (groupW == null || "".equals(groupW)) ? "*" : groupW;
final String serverId = (groupS == null || "".equals(groupS)) ? "*" : groupS;
final String region = (groupR == null || "".equals(groupR) ? "*" : groupR);
final String world = (groupW == null || "".equals(groupW) ? "*" : groupW);
final String serverId = (groupS == null || "".equals(groupS) ? "*" : groupS);
return new Destination(region, world, serverId);
}
return new Destination();
}
@Override
public String toString()
{
return String.format("%s:%s@%s", region, world, serverId);
}
}

7
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java

@ -50,13 +50,6 @@ public class BridgeForBukkitAPI
{
return rscp.isEnabled();
}
public Player findPlayer(String player)
{
for(Player online : Tools.getOnlinePlayers())
if(online.getName().equals(player))
return online;
return null;
}
protected void setupVault()
{
final ConsoleCommandSender console = rscp.getServer().getConsoleSender();

8
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java

@ -4,9 +4,17 @@ import java.net.InetSocketAddress;
import java.util.ArrayList;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
public class BukkitUtilities
{
public static Player findOnlinePlayer(String player)
{
for(Player online : Tools.getOnlinePlayers())
if(online.getName().equals(player))
return online;
return null;
}
public static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline)
{
final ArrayList<String> result = new ArrayList<>();

3
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java

@ -5,6 +5,7 @@ import java.util.Collections;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseTransaction;
import ru.simsonic.rscPermissions.Engine.Matchers;
@ -28,7 +29,7 @@ public class CommandUser
{
if(args.length < 3)
return;
final Player player = rscp.bridgeForBukkit.findPlayer(args[1]);
final Player player = BukkitUtilities.findOnlinePlayer(args[1]);
if(player != null)
args[1] = player.getName();
final ResolutionResult result = (player != null)

23
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java

@ -148,14 +148,19 @@ public class BackendDatabase extends ConnectionMySQL
{
executeUpdate("ROLLBACK;");
}
public synchronized void modifyDatabase()
{
lockTableEntities();
// FETCH ALL DATA
transactionStart();
// MAKE MODIFICATIONS
transactionCommit();
unlockAllTables();
// FETCH ALL DATA AGAIN
public synchronized void removeEntityById(long id)
{
setupQueryTemplate("{ID}", Long.toString(id));
executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}entities` WHERE `id` = '{ID}';");
}
public synchronized void removePermissionsById(long id)
{
setupQueryTemplate("{ID}", Long.toString(id));
executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}permissions` WHERE `id` = '{ID}';");
}
public synchronized void removeInheritanceById(long id)
{
setupQueryTemplate("{ID}", Long.toString(id));
executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}inheritance` WHERE `id` = '{ID}';");
}
}

24
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java

@ -21,30 +21,30 @@ public class BackendJson
{
this.workingDir = workingDir;
}
private final static String entitiesFile = "entities.json";
private final static String permissionsFile = "permissions.json";
private final static String inheritanceFile = "inheritance.json";
private final static String FILE_ENTITIES = "cached_entities.json";
private final static String FILE_PERMISSIONS = "cached_permissions.json";
private final static String FILE_INHERICATNCE = "cached_inheritance.json";
public synchronized DatabaseContents retrieveContents()
{
final Gson gson = new Gson();
final DatabaseContents result = new DatabaseContents();
// Entities
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(workingDir, entitiesFile)), Charset.forName("UTF-8"))))
new File(workingDir, FILE_ENTITIES)), Charset.forName("UTF-8"))))
{
result.entities = gson.fromJson(jr, RowEntity[].class);
} catch(IOException ex) {
}
// Permissions
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(workingDir, permissionsFile)), Charset.forName("UTF-8"))))
new File(workingDir, FILE_PERMISSIONS)), Charset.forName("UTF-8"))))
{
result.permissions = gson.fromJson(jr, RowPermission[].class);
} catch(IOException ex) {
}
// Inheritance
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(workingDir, inheritanceFile)), Charset.forName("UTF-8"))))
new File(workingDir, FILE_INHERICATNCE)), Charset.forName("UTF-8"))))
{
result.inheritance = gson.fromJson(jr, RowInheritance[].class);
} catch(IOException ex) {
@ -58,7 +58,7 @@ public class BackendJson
if(contents.entities == null)
contents.entities = new RowEntity[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
new File(workingDir, entitiesFile)), Charset.forName("UTF-8"))))
new File(workingDir, FILE_ENTITIES)), Charset.forName("UTF-8"))))
{
jw.setIndent("\t");
gson.toJson(contents.entities, RowEntity[].class, jw);
@ -68,7 +68,7 @@ public class BackendJson
if(contents.permissions == null)
contents.permissions = new RowPermission[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
new File(workingDir, permissionsFile)), Charset.forName("UTF-8"))))
new File(workingDir, FILE_PERMISSIONS)), Charset.forName("UTF-8"))))
{
jw.setIndent("\t");
gson.toJson(contents.permissions, RowPermission[].class, jw);
@ -78,7 +78,7 @@ public class BackendJson
if(contents.inheritance == null)
contents.inheritance = new RowInheritance[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
new File(workingDir, inheritanceFile)), Charset.forName("UTF-8"))))
new File(workingDir, FILE_INHERICATNCE)), Charset.forName("UTF-8"))))
{
jw.setIndent("\t");
gson.toJson(contents.inheritance, RowInheritance[].class, jw);
@ -87,8 +87,8 @@ public class BackendJson
}
public synchronized void cleanup()
{
new File(workingDir, entitiesFile).delete();
new File(workingDir, permissionsFile).delete();
new File(workingDir, inheritanceFile).delete();
new File(workingDir, FILE_ENTITIES).delete();
new File(workingDir, FILE_PERMISSIONS).delete();
new File(workingDir, FILE_INHERICATNCE).delete();
}
}

21
src/main/java/ru/simsonic/rscPermissions/IndependentMain.java

@ -12,23 +12,28 @@ import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class IndependentMain
{
private static final BackendJson localJsn = new BackendJson(new File("../"));
private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal());
private static final BackendDatabase database = new BackendDatabase(Logger.getGlobal());
private static final InternalCache intCache = new InternalCache();
@SuppressWarnings({"DeadBranch", "UnusedAssignment"})
public static void main(String args[])
{
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("https://github.com/SimSonic/rscPermissions/");
// TESTING HERE
remoteDb.initialize(null,
"", // DATABASE
"", // USERNAME
"", // PASSWORD
// OK, IT'S SECURE FROM YOU :)
database.initialize(null,
"SCOUT:3306/rscp_testing", // DATABASE
"rscp_testing", // USERNAME
"rscp_testing", // PASSWORD
"rscp_");
if(remoteDb.connect())
if(database.connect())
{
System.out.println("Retrieving permissions from database into json files.");
final DatabaseContents contents = remoteDb.retrieveContents();
DatabaseContents contents = database.retrieveContents();
if(contents.isEmpty())
{
database.insertExampleRows();
contents = database.retrieveContents();
}
contents.normalize();
localJsn.cleanup();
localJsn.saveContents(contents);

9
src/main/resources/sqlt/Deployment.sqlt

@ -1,3 +1,6 @@
CREATE DATABASE IF NOT EXISTS `{DATABASE}`
DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`entity` VARCHAR(64) NOT NULL,
@ -8,7 +11,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` (
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `entity_UNIQUE` (`entity`, `entity_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
@ -22,7 +25,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` (
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `permission_UNIQUE` (`entity`, `entity_type`, `permission`, `destination`, `expirience`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
@ -36,4 +39,4 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
PRIMARY KEY (`id`, `entity`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `inheritance_UNIQUE` (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';

13
src/main/resources/sqlt/ExampleContents.sqlt

@ -2,11 +2,14 @@ INSERT IGNORE INTO
`{DATABASE}`.`{PREFIX}entities`
(`entity`, `entity_type`, `prefix`, `suffix`)
VALUES
('Default', b'0', '§r', '§r'),
('Donators', b'0', '§r§6[Premium]§e', '§r'),
('Builders', b'0', '§r§5[Builder]§d', '§r'),
('Moderators', b'0', '§r§b[Moderator]§6', '§r'),
('Administrators', b'0', '§r§c[Administrator]§6', '§r');
('Administrators', b'0', '§r§c[Admin]§6', '§r'),
('Moderators', b'0', '§r§b[Moder]§6', '§r'),
('Builders', b'0', '§r§5[Build]§d', '§r'),
('Helpers' , b'0', '§r§5[Help]§d', '§r'),
('VIP', b'0', '§r§8[V]§f', '§r'),
('Premium', b'0', '§r§6[P]§e', '§r'),
('Default', b'0', '§r', '§r'),
('Guests', b'0', '§r§0[G]§8', '§r');
INSERT IGNORE INTO
`{DATABASE}`.`{PREFIX}permissions`

Loading…
Cancel
Save