Oracle Coherence for C++ API
Release 3.7.1.0
E22845-01
00001 /* 00002 * ReflectionUpdater.hpp 00003 * 00004 * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 00005 * 00006 * Oracle is a registered trademarks of Oracle Corporation and/or its 00007 * affiliates. 00008 * 00009 * This software is the confidential and proprietary information of Oracle 00010 * Corporation. You shall not disclose such confidential and proprietary 00011 * information and shall use it only in accordance with the terms of the 00012 * license agreement you entered into with Oracle. 00013 * 00014 * This notice may not be removed or altered. 00015 */ 00016 #ifndef COH_REFLECTION_UPDATER_HPP 00017 #define COH_REFLECTION_UPDATER_HPP 00018 00019 #include "coherence/lang.ns" 00020 00021 #include "coherence/io/pof/PofReader.hpp" 00022 #include "coherence/io/pof/PofWriter.hpp" 00023 #include "coherence/io/pof/PortableObject.hpp" 00024 #include "coherence/util/ValueUpdater.hpp" 00025 00026 COH_OPEN_NAMESPACE3(coherence,util,extractor) 00027 00028 using coherence::io::pof::PofReader; 00029 using coherence::io::pof::PofWriter; 00030 using coherence::io::pof::PortableObject; 00031 00032 00033 /** 00034 * Reflection-based ValueUpdater implementation. 00035 * 00036 * Local execution of a ReflectionUpdater is dependent upon target class and 00037 * method having been registered with the SystemClassLoader. For cases where 00038 * the registration has not been performed or is not possible locally executable 00039 * C++ updaters may either be custom built, or auto-generated using the 00040 * TypedUpdater<>. 00041 * 00042 * @author djl/mf 2008.04.08 00043 * 00044 * @see CompositeUpdater 00045 * @see TypedUpdater 00046 * @see Method 00047 */ 00048 class COH_EXPORT ReflectionUpdater 00049 : public cloneable_spec<ReflectionUpdater, 00050 extends<Object>, 00051 implements<ValueUpdater, PortableObject> > 00052 { 00053 friend class factory<ReflectionUpdater>; 00054 00055 // ----- constructors --------------------------------------------------- 00056 00057 protected: 00058 /** 00059 * Construct an empty ReflectionUpdater 00060 * (necessary for the PortableObject interface). 00061 */ 00062 ReflectionUpdater(); 00063 00064 /** 00065 * Construct a ReflectionUpdater for a given method name. This 00066 * implementation assumes that the corresponding classes will have one 00067 * and only one method with a specified name and this method will have 00068 * exactly one parameter. 00069 */ 00070 ReflectionUpdater(String::View vsMethod); 00071 00072 /** 00073 * Copy constructor. 00074 */ 00075 ReflectionUpdater(const ReflectionUpdater& that); 00076 00077 00078 // ----- ValueUpdater interface ------------------------------------------ 00079 00080 public: 00081 /** 00082 * {@inheritDoc} 00083 */ 00084 virtual void update(Object::Handle hTarget, 00085 Object::Holder ohValue) const; 00086 00087 00088 // ----- PortableObject interface --------------------------------------- 00089 00090 public: 00091 /** 00092 * {@inheritDoc} 00093 */ 00094 virtual void readExternal(PofReader::Handle hIn); 00095 00096 /** 00097 * {@inheritDoc} 00098 */ 00099 virtual void writeExternal(PofWriter::Handle hOut) const; 00100 00101 00102 // ----- Object interface ----------------------------------------------- 00103 00104 public: 00105 /** 00106 * {@inheritDoc} 00107 */ 00108 virtual bool equals(Object::View v) const; 00109 00110 /** 00111 * {@inheritDoc} 00112 */ 00113 virtual size32_t hashCode() const; 00114 00115 /** 00116 * {@inheritDoc} 00117 */ 00118 virtual void toStream(std::ostream& out) const; 00119 00120 00121 // ----- data member accessors ------------------------------------------ 00122 00123 public: 00124 /** 00125 * Determine the name of the method that this extractor is configured 00126 * to invoke. 00127 * 00128 * @return the name of the method to invoke using reflection 00129 */ 00130 virtual String::View getMethodName() const; 00131 00132 00133 // ----- data members --------------------------------------------------- 00134 00135 protected: 00136 /** 00137 * The name of the method to invoke. 00138 */ 00139 MemberView<String> m_vsMethod; 00140 00141 /** 00142 * The resolved Method. 00143 */ 00144 mutable MemberView<Method> m_vMethod; 00145 }; 00146 00147 COH_CLOSE_NAMESPACE3 00148 00149 #endif // COH_REFLECTION_UPDATER_HPP