Use oid and fixId everywhere for safety.

This commit is contained in:
Olof Larsson 2013-03-04 11:04:51 +01:00
parent 5c2752129d
commit 2543fc306e
2 changed files with 34 additions and 19 deletions

View File

@ -281,8 +281,9 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
protected Set<L> localDetachIds; protected Set<L> localDetachIds;
protected Set<L> changedIds; protected Set<L> changedIds;
protected synchronized void clearIdentifiedChanges(L id) protected synchronized void clearIdentifiedChanges(Object oid)
{ {
L id = this.fixId(oid);
this.localAttachIds.remove(id); this.localAttachIds.remove(id);
this.localDetachIds.remove(id); this.localDetachIds.remove(id);
this.changedIds.remove(id); this.changedIds.remove(id);
@ -296,8 +297,9 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
protected Map<L, Object> lastRaw; protected Map<L, Object> lastRaw;
protected Set<L> lastDefault; protected Set<L> lastDefault;
protected synchronized void clearSynclog(L id) protected synchronized void clearSynclog(Object oid)
{ {
L id = this.fixId(oid);
this.lastMtime.remove(id); this.lastMtime.remove(id);
this.lastRaw.remove(id); this.lastRaw.remove(id);
this.lastDefault.remove(id); this.lastDefault.remove(id);
@ -309,8 +311,9 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
@SuppressWarnings({ "unchecked", "rawtypes" }) @SuppressWarnings({ "unchecked", "rawtypes" })
@Override @Override
public synchronized E removeAtLocal(L id) public synchronized E removeAtLocal(Object oid)
{ {
L id = this.fixId(oid);
this.clearIdentifiedChanges(id); this.clearIdentifiedChanges(id);
this.clearSynclog(id); this.clearSynclog(id);
@ -330,8 +333,10 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
} }
@Override @Override
public synchronized void removeAtRemote(L id) public synchronized void removeAtRemote(Object oid)
{ {
L id = this.fixId(oid);
this.clearIdentifiedChanges(id); this.clearIdentifiedChanges(id);
this.clearSynclog(id); this.clearSynclog(id);
@ -339,8 +344,10 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
} }
@Override @Override
public synchronized void saveToRemote(L id) public synchronized void saveToRemote(Object oid)
{ {
L id = this.fixId(oid);
this.clearIdentifiedChanges(id); this.clearIdentifiedChanges(id);
this.clearSynclog(id); this.clearSynclog(id);
@ -364,8 +371,10 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
} }
@Override @Override
public synchronized void loadFromRemote(L id) public synchronized void loadFromRemote(Object oid)
{ {
L id = this.fixId(oid);
this.clearIdentifiedChanges(id); this.clearIdentifiedChanges(id);
Entry<?, Long> entry = this.getDb().getDriver().load(this, id); Entry<?, Long> entry = this.getDb().getDriver().load(this, id);
@ -396,19 +405,23 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
// -------------------------------------------- // // -------------------------------------------- //
@Override @Override
public ModificationState examineId(L id) public ModificationState examineId(Object oid)
{ {
L id = this.fixId(oid);
return this.examineId(id, null, false); return this.examineId(id, null, false);
} }
@Override @Override
public ModificationState examineId(L id, Long remoteMtime) public ModificationState examineId(Object oid, Long remoteMtime)
{ {
L id = this.fixId(oid);
return this.examineId(id, remoteMtime, true); return this.examineId(id, remoteMtime, true);
} }
protected ModificationState examineId(L id, Long remoteMtime, boolean remoteMtimeSupplied) protected ModificationState examineId(Object oid, Long remoteMtime, boolean remoteMtimeSupplied)
{ {
L id = this.fixId(oid);
if (this.localDetachIds.contains(id)) return ModificationState.LOCAL_DETACH; if (this.localDetachIds.contains(id)) return ModificationState.LOCAL_DETACH;
if (this.localAttachIds.contains(id)) return ModificationState.LOCAL_ATTACH; if (this.localAttachIds.contains(id)) return ModificationState.LOCAL_ATTACH;
@ -456,8 +469,10 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
} }
@Override @Override
public ModificationState syncId(L id) public ModificationState syncId(Object oid)
{ {
L id = this.fixId(oid);
ModificationState mstate = this.examineId(id); ModificationState mstate = this.examineId(id);
//mplugin.log("syncId: It seems", id, "has state", mstate); //mplugin.log("syncId: It seems", id, "has state", mstate);

View File

@ -93,7 +93,7 @@ public interface CollInterface<E, L extends Comparable<? super L>>
public Set<L> localAttachIds(); public Set<L> localAttachIds();
public Set<L> localDetachIds(); public Set<L> localDetachIds();
public Set<L> changedIds(); public Set<L> changedIds();
public void clearIdentifiedChanges(L id); public void clearIdentifiedChanges(Object oid);
*/ */
// -------------------------------------------- // // -------------------------------------------- //
@ -104,26 +104,26 @@ public interface CollInterface<E, L extends Comparable<? super L>>
public Map<L, Long> lastMtime(); public Map<L, Long> lastMtime();
public Map<L, Object> lastRaw(); public Map<L, Object> lastRaw();
public Set<L> lastDefault(); public Set<L> lastDefault();
public void clearSynclog(L id); public void clearSynclog(Object oid);
*/ */
// -------------------------------------------- // // -------------------------------------------- //
// SYNC LOWLEVEL IO ACTIONS // SYNC LOWLEVEL IO ACTIONS
// -------------------------------------------- // // -------------------------------------------- //
public E removeAtLocal(L id); public E removeAtLocal(Object oid);
public void removeAtRemote(L id); public void removeAtRemote(Object oid);
public void saveToRemote(L id); public void saveToRemote(Object oid);
public void loadFromRemote(L id); public void loadFromRemote(Object oid);
// -------------------------------------------- // // -------------------------------------------- //
// SYNC EXAMINE AND DO // SYNC EXAMINE AND DO
// -------------------------------------------- // // -------------------------------------------- //
public ModificationState examineId(L id); public ModificationState examineId(Object oid);
public ModificationState examineId(L id, Long remoteMtime); public ModificationState examineId(Object oid, Long remoteMtime);
public ModificationState syncId(L id); public ModificationState syncId(Object oid);
public void syncSuspects(); public void syncSuspects();
public void syncAll(); public void syncAll();
public void findSuspects(); public void findSuspects();