fixed usage of datatypes from imported packages, fixed usage of attributes and attribute indexes in federated storages BLD200301140100
authormmatula@netbeans.org
Mon, 13 Jan 2003 09:56:58 +0000
changeset 11689f2ef1a69541
parent 1167 31b82db83c95
child 1169 b690f1adfed3
fixed usage of datatypes from imported packages, fixed usage of attributes and attribute indexes in federated storages
mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java
mdr/src/org/netbeans/mdr/handlers/FeaturedHandler.java
mdr/src/org/netbeans/mdr/storagemodel/MdrStorage.java
mdr/src/org/netbeans/mdr/storagemodel/StorableBaseObject.java
mdr/src/org/netbeans/mdr/storagemodel/StorableClass.java
mdr/src/org/netbeans/mdr/storagemodel/StorableObject.java
mdr/src/org/netbeans/mdr/util/IOUtils.java
mdr/src/org/netbeans/mdr/util/ValueWrapper.java
     1.1 --- a/mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java	Sat Jan 11 03:19:29 2003 +0000
     1.2 +++ b/mdr/src/org/netbeans/mdr/NBMDRepositoryImpl.java	Mon Jan 13 09:56:58 2003 +0000
     1.3 @@ -544,7 +544,7 @@
     1.4          
     1.5          Set localAssocProxies = new HashSet();
     1.6          Map localClassProxies = new HashMap();
     1.7 -        instantiatePackageContent(metaPackage, newPackage, clusteredInstances, localClassProxies, localAssocProxies);
     1.8 +        instantiatePackageContent(metaPackage, newPackage, clusteredInstances, localClassProxies, localAssocProxies, storageId);
     1.9          resolveSuperclasses(localClassProxies);
    1.10          
    1.11          // [PENDING] need to fix the mutex ordering and NPE and then uncomment this
    1.12 @@ -664,7 +664,7 @@
    1.13       * @param localClassProxies
    1.14       * @param localAssocProxies
    1.15       */
    1.16 -    private void instantiatePackageContent(MofPackage metaPackage, StorablePackage newPackage, Map clusteredInstances, Map localClassProxies, Set localAssocProxies) {
    1.17 +    private void instantiatePackageContent(MofPackage metaPackage, StorablePackage newPackage, Map clusteredInstances, Map localClassProxies, Set localAssocProxies, String storageId) {
    1.18          Iterator superTypes = metaPackage.allSupertypes().iterator();
    1.19          boolean thisTypeNotProcessed = true;
    1.20          while (thisTypeNotProcessed || superTypes.hasNext()) {
    1.21 @@ -729,19 +729,17 @@
    1.22                  } else if (element instanceof  MofPackage) {
    1.23                      //                Logger.getDefault().log("found inner package");
    1.24                      //                Logger.getDefault().log("creating: META: " + element.refMofId() + ", IMMEDIATE: " + newPackage.refMofId() + ", CONTEXT: " + context);
    1.25 -                    String storageId = MdrStorage.getStorageIdFromMofId(newPackage.getMofId());
    1.26                      StorablePackage pkg = createPackageHandler((MofPackage) element, newPackage, null, storageId, false);
    1.27 -                    instantiatePackageContent((MofPackage) element, pkg, clusteredInstances, localClassProxies, localAssocProxies);
    1.28 +                    instantiatePackageContent((MofPackage) element, pkg, clusteredInstances, localClassProxies, localAssocProxies, storageId);
    1.29                  } else if (element instanceof Import) {
    1.30                      Import imp = (Import) element;
    1.31 -                    
    1.32 -                    if (imp.isClustered()) {
    1.33 -                        ModelElement metaElement = imp.getImportedNamespace();
    1.34 -                        if (metaElement instanceof MofPackage) {
    1.35 -                            MofPackage metaPkg = (MofPackage) metaElement;
    1.36 +                    ModelElement metaElement = imp.getImportedNamespace();
    1.37 +                    if (metaElement instanceof MofPackage) {
    1.38 +                        MofPackage metaPkg = (MofPackage) metaElement;
    1.39 +                        collectDTDescriptors(storageId, metaPkg, new HashSet());
    1.40 +                        if (imp.isClustered()) {
    1.41                              RefPackage pkg = (RefPackage) clusteredInstances.get(((BaseObjectHandler)metaPkg)._getDelegate().getMofId());
    1.42                              if (pkg == null) {
    1.43 -                                String storageId = MdrStorage.getStorageIdFromMofId(newPackage.getMofId());
    1.44                                  pkg = instantiatePackage(null, newPackage, metaPkg, clusteredInstances, storageId, true);
    1.45                                  clusteredInstances.put(((BaseObjectHandler)metaPkg)._getDelegate().getMofId(), pkg);
    1.46                              } else {
    1.47 @@ -753,12 +751,51 @@
    1.48                                  throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
    1.49                              }
    1.50                          } // if
    1.51 -                    } // if
    1.52 +                    } else if (metaElement instanceof EnumerationType) {
    1.53 +                        createDTDescriptor(storageId, (EnumerationType) metaElement);
    1.54 +                    } else if (metaElement instanceof StructureType) {
    1.55 +                        createDTDescriptor(storageId, (StructureType) metaElement);
    1.56 +                    } else if (metaElement instanceof MofClass) {
    1.57 +                        collectDTDescriptors(storageId, (MofClass) metaElement, new HashSet());
    1.58 +                    }
    1.59                  } // if
    1.60              } // while
    1.61          } // while
    1.62      }
    1.63      
    1.64 +    private void collectDTDescriptors(String storageId, GeneralizableElement metaElement, Set visited) {
    1.65 +        Iterator superTypes = metaElement.allSupertypes().iterator();
    1.66 +        boolean thisTypeNotProcessed = true;
    1.67 +        while (thisTypeNotProcessed || superTypes.hasNext()) {
    1.68 +            Iterator it;
    1.69 +            if (thisTypeNotProcessed) {
    1.70 +                it = metaElement.getContents().iterator();
    1.71 +                thisTypeNotProcessed = false;
    1.72 +            } else {
    1.73 +                GeneralizableElement ge = (GeneralizableElement) superTypes.next();
    1.74 +                if (!visited.add(ge)) continue;
    1.75 +                it = ge.getContents().iterator();
    1.76 +            }
    1.77 +            
    1.78 +            collectDTDescriptors(storageId, it, visited);
    1.79 +        }
    1.80 +    }
    1.81 +    
    1.82 +    private void collectDTDescriptors(String storageId, Iterator it, Set visited) {
    1.83 +        while (it.hasNext()) {
    1.84 +            Object element = it.next();
    1.85 +            if (element instanceof MofPackage || element instanceof MofClass) {
    1.86 +                if (visited.add(element)) {
    1.87 +                    collectDTDescriptors(storageId, (GeneralizableElement) element, visited);
    1.88 +                }
    1.89 +            } else if (element instanceof EnumerationType) {
    1.90 +                createDTDescriptor(storageId, (EnumerationType) element);
    1.91 +            } else if (element instanceof StructureType) {
    1.92 +                createDTDescriptor(storageId, (StructureType) element);
    1.93 +            }
    1.94 +        }
    1.95 +    }
    1.96 +    
    1.97      /**
    1.98       * Fills {@link #associationProxies}, {@link classProxies} and
    1.99       * {@link classProxiesMofIds} with the proxies contained in <code>pkg</code>
   1.100 @@ -812,27 +849,9 @@
   1.101                  for (Iterator it = metaPackage.getContents().iterator(); it.hasNext();) {
   1.102                      ModelElement element = (ModelElement) it.next();
   1.103                      if (element instanceof EnumerationType) {
   1.104 -                        List members = new ArrayList(((EnumerationType) element).getLabels());
   1.105 -                        String ifcName = TagSupport.getTypeFullName((StorableObject) ((BaseObjectHandler) element)._getDelegate());
   1.106 -                        datatypes.put(element.getName(), new DatatypeDescriptor(mdrStorage, members, ifcName, storageId));
   1.107 +                        datatypes.put(element.getName(), createDTDescriptor(storageId, (EnumerationType) element));
   1.108                      } else if (element instanceof StructureType) {
   1.109 -                        ModelElement me;
   1.110 -                        List members = new ArrayList();
   1.111 -                        List memberTypes = new ArrayList();
   1.112 -
   1.113 -                        for (Iterator it2 = ((StructureType) element).getContents().iterator(); it2.hasNext();) {
   1.114 -                            me = (ModelElement) it2.next();
   1.115 -                            if (me instanceof StructureField) {
   1.116 -                                members.add(me.getName());
   1.117 -                                try {
   1.118 -                                    memberTypes.add(BaseObjectHandler.resolveInterface(TagSupport.getDataTypeName((StorableObject) ((BaseObjectHandler) ((StructureField) me).getType())._getDelegate())));
   1.119 -                                } catch (ClassNotFoundException e) {
   1.120 -                                    throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
   1.121 -                                }
   1.122 -                            }
   1.123 -                        }
   1.124 -                        String ifcName = TagSupport.getTypeFullName((StorableObject) ((BaseObjectHandler) element)._getDelegate());
   1.125 -                        datatypes.put(element.getName(), new DatatypeDescriptor(mdrStorage, element.getQualifiedName(), members, memberTypes, ifcName, storageId));
   1.126 +                        datatypes.put(element.getName(), createDTDescriptor(storageId, (StructureType) element));
   1.127                      }
   1.128                  }
   1.129              }
   1.130 @@ -854,6 +873,32 @@
   1.131          }
   1.132      }
   1.133      
   1.134 +    private DatatypeDescriptor createDTDescriptor(String storageId, EnumerationType enum) {
   1.135 +        List members = new ArrayList(enum.getLabels());
   1.136 +        String ifcName = TagSupport.getTypeFullName((StorableObject) ((BaseObjectHandler) enum)._getDelegate());
   1.137 +        return new DatatypeDescriptor(mdrStorage, members, ifcName, storageId);
   1.138 +    }
   1.139 +    
   1.140 +    private DatatypeDescriptor createDTDescriptor(String storageId, StructureType struct) {
   1.141 +        ModelElement me;
   1.142 +        List members = new ArrayList();
   1.143 +        List memberTypes = new ArrayList();
   1.144 +
   1.145 +        for (Iterator it2 = struct.getContents().iterator(); it2.hasNext();) {
   1.146 +            me = (ModelElement) it2.next();
   1.147 +            if (me instanceof StructureField) {
   1.148 +                members.add(me.getName());
   1.149 +                try {
   1.150 +                    memberTypes.add(BaseObjectHandler.resolveInterface(TagSupport.getDataTypeName((StorableObject) ((BaseObjectHandler) ((StructureField) me).getType())._getDelegate())));
   1.151 +                } catch (ClassNotFoundException e) {
   1.152 +                    throw (DebugException) Logger.getDefault().annotate(new DebugException(), e);
   1.153 +                }
   1.154 +            }
   1.155 +        }
   1.156 +        String ifcName = TagSupport.getTypeFullName((StorableObject) ((BaseObjectHandler) struct)._getDelegate());
   1.157 +        return new DatatypeDescriptor(mdrStorage, struct.getQualifiedName(), members, memberTypes, ifcName, storageId);
   1.158 +    }
   1.159 +    
   1.160      /** Creates handler for Class Proxy */
   1.161      private StorableClass createClassProxyHandler(MofClass metaObject, StorablePackage immediatePackage, Map localClassProxies) {
   1.162          ModelElement element;
     2.1 --- a/mdr/src/org/netbeans/mdr/handlers/FeaturedHandler.java	Sat Jan 11 03:19:29 2003 +0000
     2.2 +++ b/mdr/src/org/netbeans/mdr/handlers/FeaturedHandler.java	Mon Jan 13 09:56:58 2003 +0000
     2.3 @@ -65,20 +65,25 @@
     2.4  
     2.5      protected final Object _preSet(String featureName, Object newValue) {
     2.6          _lock(true);
     2.7 -        AttributeEvent event = new AttributeEvent(
     2.8 -            this, 
     2.9 -            AttributeEvent.EVENT_ATTRIBUTE_SET, 
    2.10 -            featureName, 
    2.11 -            _getAttribute(featureName), 
    2.12 -            newValue, 
    2.13 -            AttributeEvent.POSITION_NONE
    2.14 -        );
    2.15 -        if (this instanceof RefObject) {
    2.16 -            _getDelegate().getMdrStorage().getEventNotifier().INSTANCE.firePlannedChange(this, event);
    2.17 -        } else {
    2.18 -            _getDelegate().getMdrStorage().getEventNotifier().CLASS.firePlannedChange(this, event);
    2.19 -        }
    2.20 -        return event;
    2.21 +        Object oldValue = _getAttribute(featureName);
    2.22 +//        if (newValue == oldValue || (newValue != null && newValue.equals(oldValue))) {
    2.23 +//            return null;
    2.24 +//        } else {
    2.25 +            AttributeEvent event = new AttributeEvent(
    2.26 +                this, 
    2.27 +                AttributeEvent.EVENT_ATTRIBUTE_SET, 
    2.28 +                featureName, 
    2.29 +                oldValue, 
    2.30 +                newValue, 
    2.31 +                AttributeEvent.POSITION_NONE
    2.32 +            );
    2.33 +            if (this instanceof RefObject) {
    2.34 +                _getDelegate().getMdrStorage().getEventNotifier().INSTANCE.firePlannedChange(this, event);
    2.35 +            } else {
    2.36 +                _getDelegate().getMdrStorage().getEventNotifier().CLASS.firePlannedChange(this, event);
    2.37 +            }
    2.38 +            return event;
    2.39 +//        }
    2.40      }
    2.41      
    2.42      protected final void _postSet(Object extraInfo, boolean fail) {
     3.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/MdrStorage.java	Sat Jan 11 03:19:29 2003 +0000
     3.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/MdrStorage.java	Mon Jan 13 09:56:58 2003 +0000
     3.3 @@ -1521,6 +1521,10 @@
     3.4  
     3.5      public Storage getStorageByMofId (org.netbeans.mdr.persistence.MOFID mofId) {
     3.6          String storageId = getStorageIdFromMofId (mofId);
     3.7 +        return getStorageById(storageId);
     3.8 +    }
     3.9 +    
    3.10 +    public Storage getStorageById(String storageId) {
    3.11          if (storageId == null) {
    3.12              return null;
    3.13          }
     4.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/StorableBaseObject.java	Sat Jan 11 03:19:29 2003 +0000
     4.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/StorableBaseObject.java	Mon Jan 13 09:56:58 2003 +0000
     4.3 @@ -359,7 +359,7 @@
     4.4  
     4.5      /** Signals to the storage that this object will be changed.
     4.6       */
     4.7 -    protected void objectWillChange() {
     4.8 +    public void objectWillChange() {
     4.9          if (initFinished)        
    4.10              try {
    4.11                  getMdrStorage().objectStateWillChange(id);
    4.12 @@ -370,7 +370,7 @@
    4.13      
    4.14      /** Signals to the storage that this object has been changed.
    4.15       */
    4.16 -    protected void objectChanged() {
    4.17 +    public void objectChanged() {
    4.18          if (initFinished)        
    4.19              try {
    4.20                  getMdrStorage().objectStateChanged(id);
     5.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/StorableClass.java	Sat Jan 11 03:19:29 2003 +0000
     5.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/StorableClass.java	Mon Jan 13 09:56:58 2003 +0000
     5.3 @@ -316,6 +316,10 @@
     5.4          cls.objectWillChange();
     5.5          AttributeDescriptor attribute = (AttributeDescriptor) cls.clAttrDescs.get(name);
     5.6          Object oldValue = cls.clAttrValues.put(name, value);
     5.7 +
     5.8 +//        if (value == oldValue || (value != null && value.equals(oldValue))) {
     5.9 +//            return;
    5.10 +//        }
    5.11          
    5.12          if (!attribute.isMultivalued() && (value instanceof RefObject)) {
    5.13              StorableObject storableObj = (StorableObject) ((BaseObjectHandler) value)._getDelegate();
    5.14 @@ -871,7 +875,7 @@
    5.15          }
    5.16  
    5.17          void write(java.io.OutputStream outputStream) throws IOException {
    5.18 -            IOUtils.writeMOFID (outputStream, mofId, mdrStorage, mofId);
    5.19 +            IOUtils.writeMOFID (outputStream, mofId, mdrStorage.getStorageById(storageId));
    5.20              IOUtils.writeString(outputStream, name);
    5.21              IOUtils.writeInt(outputStream, typeIndex);
    5.22              IOUtils.writeInt(outputStream, minSize);
    5.23 @@ -961,13 +965,13 @@
    5.24              }
    5.25              
    5.26              public void write (java.io.OutputStream stream, StorableBaseObject storable) throws IOException {
    5.27 -                IOUtils.write (stream, id, storable);
    5.28 +                IOUtils.writeMOFID(stream, id, storable.getMdrStorage(), storable.getMofId());
    5.29                  IOUtils.writeString(stream, name);
    5.30                  IOUtils.writeBoolean(stream, isOrdered);
    5.31              }
    5.32              
    5.33              public void read (java.io.InputStream stream, StorableBaseObject storable) throws IOException {
    5.34 -                id = (org.netbeans.mdr.persistence.MOFID) IOUtils.read (stream, storable);
    5.35 +                id = IOUtils.readMOFID(stream, storable.getMdrStorage(), storable.getMofId());
    5.36                  name = IOUtils.readString(stream);
    5.37                  isOrdered = IOUtils.readBoolean(stream);
    5.38              }
     6.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/StorableObject.java	Sat Jan 11 03:19:29 2003 +0000
     6.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/StorableObject.java	Mon Jan 13 09:56:58 2003 +0000
     6.3 @@ -98,8 +98,12 @@
     6.4      public void setAttribute(int attrIndex, Object value) throws StorageException {
     6.5          check();
     6.6          StorableClass.AttributeDescriptor attribute = getClassProxy().getAttrDesc(attrIndex);
     6.7 -        
     6.8          Object oldValue = values[attrIndex];
     6.9 +
    6.10 +//        if (value == oldValue || (value != null && value.equals(oldValue))) {
    6.11 +//            return;
    6.12 +//        }
    6.13 +
    6.14          objectWillChange();
    6.15          values[attrIndex] = value;
    6.16          
    6.17 @@ -427,7 +431,7 @@
    6.18          
    6.19          if (attrDesc.isIndexed()) {
    6.20              
    6.21 -            Iterator iter = proxy.getIndexes(attrDesc.getMofId()).iterator();
    6.22 +            Iterator iter = proxy.getIndexes(attribId).iterator();
    6.23              org.netbeans.mdr.persistence.MOFID outermostPackageId = getOutermostPackageId();
    6.24              org.netbeans.mdr.persistence.MOFID mofId = getMofId();
    6.25              
     7.1 --- a/mdr/src/org/netbeans/mdr/util/IOUtils.java	Sat Jan 11 03:19:29 2003 +0000
     7.2 +++ b/mdr/src/org/netbeans/mdr/util/IOUtils.java	Mon Jan 13 09:56:58 2003 +0000
     7.3 @@ -258,6 +258,8 @@
     7.4          } else if (object instanceof MOFID) {
     7.5              outputStream.write (T_MOFID);
     7.6              writeMOFID (outputStream, (MOFID)object, storable.getMdrStorage(), storable.getMofId());
     7.7 +        } else if (object instanceof ValueWrapper) {
     7.8 +            write(outputStream, ((ValueWrapper) object).getValue(), storable);
     7.9          } else {
    7.10              throw new IOException("Unsupported type of object (object must be serializable): " + object.getClass().getName());
    7.11          }
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/mdr/src/org/netbeans/mdr/util/ValueWrapper.java	Mon Jan 13 09:56:58 2003 +0000
     8.3 @@ -0,0 +1,21 @@
     8.4 +/*
     8.5 + *                 Sun Public License Notice
     8.6 + *
     8.7 + * The contents of this file are subject to the Sun Public License
     8.8 + * Version 1.0 (the "License"). You may not use this file except in
     8.9 + * compliance with the License. A copy of the License is available at
    8.10 + * http://www.sun.com/
    8.11 + *
    8.12 + * The Original Code is NetBeans. The Initial Developer of the Original
    8.13 + * Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun
    8.14 + * Microsystems, Inc. All Rights Reserved.
    8.15 + */
    8.16 +package org.netbeans.mdr.util;
    8.17 +
    8.18 +/**
    8.19 + *
    8.20 + * @author  mm109185
    8.21 + */
    8.22 +public interface ValueWrapper {
    8.23 +    public Object getValue();
    8.24 +}