From 5845a7c19b481e32e0bb9739d74ae06c70b6a90b Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Sun, 2 Sep 2012 14:13:20 +0200 Subject: [PATCH] Renaming WCat to USel. Some universe messing around. --- src/com/massivecraft/mcore4/store/Coll.java | 24 +++++++++-- .../mcore4/store/CollInterface.java | 2 + src/com/massivecraft/mcore4/store/Colls.java | 40 +++++++++++------- src/com/massivecraft/mcore4/store/Entity.java | 8 ++++ .../mcore4/store/{WCat.java => USel.java} | 42 +++++++++---------- .../massivecraft/mcore4/store/USelColl.java | 41 ++++++++++++++++++ .../store/{WCatRule.java => USelRule.java} | 6 +-- .../massivecraft/mcore4/store/WCatColl.java | 41 ------------------ 8 files changed, 122 insertions(+), 82 deletions(-) rename src/com/massivecraft/mcore4/store/{WCat.java => USel.java} (53%) create mode 100644 src/com/massivecraft/mcore4/store/USelColl.java rename src/com/massivecraft/mcore4/store/{WCatRule.java => USelRule.java} (73%) delete mode 100644 src/com/massivecraft/mcore4/store/WCatColl.java diff --git a/src/com/massivecraft/mcore4/store/Coll.java b/src/com/massivecraft/mcore4/store/Coll.java index caa7dd39..ff30755e 100644 --- a/src/com/massivecraft/mcore4/store/Coll.java +++ b/src/com/massivecraft/mcore4/store/Coll.java @@ -30,13 +30,19 @@ public class Coll implements CollInterface // WHAT DO WE HANDLE? // -------------------------------------------- // - protected String name; + protected final String name; @Override public String name() { return this.name; } - protected Class entityClass; + protected final String nameBase; + @Override public String nameBase() { return this.nameBase; } + + protected final String nameUniverse; + @Override public String nameUniverse() { return this.nameUniverse; } + + protected final Class entityClass; @Override public Class entityClass() { return this.entityClass; } - protected Class idClass; + protected final Class idClass; @Override public Class idClass() { return this.idClass; } // -------------------------------------------- // @@ -525,7 +531,19 @@ public class Coll implements CollInterface public Coll(Db db, MPlugin mplugin, String idStrategyName, String name, Class entityClass, Class idClass, boolean creative) { + // Setup the name and the parsed parts this.name = name; + String[] nameParts = this.name.split("\\@"); + this.nameBase = nameParts[0]; + if (nameParts.length > 1) + { + this.nameUniverse = nameParts[1]; + } + else + { + this.nameUniverse = null; + } + this.entityClass = entityClass; this.idClass = idClass; this.creative = creative; diff --git a/src/com/massivecraft/mcore4/store/CollInterface.java b/src/com/massivecraft/mcore4/store/CollInterface.java index 87e6fdbc..28178784 100644 --- a/src/com/massivecraft/mcore4/store/CollInterface.java +++ b/src/com/massivecraft/mcore4/store/CollInterface.java @@ -15,6 +15,8 @@ public interface CollInterface // WHAT DO WE HANDLE? // -------------------------------------------- // public String name(); + public String nameBase(); + public String nameUniverse(); public Class entityClass(); public Class idClass(); diff --git a/src/com/massivecraft/mcore4/store/Colls.java b/src/com/massivecraft/mcore4/store/Colls.java index 818264d7..79f7035f 100644 --- a/src/com/massivecraft/mcore4/store/Colls.java +++ b/src/com/massivecraft/mcore4/store/Colls.java @@ -7,20 +7,39 @@ import com.massivecraft.mcore4.util.MUtil; public abstract class Colls, E, L> { - public abstract String name(); - public abstract C createColl(String collName); + protected Map name2coll = new HashMap(); - public String collNameFromCategory(String category) + public abstract C createColl(String name); + + public abstract String getContext(); + + public String universeFromWorldName(String worldName) { - return this.name() + "_" + category; + USel selector = USelColl.i.get(this.getContext()); + return selector.select(worldName); } - protected Map name2coll = new HashMap(); public C get(Object worldNameExtractable) { String worldName = MUtil.extract(String.class, "worldName", worldNameExtractable); - String category = WCatColl.i.get(this.name()).categorize(worldName); - String collName = this.collNameFromCategory(category); + return this.getForWorld(worldName); + } + + public E get2(Object worldNameExtractable) + { + C coll = this.get(worldNameExtractable); + if (coll == null) return null; + return coll.get(worldNameExtractable); + } + + public C getForWorld(String worldName) + { + return this.getForUniverse(this.universeFromWorldName(worldName)); + } + + public C getForUniverse(String universe) + { + String collName = this.getContext() + "@" + universe; C ret = this.name2coll.get(collName); if (ret == null) @@ -31,11 +50,4 @@ public abstract class Colls, E, L> return ret; } - - public E get2(Object worldNameExtractable) - { - C coll = this.get(worldNameExtractable); - if (coll == null) return null; - return coll.get(worldNameExtractable); - } } diff --git a/src/com/massivecraft/mcore4/store/Entity.java b/src/com/massivecraft/mcore4/store/Entity.java index 4b910fb8..07d8d37c 100644 --- a/src/com/massivecraft/mcore4/store/Entity.java +++ b/src/com/massivecraft/mcore4/store/Entity.java @@ -23,6 +23,14 @@ public abstract class Entity, L> public abstract E getDefaultInstance(); + public String getUniverse() + { + Coll coll = this.getColl(); + if (coll == null) return null; + + return coll.nameUniverse(); + } + public L attach(Coll coll) { return coll.attach(getThis()); diff --git a/src/com/massivecraft/mcore4/store/WCat.java b/src/com/massivecraft/mcore4/store/USel.java similarity index 53% rename from src/com/massivecraft/mcore4/store/WCat.java rename to src/com/massivecraft/mcore4/store/USel.java index 8197ce22..07911afa 100644 --- a/src/com/massivecraft/mcore4/store/WCat.java +++ b/src/com/massivecraft/mcore4/store/USel.java @@ -8,46 +8,46 @@ import java.util.List; import com.massivecraft.mcore4.util.MUtil; /** - * WCat stands for World Categorizer. - * They provide a recursive matching system. + * USel stands for "Universe Selector". + * The task of a USel is to select a "universe" based on a world. + * There will be one USel per "context". */ -public class WCat extends Entity +public class USel extends Entity { public final static transient String RETURN = "_return"; public final static transient String RUN = "_run"; public final static transient String _DEFAULT = "_default"; public final static transient String DEFAULT = "default"; - public final static transient List DEFAULT_RULES = MUtil.list(new WCatRule(RUN, _DEFAULT)); - public final static transient List DEFAULT_DEFAULT_RULES = MUtil.list(new WCatRule(RETURN, DEFAULT)); + public final static transient List DEFAULT_RULES = MUtil.list(new USelRule(RUN, _DEFAULT)); + public final static transient List DEFAULT_DEFAULT_RULES = MUtil.list(new USelRule(RETURN, DEFAULT)); // -------------------------------------------- // // META // -------------------------------------------- // - @Override public Coll getColl() { return WCatColl.i; } - @Override protected WCat getThis() { return this; } + @Override protected USel getThis() { return this; } - private final static transient WCat defaultInstance = new WCat(); - @Override public WCat getDefaultInstance(){ return defaultInstance; } - @Override protected Class getClazz() { return WCat.class; } + private final static transient USel defaultInstance = new USel(); + @Override public USel getDefaultInstance(){ return defaultInstance; } + @Override protected Class getClazz() { return USel.class; } // -------------------------------------------- // // FIELDS // -------------------------------------------- // - protected List rules; - public List rules() { return this.rules; }; - public void rules(List val) { this.rules = new ArrayList(val); }; + protected List rules; + public List rules() { return this.rules; }; + public void rules(List val) { this.rules = new ArrayList(val); }; public void rules(String... namesAndParams) { - this.rules = new ArrayList(); + this.rules = new ArrayList(); Iterator iter = Arrays.asList(namesAndParams).iterator(); while (iter.hasNext()) { String name = iter.next(); String param = iter.next(); - this.rules.add(new WCatRule(name, param)); + this.rules.add(new USelRule(name, param)); } } @@ -55,7 +55,7 @@ public class WCat extends Entity // CONSTRUCT // -------------------------------------------- // - public WCat() + public USel() { this.rules(DEFAULT_RULES); } @@ -64,9 +64,9 @@ public class WCat extends Entity // THAT SPECIAL LOGIC // -------------------------------------------- // - public String categorize(String worldName) + public String select(String worldName) { - for (WCatRule rule : this.rules()) + for (USelRule rule : this.rules()) { String name = rule.name(); String param = rule.param(); @@ -76,9 +76,9 @@ public class WCat extends Entity } else if (name.equals(RUN)) { - WCat subcat = WCatColl.i.get(param); - String subcatresult = subcat.categorize(worldName); - if (subcatresult != null) return subcatresult; + USel subSelector = USelColl.i.get(param); + String subSelectorResult = subSelector.select(worldName); + if (subSelectorResult != null) return subSelectorResult; } else if (name.equalsIgnoreCase(worldName)) { diff --git a/src/com/massivecraft/mcore4/store/USelColl.java b/src/com/massivecraft/mcore4/store/USelColl.java new file mode 100644 index 00000000..931ca790 --- /dev/null +++ b/src/com/massivecraft/mcore4/store/USelColl.java @@ -0,0 +1,41 @@ +package com.massivecraft.mcore4.store; + +import com.massivecraft.mcore4.MCore; + +public class USelColl extends Coll +{ + // -------------------------------------------- // + // META + // -------------------------------------------- // + public static USelColl i = new USelColl(); + + private USelColl() + { + super(MCore.p, "ai", "mcore_usel", USel.class, String.class, true); + } + + @Override + public void copy(Object ofrom, Object oto) + { + USel from = (USel)ofrom; + USel to = (USel)oto; + to.rules = from.rules; + } + + @Override + public void init() + { + super.init(); + + // Ensure the default WorldCategorizer is present. + USel d = this.get(USel._DEFAULT); + d.rules(USel.DEFAULT_DEFAULT_RULES); + } + + @Override + public boolean isDefault(USel entity) + { + return entity.rules().equals(USel.DEFAULT_RULES); + } + +} diff --git a/src/com/massivecraft/mcore4/store/WCatRule.java b/src/com/massivecraft/mcore4/store/USelRule.java similarity index 73% rename from src/com/massivecraft/mcore4/store/WCatRule.java rename to src/com/massivecraft/mcore4/store/USelRule.java index e82da987..f0bc3af5 100644 --- a/src/com/massivecraft/mcore4/store/WCatRule.java +++ b/src/com/massivecraft/mcore4/store/USelRule.java @@ -1,6 +1,6 @@ package com.massivecraft.mcore4.store; -public class WCatRule +public class USelRule { protected final String name; public String name() { return this.name; } @@ -8,13 +8,13 @@ public class WCatRule protected final String param; public String param() { return this.param; } - public WCatRule() + public USelRule() { this.name = null; this.param = null; } - public WCatRule(String name, String param) + public USelRule(String name, String param) { this.name = name; this.param = param; diff --git a/src/com/massivecraft/mcore4/store/WCatColl.java b/src/com/massivecraft/mcore4/store/WCatColl.java deleted file mode 100644 index aa42a542..00000000 --- a/src/com/massivecraft/mcore4/store/WCatColl.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.massivecraft.mcore4.store; - -import com.massivecraft.mcore4.MCore; - -public class WCatColl extends Coll -{ - // -------------------------------------------- // - // META - // -------------------------------------------- // - public static WCatColl i = new WCatColl(); - - private WCatColl() - { - super(MCore.p, "ai", "mcore_wcat", WCat.class, String.class, true); - } - - @Override - public void copy(Object ofrom, Object oto) - { - WCat from = (WCat)ofrom; - WCat to = (WCat)oto; - to.rules = from.rules; - } - - @Override - public void init() - { - super.init(); - - // Ensure the default WorldCategorizer is present. - WCat d = this.get(WCat._DEFAULT); - d.rules(WCat.DEFAULT_DEFAULT_RULES); - } - - @Override - public boolean isDefault(WCat entity) - { - return entity.rules().equals(WCat.DEFAULT_RULES); - } - -}