Browse Source
* Several e/p/h can be entered in entity column (all tables), permission column, parent column. Like destinations. Split them by comma, semicolon, and space chars. * DatabaseContents normalize(); replaces destination parsing in db connection. * BridgeForBukkitAPI in API folder * Removed AbstractRow * Rows are implement Cloneable. * More platform independence. * etc.master
28 changed files with 276 additions and 243 deletions
@ -1,4 +1,4 @@
|
||||
package ru.simsonic.rscPermissions.DataTypes; |
||||
package ru.simsonic.rscPermissions.API; |
||||
|
||||
public enum EntityType |
||||
{ |
@ -0,0 +1,17 @@
|
||||
package ru.simsonic.rscPermissions.API; |
||||
import java.sql.Timestamp; |
||||
|
||||
public class RowEntity implements Cloneable |
||||
{ |
||||
public int id; |
||||
public String entity; |
||||
public EntityType entityType; |
||||
public String prefix; |
||||
public String suffix; |
||||
public Timestamp lifetime; |
||||
@Override |
||||
public RowEntity clone() throws CloneNotSupportedException |
||||
{ |
||||
return (RowEntity)super.clone(); |
||||
} |
||||
} |
@ -0,0 +1,20 @@
|
||||
package ru.simsonic.rscPermissions.API; |
||||
import java.sql.Timestamp; |
||||
|
||||
public class RowPermission implements Cloneable |
||||
{ |
||||
public int id; |
||||
public String entity; |
||||
public EntityType entityType; |
||||
public String permission; |
||||
public boolean value; |
||||
public Destination destination; |
||||
public int expirience; |
||||
public Timestamp lifetime; |
||||
public transient String destinationSource; |
||||
@Override |
||||
public RowPermission clone() throws CloneNotSupportedException |
||||
{ |
||||
return (RowPermission)super.clone(); |
||||
} |
||||
} |
@ -0,0 +1,87 @@
|
||||
package ru.simsonic.rscPermissions.Backends; |
||||
import java.util.ArrayList; |
||||
import ru.simsonic.rscPermissions.API.Destination; |
||||
import ru.simsonic.rscPermissions.API.RowEntity; |
||||
import ru.simsonic.rscPermissions.API.RowInheritance; |
||||
import ru.simsonic.rscPermissions.API.RowPermission; |
||||
import ru.simsonic.rscPermissions.InternalCache.Matchers; |
||||
|
||||
public class DatabaseContents |
||||
{ |
||||
public RowEntity entities[]; |
||||
public RowPermission permissions[]; |
||||
public RowInheritance inheritance[]; |
||||
public void normalize() |
||||
{ |
||||
if(entities == null) |
||||
entities = new RowEntity[] {}; |
||||
if(permissions == null) |
||||
permissions = new RowPermission[] {}; |
||||
if(inheritance == null) |
||||
inheritance = new RowInheritance[] {}; |
||||
final ArrayList<RowEntity> le = new ArrayList<>(); |
||||
final ArrayList<RowPermission> lp = new ArrayList<>(); |
||||
final ArrayList<RowInheritance> li = new ArrayList<>(); |
||||
try |
||||
{ |
||||
// Entities
|
||||
for(RowEntity row : entities) |
||||
{ |
||||
final String[] splittedByEntity = Matchers.genericParse(row.entity); |
||||
for(String oneEntity : splittedByEntity) |
||||
{ |
||||
final RowEntity clone = row.clone(); |
||||
clone.entity = oneEntity; |
||||
le.add(clone); |
||||
} |
||||
} |
||||
// Permissions
|
||||
for(RowPermission row : permissions) |
||||
{ |
||||
final String[] splittedByEntity = Matchers.genericParse(row.entity); |
||||
final String[] splittedByPermission = Matchers.genericParse(row.permission); |
||||
final String[] splittedByDestination = Matchers.genericParse(row.destinationSource); |
||||
row.destinationSource = null; |
||||
for(String oneDestination : splittedByDestination) |
||||
{ |
||||
final Destination destination = Destination.parseDestination(oneDestination); |
||||
for(String permission : splittedByPermission) |
||||
for(String entity : splittedByEntity) |
||||
{ |
||||
final RowPermission clone = row.clone(); |
||||
clone.entity = entity; |
||||
clone.permission = permission; |
||||
clone.destination = destination; |
||||
lp.add(clone); |
||||
} |
||||
} |
||||
} |
||||
// Inheritance
|
||||
for(RowInheritance row : inheritance) |
||||
{ |
||||
final String[] splittedByEntity = Matchers.genericParse(row.entity); |
||||
final String[] splittedByParent = Matchers.genericParse(row.parent); |
||||
final String[] splittedByDestination = Matchers.genericParse(row.destinationSource); |
||||
row.destinationSource = null; |
||||
for(String oneDestination : splittedByDestination) |
||||
{ |
||||
final Destination destination = Destination.parseDestination(oneDestination); |
||||
for(String parent : splittedByParent) |
||||
for(String entity : splittedByEntity) |
||||
{ |
||||
final RowInheritance clone = row.clone(); |
||||
clone.entity = entity; |
||||
clone.parent = parent; |
||||
clone.deriveInstance(); |
||||
clone.destination = destination; |
||||
li.add(clone); |
||||
} |
||||
} |
||||
} |
||||
} catch(CloneNotSupportedException ex) { |
||||
} |
||||
entities = le.toArray(new RowEntity[le.size()]); |
||||
permissions = lp.toArray(new RowPermission[lp.size()]); |
||||
inheritance = li.toArray(new RowInheritance[li.size()]); |
||||
} |
||||
} |
@ -1,36 +0,0 @@
|
||||
package ru.simsonic.rscPermissions.DataTypes; |
||||
import java.util.ArrayList; |
||||
|
||||
public class DatabaseContents |
||||
{ |
||||
public RowEntity entities[]; |
||||
public RowPermission permissions[]; |
||||
public RowInheritance inheritance[]; |
||||
public void normalize() |
||||
{ |
||||
// Entities
|
||||
final ArrayList<RowEntity> listE = new ArrayList<>(); |
||||
if(entities != null) |
||||
for(RowEntity rowE : entities) |
||||
{ |
||||
listE.add(rowE); |
||||
} |
||||
entities = listE.toArray(new RowEntity[listE.size()]); |
||||
// Permissions
|
||||
final ArrayList<RowPermission> listP = new ArrayList<>(); |
||||
if(permissions != null) |
||||
for(RowPermission rowP : permissions) |
||||
{ |
||||
listP.add(rowP); |
||||
} |
||||
permissions = listP.toArray(new RowPermission[listP.size()]); |
||||
// Inheritance
|
||||
final ArrayList<RowInheritance> listI = new ArrayList<>(); |
||||
if(inheritance != null) |
||||
for(RowInheritance rowI : inheritance) |
||||
{ |
||||
listI.add(rowI); |
||||
} |
||||
inheritance = listI.toArray(new RowInheritance[listI.size()]); |
||||
} |
||||
} |
@ -1,11 +0,0 @@
|
||||
package ru.simsonic.rscPermissions.DataTypes; |
||||
import java.sql.Timestamp; |
||||
|
||||
public class RowEntity extends AbstractRow |
||||
{ |
||||
public String entity; |
||||
public EntityType entityType; |
||||
public String prefix; |
||||
public String suffix; |
||||
public Timestamp lifetime; |
||||
} |
@ -1,13 +0,0 @@
|
||||
package ru.simsonic.rscPermissions.DataTypes; |
||||
import java.sql.Timestamp; |
||||
|
||||
public class RowPermission extends AbstractRow |
||||
{ |
||||
public String entity; |
||||
public EntityType entityType; |
||||
public String permission; |
||||
public boolean value; |
||||
public Destination destination; |
||||
public int expirience; |
||||
public Timestamp lifetime; |
||||
} |
@ -0,0 +1,31 @@
|
||||
package ru.simsonic.rscPermissions; |
||||
import java.io.File; |
||||
import java.util.logging.Logger; |
||||
import ru.simsonic.rscPermissions.Backends.BackendDatabase; |
||||
import ru.simsonic.rscPermissions.Backends.BackendJson; |
||||
import ru.simsonic.rscPermissions.Backends.DatabaseContents; |
||||
import ru.simsonic.rscPermissions.InternalCache.InternalCache; |
||||
|
||||
public class IndependentMain |
||||
{ |
||||
private static final BackendJson localJsn = new BackendJson(new File("../")); |
||||
private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal(), "test"); |
||||
private static final InternalCache intCache = new InternalCache(); |
||||
@SuppressWarnings({"DeadBranch", "UnusedAssignment"}) |
||||
public static void main(String args[]) |
||||
{ |
||||
String[] qqq = "".split("x+"); |
||||
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); |
||||
System.out.println("https://github.com/SimSonic/rscPermissions/"); |
||||
// TESTING HERE
|
||||
remoteDb.initialize(null, "voxile.ru:3306/servers-shared", "", "", "rscp_"); |
||||
if(remoteDb.connect()) |
||||
{ |
||||
final DatabaseContents contents = remoteDb.retrieveContents(); |
||||
contents.normalize(); |
||||
localJsn.cleanup(); |
||||
localJsn.saveContents(contents); |
||||
intCache.fill(contents); |
||||
} |
||||
} |
||||
} |
@ -1,9 +1,15 @@
|
||||
package ru.simsonic.rscPermissions.DataTypes; |
||||
package ru.simsonic.rscPermissions.InternalCache; |
||||
import java.util.regex.Pattern; |
||||
|
||||
public abstract class AbstractRow |
||||
public class Matchers |
||||
{ |
||||
public int id = 0; |
||||
private static final String genericSplitter = "\\s*[;,\\r\\n\\s]+\\s*"; |
||||
public static String[] genericParse(String multiobject) |
||||
{ |
||||
if(multiobject == null) |
||||
multiobject = ""; |
||||
return multiobject.split(genericSplitter); |
||||
} |
||||
private static final Pattern patternUUID = Pattern.compile( |
||||
"<uuid>" + "(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})" + "</uuid>"); |
||||
private static boolean isCorrectUUID(String entityName) |
Loading…
Reference in new issue