Usages of string representation of mof id replaced by object representation of mof id, hard-referencing of string representation of mof id replaced by weak-referencing
1.1 --- a/mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java Wed Sep 01 16:04:15 2004 +0000
1.2 +++ b/mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java Wed Sep 01 16:05:51 2004 +0000
1.3 @@ -364,7 +364,7 @@
1.4 return null;
1.5 }
1.6
1.7 - public void removeHandler(String mofId) {
1.8 + public void removeHandler(MOFID mofId) {
1.9 synchronized (facilityCache) {
1.10 facilityCache.remove(mofId);
1.11 }
1.12 @@ -372,13 +372,13 @@
1.13
1.14 public void addHandler(BaseObjectHandler handler) {
1.15 StorableBaseObject s = handler._getDelegate();
1.16 - Object lock = s.getMdrStorage().getStorageByMofId(s.getMofId());
1.17 + MOFID mofId = s.getMofId();
1.18 + Object lock = s.getMdrStorage().getStorageByMofId(mofId);
1.19 if (lock == null)
1.20 lock = facilityCache;
1.21
1.22 synchronized (lock) {
1.23 synchronized (facilityCache) {
1.24 - String mofId = s.getMofId().toString();
1.25 facilityCache.put(mofId, handler);
1.26 }
1.27 }
1.28 @@ -579,7 +579,7 @@
1.29 classCache.clear();
1.30 }
1.31
1.32 - public RefBaseObject getHandler(String mofId) {
1.33 + public RefBaseObject getHandler(MOFID mofId) {
1.34 synchronized (facilityCache) {
1.35 return (BaseObjectHandler) (facilityCache.get(mofId));
1.36 }
1.37 @@ -596,7 +596,7 @@
1.38 return null;
1.39 }
1.40
1.41 - RefBaseObject refBO = getHandler(s.getMofId().toString());
1.42 + RefBaseObject refBO = getHandler(s.getMofId());
1.43 if (refBO == null) {
1.44 Class ifc = BaseObjectHandler.resolveClass(s);
1.45 refBO = getHandler(s, ifc);
1.46 @@ -635,14 +635,13 @@
1.47 }
1.48 /* create handler object, if necessary */
1.49 Constructor cons = cl.getConstructor(new Class[] {cls});
1.50 -
1.51 - Object lock = s.getMdrStorage().getStorageByMofId(s.getMofId());
1.52 + MOFID mofId = s.getMofId();
1.53 + Object lock = s.getMdrStorage().getStorageByMofId(mofId);
1.54 if (lock == null)
1.55 lock = facilityCache;
1.56
1.57 synchronized (lock) {
1.58 synchronized (facilityCache) {
1.59 - String mofId = s.getMofId().toString();
1.60 Object oldRecord = facilityCache.get(mofId);
1.61 if (oldRecord == null) {
1.62 oldRecord = cons.newInstance(new Object[] {s});
1.63 @@ -788,10 +787,10 @@
1.64 MOFID saMofId = (MOFID) it.next();
1.65 StorableAssociation sa = (StorableAssociation) mdrStorage.getObject(saMofId);
1.66 if (!((Association) getHandler(sa.getMetaObject())).isDerived()) {
1.67 - Object metaCls = ((AssociationEnd) getByMofId(sa.getEnd1Id().toString())).getType();
1.68 + Object metaCls = ((AssociationEnd) getByMofId(sa.getEnd1Id())).getType();
1.69 StorableClass cls = (StorableClass) classProxies.get(metaCls);
1.70 cls.addAssociationEnd(saMofId, sa.getEnd1Name(), sa.isAggregateA());
1.71 - metaCls = ((AssociationEnd) getByMofId(sa.getEnd2Id().toString())).getType();
1.72 + metaCls = ((AssociationEnd) getByMofId(sa.getEnd2Id())).getType();
1.73 cls = (StorableClass) classProxies.get(metaCls);
1.74 if (cls != null) {
1.75 cls.addAssociationEnd(saMofId, sa.getEnd2Name(), sa.isAggregateB());
1.76 @@ -1367,14 +1366,14 @@
1.77 private boolean cleaningUp = false;
1.78
1.79 private class HandlerReference extends WeakReference {
1.80 - private String mofId;
1.81 + private MOFID mofId;
1.82 // hard reference on an element when it should not be garbagecollected
1.83 private RefBaseObject baseObject;
1.84
1.85 public HandlerReference(BaseObjectHandler handler) {
1.86 super(handler, queue);
1.87
1.88 - mofId = handler._getDelegate().getMofId().toString();
1.89 + mofId = handler._getMofId();
1.90
1.91 if (handler.refImmediatePackage() instanceof javax.jmi.model.ModelPackage || !(handler instanceof RefObject)) {
1.92 // the object is from a metamodel or it is a proxy => we will keep "hard" reference
1.93 @@ -1385,7 +1384,7 @@
1.94 }
1.95 }
1.96
1.97 - public String getProxyMofId() {
1.98 + public MOFID getProxyMofId() {
1.99 return mofId;
1.100 }
1.101 }
1.102 @@ -1397,7 +1396,7 @@
1.103 try {
1.104 while ((reference = (HandlerReference) queue.poll()) != null) {
1.105 // Logger.getDefault().log("Removing: " + reference.getProxyMofId());
1.106 - String mofId = reference.getProxyMofId();
1.107 + MOFID mofId = reference.getProxyMofId();
1.108 java.lang.ref.Reference currentRef = (java.lang.ref.Reference) super.remove(mofId);
1.109 if (currentRef != null && currentRef != reference && currentRef.get() != null) {
1.110 super.put(mofId, currentRef);
2.1 --- a/mdr/src/org/netbeans/mdr/handlers/BaseObjectHandler.java Wed Sep 01 16:04:15 2004 +0000
2.2 +++ b/mdr/src/org/netbeans/mdr/handlers/BaseObjectHandler.java Wed Sep 01 16:05:51 2004 +0000
2.3 @@ -339,7 +339,7 @@
2.4 boolean register = false;
2.5 MOFID newMofId = storable.getMofId();
2.6 if (this.mofId != null && !this.mofId.equals(newMofId)) {
2.7 - _getRepository().removeHandler(this.mofId.toString());
2.8 + _getRepository().removeHandler(this.mofId);
2.9 register = true;
2.10 }
2.11 this.mofId = newMofId;
3.1 --- a/mdr/src/org/netbeans/mdr/handlers/InstanceHandler.java Wed Sep 01 16:04:15 2004 +0000
3.2 +++ b/mdr/src/org/netbeans/mdr/handlers/InstanceHandler.java Wed Sep 01 16:05:51 2004 +0000
3.3 @@ -308,7 +308,7 @@
3.4 } finally {
3.5 _unlock(fail);
3.6 }
3.7 - _getRepository().removeHandler(refMofId());
3.8 + _getRepository().removeHandler(_getMofId());
3.9 }
3.10
3.11 protected void _delete() {
4.1 --- a/mdr/src/org/netbeans/mdr/handlers/PackageProxyHandler.java Wed Sep 01 16:04:15 2004 +0000
4.2 +++ b/mdr/src/org/netbeans/mdr/handlers/PackageProxyHandler.java Wed Sep 01 16:05:51 2004 +0000
4.3 @@ -326,7 +326,7 @@
4.4 } finally {
4.5 _unlock(fail);
4.6 }
4.7 - _getRepository().removeHandler(refMofId());
4.8 + _getRepository().removeHandler(_getMofId());
4.9 }
4.10
4.11 /* -------------------------------------------------------------------- */
5.1 --- a/mdr/src/org/netbeans/mdr/persistence/MOFID.java Wed Sep 01 16:04:15 2004 +0000
5.2 +++ b/mdr/src/org/netbeans/mdr/persistence/MOFID.java Wed Sep 01 16:05:51 2004 +0000
5.3 @@ -13,6 +13,7 @@
5.4 package org.netbeans.mdr.persistence;
5.5
5.6 import java.io.*;
5.7 +import java.lang.ref.WeakReference;
5.8 import java.text.*;
5.9 import java.util.*;
5.10 import org.netbeans.mdr.persistence.*;
5.11 @@ -26,7 +27,7 @@
5.12 public static final int STRING_LENGTH = 16;
5.13
5.14 private long serialNumber;
5.15 - private String string = null;
5.16 + private WeakReference string;
5.17 private String storageId = null;
5.18
5.19
5.20 @@ -63,6 +64,7 @@
5.21 /** compare MOFIDs as values
5.22 */
5.23 public boolean equals(Object o) {
5.24 + if (o == this) return true;
5.25 if (!(o instanceof MOFID))
5.26 return false;
5.27 if (this.serialNumber != ((MOFID)o).serialNumber)
5.28 @@ -98,10 +100,12 @@
5.29 * Convert to external form.
5.30 */
5.31 public String toString() {
5.32 - if (string == null) {
5.33 - string = makeString(storageId, serialNumber);
5.34 + String result = string == null ? null : (String) string.get();
5.35 + if (result == null) {
5.36 + result = makeString(storageId, serialNumber);
5.37 + string = new WeakReference(result);
5.38 }
5.39 - return string;
5.40 + return result;
5.41 }
5.42
5.43 private static int[] longwords;
5.44 @@ -133,7 +137,9 @@
5.45 public static MOFID fromString(String mofId) {
5.46 int pos = mofId.lastIndexOf(':');
5.47 if (pos >= 0) try {
5.48 - return new MOFID(Long.parseLong(mofId.substring(pos + 1), 16), mofId.substring(0, pos));
5.49 + MOFID result = new MOFID(Long.parseLong(mofId.substring(pos + 1), 16), mofId.substring(0, pos));
5.50 + result.string = new WeakReference(mofId);
5.51 + return result;
5.52 } catch (NumberFormatException e) {
5.53 } catch (IndexOutOfBoundsException e) {
5.54 }