(file) Return to CIMQualifierList.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/CIMQualifierList.cpp between version 1.18 and 1.27

version 1.18, 2002/03/08 01:53:03 version 1.27, 2002/03/28 02:57:54
Line 22 
Line 22 
 // //
 // Author: Mike Brasher (mbrasher@bmc.com) // Author: Mike Brasher (mbrasher@bmc.com)
 // //
 // Modified By:  // Modified By: Karl Schopmeyer (k.schopmeyer@opengroup.org)
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 95 
Line 95 
 void CIMQualifierList::resolve( void CIMQualifierList::resolve(
     DeclContext* declContext,     DeclContext* declContext,
     const String& nameSpace,     const String& nameSpace,
     Uint32 scope,      Uint32 scope,                                       // Scope of the entity being resolved.
     Boolean isInstancePart,     Boolean isInstancePart,
     CIMQualifierList& inheritedQualifiers)      CIMQualifierList& inheritedQualifiers,
       Boolean propagateQualifiers)        // Apparently not used ks 24 mar 2002
 { {
     // For each qualifier in the qualifiers array, the following     // For each qualifier in the qualifiers array, the following
     // is checked:     // is checked:
Line 106 
Line 107 
     //     //
     //     2. Whether it has the same type as the declaration.     //     2. Whether it has the same type as the declaration.
     //     //
     //     3. Whether the the qualifier is valid for the given scope.      //     3. Whether the qualifier is valid for the given scope.
     //     //
     //     4. Whether the qualifier can be overriden (the flavor is     //     4. Whether the qualifier can be overriden (the flavor is
     //        ENABLEOVERRIDE on the corresponding reference qualifier).     //        ENABLEOVERRIDE on the corresponding reference qualifier).
Line 119 
Line 120 
     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)     for (Uint32 i = 0, n = _qualifiers.size(); i < n; i++)
     {     {
         CIMQualifier q = _qualifiers[i];         CIMQualifier q = _qualifiers[i];
         //cout << "KSTEST  Qual resolve for loop Name = " << q.getName() << endl;  
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // 1. Check to see if it's declared.         // 1. Check to see if it's declared.
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
                   // set this back to  CIMConstQualifierDecl
         CIMConstQualifierDecl qd = declContext->lookupQualifierDecl(                  CIMQualifierDecl qd = declContext->lookupQualifierDecl(
             nameSpace, q.getName());             nameSpace, q.getName());
  
         if (!qd)         if (!qd)
             throw UndeclaredQualifier(q.getName());             throw UndeclaredQualifier(q.getName());
  
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // 2. Check the type:                  // 2. Check the type and isArray.  Must be the same:
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
  
         if (!(q.getType() == qd.getType() && q.isArray() == qd.isArray()))         if (!(q.getType() == qd.getType() && q.isArray() == qd.isArray()))
             throw BadQualifierType(q.getName());             throw BadQualifierType(q.getName());
  
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // 3. Check the scope:                  // 3. Check the scope: Must be legal for this qualifier
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
 #if 0  //#if 0
         // ATTN:  These lines throw a bogus exception if the qualifier has         // ATTN:  These lines throw a bogus exception if the qualifier has
         // a valid scope (such as Scope::ASSOCIATION) which is not Scope::CLASS         // a valid scope (such as Scope::ASSOCIATION) which is not Scope::CLASS
         // grb 1/16/01                          // ks Mar 2002. Reinstalled 23 March 2002 to test.
   
         if (!(qd.getScope() & scope))         if (!(qd.getScope() & scope))
             throw BadQualifierScope(qd.getName(), ScopeToString(scope));             throw BadQualifierScope(qd.getName(), ScopeToString(scope));
 #endif  //#endif
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
         // See if this qualifier is contained in the inheritedQualifiers. If                  // Resolve the qualifierflavor. Since Flavors are a combination of inheritance
         // so then we must handle the OVERRIDABLE flavor.                  // and input characteristics, resolve the inherited characteristics
                   // against those provided with the creation.  If there is a superclass
                   // the flavor is resolved against that superclass.  If not, it is resolved
                   // against the declaration. If the flavor is disableoverride and tosubclass
                   // the resolved qualifier value must be identical to the original
         //----------------------------------------------------------------------         //----------------------------------------------------------------------
  
         // ATTN: there seems to be a problem with the CIM schema that marks the  
         // abstract qualifier as non-overridable but then they override it.                  // Test for Qualifier found in SuperClass. If found and qualifier
         // For now it is just disabled. This problem exists in both XML and                  // is not overridable.
         // CIM schema.                  // Abstract (not Overridable and restricted) can be found in subclasses
          //cout << "KSTEST QUal resolve Propagate 1 " << q.getName() << endl;                  // Can have nonabstracts below abstracts. That is function of nottosubclass
 //#if 0                  // Association (notOverridable and tosubclass) can be found in subclasses but
                   // cannot be changed. No non-associatons below associations. In other words
                   // once a class becomes an association, no subclass can override that definition
                   // apparently
                   // Throw exception if DisableOverride and tosubclass and different value.
                   // Gets the source from superclass if qualifier exists or from declaraction
                   // If we do not throw the exception, resolve the flavor from the inheritance
                   // point and resolve against current input.
                   // Diableoverride is defined in the CIM Spec to mean that the value cannot change
                   // The other characteristics including the flavor can change apparently. Thus, we
                   // need only confirm that the value is the same (2.2 pp 33).  Strange since we
                   // would think that  override implies that you cannot override any of the
                   // characteristics (value, type, flavor, etc.) This also leaves the question
                   // of NULL or no values.  The implication is that we must move the value
                   // from the superclass or declaration.
                   //
   
   
         Uint32 pos = inheritedQualifiers.find(q.getName());         Uint32 pos = inheritedQualifiers.find(q.getName());
  
         if (pos != PEG_NOT_FOUND)                  //cout << "KSTEST Qualifier resolve inherit test " << q.getName()
         {                  //<< " Inherited From " << ((pos == PEG_NOT_FOUND) ? "Declaration" : "superclass")
             CIMConstQualifier iq = inheritedQualifiers.getQualifier(pos);{                  //<< " Flavor " << q.getFlavor()
                   //<< " inherited Flavor ";
   
                   if (pos == PEG_NOT_FOUND)
                   {   // Qualifier does not exist in superclass
                           /* If from declaration, we can override the default value.
                              However, we need some way to get the value if we have a Null.
                           if (!qd.isFlavor(CIMFlavor::OVERRIDABLE) && qd.isFlavor(CIMFlavor::TOSUBCLASS))
                           {
                                   if(!(q.getValue() == qd.getValue()))
                                           cout << "KSTEST QL err NSCL " << q.getName()
                                           << " decl flavor " << qd.getFlavor() << " Flavor " << q.getFlavor()
                                           << " Not override " << !qd.isFlavor(CIMFlavor::OVERRIDABLE)
                                           << " tosubclass " <<  qd.isFlavor(CIMFlavor::TOSUBCLASS) << endl;
                                   qd.print(); q.print();
                                           //throw BadQualifierOverride(q.getName());
                           }
                           //cout <<  qd.getFlavor() << endl;*/
                           // Do not allow change from disable override to enable override.
                           if(!qd.isFlavor(CIMFlavor::OVERRIDABLE) && q.isFlavor(CIMFlavor::OVERRIDABLE ))
                                   throw BadQualifierOverride(q.getName());
  
             if (!(iq.getFlavor() & CIMFlavor::OVERRIDABLE))                          q.resolveFlavor(qd.getFlavor(), false);
                           /*if(!(q.getValue() == qd.getValue()))
                                   cout << "KSTEST Flavor resolved from decl. " << q.getName()
                                   << " decl flavor " << qd.getFlavor() << " Flavor " << q.getFlavor()
                                   << " Not override " << !qd.isFlavor(CIMFlavor::OVERRIDABLE)
                                   << " tosubclass " <<  qd.isFlavor(CIMFlavor::TOSUBCLASS) << endl;
                            qd.print(); q.print(); */
                   }
                   else                    // qualifier exists in superclass
                   {       ////// Make Const again
                           CIMQualifier iq = inheritedQualifiers.getQualifier(pos);
                           // don't allow change override to notoverride.
                           if(!iq.isFlavor(CIMFlavor::OVERRIDABLE) && q.isFlavor(CIMFlavor::OVERRIDABLE ))
                                   throw BadQualifierOverride(q.getName());
   
                           if (!iq.isFlavor(CIMFlavor::OVERRIDABLE) && iq.isFlavor(CIMFlavor::TOSUBCLASS))
                           {
                                   /*if(!(q.getValue() == iq.getvalue()))
                                           cout << "KSTEST QL err inherit " << q.getName()
                                           << " from superclass " << iq.getName()
                                           << "   Superclass flavor " << iq.getFlavor()
                                           << " Flavor " << q.getFlavor()
                                           << endl;
                                   iq.print(); q.print();*/
                                   // test if values the same.
                                   CIMValue qv = q.getValue();
                                   CIMValue iqv = iq.getValue();
                                   if(!(qv == iqv)) {
                 throw BadQualifierOverride(q.getName());                 throw BadQualifierOverride(q.getName());
             }             }
         }         }
 //#endif                          //cout << iq.getFlavor()  << endl;
                           q.resolveFlavor(iq.getFlavor(), true);
     }     }
       }                                   // end of this objects qualifier loop
  
     //--------------------------------------------------------------------------     //--------------------------------------------------------------------------
     // Propagate qualifiers to subclass or to instance that do not have     // Propagate qualifiers to subclass or to instance that do not have
     // already have those qualifiers:     // already have those qualifiers:
     //--------------------------------------------------------------------------     //--------------------------------------------------------------------------
     //cout << "KSTEST Qual resolve Propagate loop begin" << " fal " << false << endl;          //cout << "KSTEST. Loop of inherited qualifiers. Number = "
           //      << inheritedQualifiers.getCount() << endl;
   
     for (Uint32 i = 0, n = inheritedQualifiers.getCount(); i < n; i++)     for (Uint32 i = 0, n = inheritedQualifiers.getCount(); i < n; i++)
     {     {
         CIMQualifier iq = inheritedQualifiers.getQualifier(i);         CIMQualifier iq = inheritedQualifiers.getQualifier(i);
         //cout << "KSTEST inherited  propagate loop 2 " <<  iq.getName()                          //cout << "KSTEST inherited qualifier propagate loop " <<  iq.getName()
         //<< " flavor " << iq.getFlavor << " count " << i << endl;         //<< " flavor " << iq.getFlavor << " count " << i << endl;
   
                           // ATTN-DE-P1-This next test is incorrect. It is a temporary, hard-coded
                           // HACK to avoid propagating the "Abstract" Qualifier to subclasses
                   //if (CIMName::equal(iq.getName(), "Abstract"))
                           //   continue;
                   //<< " flavor= " << iq.getFlavor()
                   //<< " TOSUBCLASS " << (iq.getFlavor() && CIMFlavor::TOSUBCLASS) << endl;
   
         if (isInstancePart)         if (isInstancePart)
         {         {
             if ((iq.getFlavor() && CIMFlavor::TOINSTANCE))                          if (!iq.isFlavor(CIMFlavor::TOINSTANCE))
                 continue;                 continue;
         }         }
         else         else
         {         {
             //cout << "TKSTEST before tosubclass Flavor "                          if (!iq.isFlavor(CIMFlavor::TOSUBCLASS))
             //     << (iq.getFlavor() && CIMFlavor::TOSUBCLASS) << endl;  
             if ((iq.getFlavor() && CIMFlavor::TOSUBCLASS)){  
                 //cout << "KSTEST after test " << endl;  
                 continue;                 continue;
             }             }
         }  
         //cout << "KSTEST resolve Propagate 3 " << iq.getName()  
         //<< " TOSUBCLASS " << !(iq.getFlavor() && CIMFlavor::TOSUBCLASS) << endl;  
  
         // If the qualifiers list does not already contain this qualifier,         // If the qualifiers list does not already contain this qualifier,
         // then propagate it (and set the propagated flag to true).                  // then propagate it (and set the propagated flag to true).      Else we
                   // keep current value. Note we have already eliminated any possibity that
                   // a nonoverridable qualifier can be in the list.
                   // Note that there is no exists() function ATTN:KS 25 Mar 2002
         if (find(iq.getName()) != PEG_NOT_FOUND)         if (find(iq.getName()) != PEG_NOT_FOUND)
             continue;             continue;
  
         //cout << "KSTEST resolve Propagate 4 " << iq.getName() << endl;  
   
         CIMQualifier q = iq.clone();         CIMQualifier q = iq.clone();
         q.setPropagated(true);         q.setPropagated(true);
         _qualifiers.prepend(q);         _qualifiers.prepend(q);
Line 240 
Line 315 
     {     {
         // if second or greater, add comma separator         // if second or greater, add comma separator
         if (i > 0)         if (i > 0)
             out << ", ";              out << ", \n";
         _qualifiers[i].toMof(out);         _qualifiers[i].toMof(out);
     }     }
  


Legend:
Removed from v.1.18  
changed lines
  Added in v.1.27

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2