00001 /******************************************************************************* 00002 * Copyright (C) 2001-2004 Vintela, Inc. All rights reserved. 00003 * 00004 * Redistribution and use in source and binary forms, with or without 00005 * modification, are permitted provided that the following conditions are met: 00006 * 00007 * - Redistributions of source code must retain the above copyright notice, 00008 * this list of conditions and the following disclaimer. 00009 * 00010 * - Redistributions in binary form must reproduce the above copyright notice, 00011 * this list of conditions and the following disclaimer in the documentation 00012 * and/or other materials provided with the distribution. 00013 * 00014 * - Neither the name of Vintela, Inc. nor the names of its 00015 * contributors may be used to endorse or promote products derived from this 00016 * software without specific prior written permission. 00017 * 00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS 00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00028 * POSSIBILITY OF SUCH DAMAGE. 00029 *******************************************************************************/ 00030 00035 #ifndef OW_CIMOMVISITOR_HPP_INCLUDE_GUARD_ 00036 #define OW_CIMOMVISITOR_HPP_INCLUDE_GUARD_ 00037 #include "OW_config.h" 00038 #include "OW_CIMFwd.hpp" 00039 #include "OW_Map.hpp" 00040 #include "OW_MOFVisitor.hpp" 00041 #include "OW_CIMValue.hpp" 00042 #include "OW_CIMProperty.hpp" 00043 #include "OW_CIMNameSpace.hpp" 00044 #include "OW_CIMClass.hpp" 00045 #include "OW_CIMInstance.hpp" 00046 #include "OW_CIMQualifier.hpp" 00047 #include "OW_CIMQualifierType.hpp" 00048 #include "OW_CIMMethod.hpp" 00049 #include "OW_CIMParameter.hpp" 00050 #include "OW_CIMOMHandleIFC.hpp" 00051 #include "OW_MOFParserErrorHandlerIFC.hpp" 00052 #include "OW_Cache.hpp" 00053 #include "OW_RepositoryCIMOMHandle.hpp" 00054 #include "OW_MOFCompiler.hpp" 00055 00056 // The classes and functions defined in this file are not meant for general 00057 // use, they are internal implementation details. They may change at any time. 00058 00059 namespace OW_NAMESPACE 00060 { 00061 00062 namespace MOF 00063 { 00064 00065 struct LineInfo; 00066 class OW_MOF_API CIMOMVisitor : public Visitor 00067 { 00068 public: 00069 CIMOMVisitor(const CIMOMHandleIFCRef& hdl, const Compiler::Options& opts, 00070 const ParserErrorHandlerIFCRef& _theErrorHandler); 00071 ~CIMOMVisitor(); 00072 void VisitMOFSpecification( const MOFSpecification * ); 00073 00074 void VisitMOFProductionCompilerDirective( const MOFProductionCompilerDirective * ); 00075 void VisitMOFProductionClassDeclaration( const MOFProductionClassDeclaration * ); 00076 void VisitMOFProductionAssocDeclaration( const MOFProductionAssocDeclaration * ); 00077 void VisitMOFProductionIndicDeclaration( const MOFProductionIndicDeclaration * ); 00078 void VisitMOFProductionQualifierDeclaration( const MOFProductionQualifierDeclaration * ); 00079 void VisitMOFProductionInstanceDeclaration( const MOFProductionInstanceDeclaration * ); 00080 00081 void VisitCompilerDirective( const CompilerDirective * ); 00082 void VisitPragmaName( const PragmaName * ); 00083 void VisitPragmaParameter( const PragmaParameter * ); 00084 void VisitClassDeclaration( const ClassDeclaration * ); 00085 void VisitAssocDeclaration( const AssocDeclaration * ); 00086 void VisitIndicDeclaration( const IndicDeclaration * ); 00087 void VisitAlias( const Alias * ); 00088 void VisitAliasIdentifier( const AliasIdentifier * ); 00089 void VisitSuperClass( const SuperClass * ); 00090 void VisitClassName( const ClassName * ); 00091 00092 void VisitClassFeaturePropertyDeclaration( const ClassFeaturePropertyDeclaration * ); 00093 void VisitClassFeatureMethodDeclaration( const ClassFeatureMethodDeclaration * ); 00094 void VisitClassFeatureReferenceDeclaration( const ClassFeatureReferenceDeclaration * ); 00095 00096 void VisitAssociationFeatureClassFeature( const AssociationFeatureClassFeature * ); 00097 00098 void VisitPropertyDeclaration( const PropertyDeclaration * ); 00099 void VisitReferenceDeclaration( const ReferenceDeclaration * ); 00100 void VisitMethodDeclaration( const MethodDeclaration * ); 00101 void VisitQualifier( const Qualifier * ); 00102 00103 void VisitQualifierParameterConstantValue( const QualifierParameterConstantValue * ); 00104 void VisitQualifierParameterArrayInitializer( const QualifierParameterArrayInitializer * ); 00105 void VisitFlavor( const Flavor * ); 00106 void VisitPropertyName( const PropertyName * ); 00107 void VisitReferenceName( const ReferenceName * ); 00108 void VisitMethodName( const MethodName * ); 00109 void VisitDataType( const DataType * ); 00110 void VisitObjectRef( const ObjectRef * ); 00111 void VisitIntegerValueBinaryValue( const IntegerValueBinaryValue * ); 00112 void VisitIntegerValueOctalValue( const IntegerValueOctalValue * ); 00113 void VisitIntegerValueDecimalValue( const IntegerValueDecimalValue * ); 00114 void VisitIntegerValueHexValue( const IntegerValueHexValue * ); 00115 void VisitConstantValueIntegerValue( const ConstantValueIntegerValue * ); 00116 void VisitConstantValueFloatValue( const ConstantValueFloatValue * ); 00117 void VisitConstantValueStringValue( const ConstantValueStringValue * ); 00118 void VisitConstantValueCharValue( const ConstantValueCharValue * ); 00119 void VisitConstantValueBooleanValue( const ConstantValueBooleanValue * ); 00120 void VisitConstantValueNullValue( const ConstantValueNullValue * ); 00121 00122 void VisitParameterDataType( const ParameterDataType * ); 00123 void VisitParameterObjectRef( const ParameterObjectRef * ); 00124 00125 void VisitParameterName( const ParameterName * ); 00126 void VisitArray( const Array * ); 00127 void VisitDefaultValue( const DefaultValue * ); 00128 00129 void VisitInitializerReferenceInitializer( const InitializerReferenceInitializer * ); 00130 void VisitInitializerArrayInitializer( const InitializerArrayInitializer * ); 00131 void VisitInitializerConstantValue( const InitializerConstantValue * ); 00132 void VisitArrayInitializer( const ArrayInitializer * ); 00133 00134 void VisitReferenceInitializerAliasIdentifier( const ReferenceInitializerAliasIdentifier * ); 00135 void VisitReferenceInitializerObjectHandle( const ReferenceInitializerObjectHandle * ); 00136 void VisitObjectHandle( const ObjectHandle * ); 00137 void VisitQualifierDeclaration( const QualifierDeclaration * ); 00138 void VisitQualifierName( const QualifierName * ); 00139 void VisitQualifierType( const QualifierType * ); 00140 void VisitScope( const Scope * ); 00141 void VisitMetaElement( const MetaElement * ); 00142 void VisitDefaultFlavor( const DefaultFlavor * ); 00143 void VisitInstanceDeclaration( const InstanceDeclaration * ); 00144 void VisitValueInitializer( const ValueInitializer * ); 00145 private: 00146 00147 // state vars used while processing the tree 00148 CIMClass m_curClass; 00149 CIMInstance m_curInstance; 00150 CIMQualifier m_curQualifier; 00151 CIMQualifierType m_curQualifierType; 00152 CIMValue m_curValue; 00153 CIMProperty m_curProperty; 00154 CIMMethod m_curMethod; 00155 CIMParameter m_curParameter; 00156 00157 #ifdef OW_WIN32 00158 #pragma warning (push) 00159 #pragma warning (disable: 4251) 00160 #endif 00161 00162 // connection to the rest of the world 00163 CIMOMHandleIFCRef m_hdl; 00164 RepositoryCIMOMHandleRef m_rephdl; 00165 ParserErrorHandlerIFCRef theErrorHandler; 00166 00167 // instance aliases 00168 Map<String, String> m_aliasMap; 00169 00170 // config 00171 Compiler::Options m_opts; 00172 00173 // used for current #pragma values 00174 String m_namespace; 00175 String m_instanceLocale; 00176 String m_locale; 00177 String m_nonLocal; 00178 String m_nonLocalType; 00179 String m_source; 00180 String m_sourceType; 00181 00182 Cache<CIMQualifierType> m_dataTypeCache; 00183 CIMDataType getQualifierDataType(const String& qualName, const LineInfo& li); 00184 CIMQualifierType getQualifierType(const String& qualName, const LineInfo& li); 00185 00186 Cache<CIMClass> m_classCache; 00187 00188 #ifdef OW_WIN32 00189 #pragma warning (pop) 00190 #endif 00191 00192 CIMClass getClass(const String& className, const LineInfo& li); 00193 00194 CIMValue convertValuesIntoValueArray( const CIMValueArray& values ); 00195 00196 void compileDep(const String& className, const LineInfo& li); 00197 void compileQuals(const LineInfo& li); 00198 00199 // Functions that call into the remote cimom handle 00200 CIMClass CIMOMgetClass(const String& className, const LineInfo& li); 00201 void CIMOMprocessClass(const LineInfo& li); 00202 void CIMOMprocessClassAux(const LineInfo& li); 00203 void CIMOMprocessQualifierType(const LineInfo& li); 00204 void CIMOMprocessQualifierTypeAux(); 00205 void CIMOMprocessInstance(const LineInfo& li); 00206 void CIMOMprocessInstanceAux(); 00207 CIMQualifierType CIMOMgetQualifierType(const String& qualName, const LineInfo& li); 00208 void CIMOMcreateNamespace(const LineInfo& li); 00209 00210 }; 00211 00212 } // end namespace MOF 00213 } // end namespace OW_NAMESPACE 00214 00215 #endif