Oracle Fusion Middleware C++ API Reference for Oracle Coherence
12c (12.1.2)

E26041-01

coherence/util/extractor/ReflectionUpdater.hpp

00001 /*
00002 * ReflectionUpdater.hpp
00003 *
00004 * Copyright (c) 2000, 2013, 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         FinalView<String> f_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
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.