### Eclipse Workspace Patch 1.0 #P org.sophie2.base.model.text Index: src/main/java/org/sophie2/base/model/text/smart/layout/HotLayout.java =================================================================== --- src/main/java/org/sophie2/base/model/text/smart/layout/HotLayout.java (revision 8460) +++ src/main/java/org/sophie2/base/model/text/smart/layout/HotLayout.java (working copy) @@ -137,7 +137,7 @@ List areas = this.layout.getAreas(); int lastIndex = areas.size() - 1; if (lastIndex == -1) { - return 0; + return -1; } int firstInLastPage = areas.size() - areasCount; ImmHotText hotText = this.getAreaContent(firstInLastPage); #P org.sophie2.base.model.resources.r4 Index: src/main/java/org/sophie2/base/model/resources/r4/access/DelegatingAccess.java =================================================================== --- src/main/java/org/sophie2/base/model/resources/r4/access/DelegatingAccess.java (revision 8460) +++ src/main/java/org/sophie2/base/model/resources/r4/access/DelegatingAccess.java (working copy) @@ -6,6 +6,7 @@ import org.sophie2.base.model.resources.r4.access.cacheKey.DelegatingAccessCacheKey; import org.sophie2.base.model.resources.r4.changes.Change; import org.sophie2.base.model.resources.r4.keys.Key; +import org.sophie2.base.model.resources.r4.keys.RootKey; import org.sophie2.base.model.resources.r4.model.ResourceRevision; import org.sophie2.base.model.resources.r4.model.RevisionId; import org.sophie2.base.model.resources.r4.resources.ResourceR4; @@ -20,6 +21,9 @@ */ public abstract class DelegatingAccess extends BaseResourceAccess { + private RootKey subKey = null; + + /** * The parent access that this inner delegates to. */ @@ -87,7 +91,14 @@ public T getRaw(Key key) { // security - return this.masterAccess.getRaw(ResourceR4.KEY_CHILDREN.sub(this.location).sub(key)); + return this.masterAccess.getRaw(getSubKey().sub(key)); + } + + private RootKey getSubKey() { + if (this.subKey == null) { + this.subKey = ResourceR4.KEY_CHILDREN.sub(this.location); + } + return this.subKey; } public void registerChange(Change change) { Index: src/main/java/org/sophie2/base/model/resources/r4/keys/Key.java =================================================================== --- src/main/java/org/sophie2/base/model/resources/r4/keys/Key.java (revision 8460) +++ src/main/java/org/sophie2/base/model/resources/r4/keys/Key.java (working copy) @@ -179,14 +179,15 @@ @Override public int hashCode() { - return getId() == null ? 0 : getId().hashCode(); + return getId() == null ? 0 : getParts().hashCode(); } @Override public boolean equals(Object obj) { if(obj instanceof Key) { - String otherKey = ((Key)obj).getId(); - return getId() == null ? otherKey == null : getId().equals(otherKey); + ImmList otherKeyParts = ((Key)obj).getParts(); + return getParts() == null ? otherKeyParts == null : + getParts().equals(otherKeyParts); } return false; } Index: src/main/java/org/sophie2/base/model/resources/r4/changes/SubResourceChanger.java =================================================================== --- src/main/java/org/sophie2/base/model/resources/r4/changes/SubResourceChanger.java (revision 8460) +++ src/main/java/org/sophie2/base/model/resources/r4/changes/SubResourceChanger.java (working copy) @@ -5,6 +5,7 @@ import org.sophie2.base.commons.util.ImmList; import org.sophie2.base.model.resources.r4.ResourceRefR4; import org.sophie2.base.model.resources.r4.keys.Key; +import org.sophie2.base.model.resources.r4.keys.RootKey; import org.sophie2.base.model.resources.r4.resources.ResourceR4; /** @@ -14,8 +15,10 @@ * @author mira, meddle */ public class SubResourceChanger extends ResourceChanger { + private final ResourceChanger parent; private final ResourceRefR4 prefix; + private final RootKey subKey; /** * Constructs a {@link SubResourceChanger} by its parent and prefix @@ -30,6 +33,7 @@ assert prefix != null; this.parent = parent; this.prefix = prefix; + this.subKey = ResourceR4.KEY_CHILDREN.sub(this.prefix); } @Override @@ -44,13 +48,12 @@ public T getRaw(Key key) { - return this.parent.getRaw( - ResourceR4.KEY_CHILDREN.sub(this.prefix).sub(key)); + return this.parent.getRaw(this.subKey.sub(key)); } @Override public void setRaw(Key key, T value) { - this.parent.setRaw(ResourceR4.KEY_CHILDREN.sub(this.prefix).sub(key), value); + this.parent.setRaw(this.subKey.sub(key), value); } @Override @@ -84,4 +87,5 @@ public boolean hasChild(ResourceRefR4 ref) { return this.parent.hasChild(this.prefix.sub(ref)); } + } \ No newline at end of file