coherence/util/extractor/ReflectionExtractor.hpp

00001 /*
00002 * ReflectionExtractor.hpp
00003 *
00004 * Copyright (c) 2000, 2009, 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_EXTRACTOR_HPP
00017 #define COH_REFLECTION_EXTRACTOR_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/util/extractor/AbstractExtractor.hpp"
00024 
00025 COH_OPEN_NAMESPACE3(coherence,util,extractor)
00026 
00027 using coherence::io::pof::PofReader;
00028 using coherence::io::pof::PofWriter;
00029 
00030 
00031 /**
00032 * Reflection-based ValueExtractor implementation.
00033 *
00034 * ReflectionExtractor cannot be executed against local C++ caches, only
00035 * against remote caches. Locally executable C++ extractors may either be
00036 * custom built, or auto-generated via TypedExtractor<>.
00037 *
00038 * @author djl 2008.03.06
00039 *
00040 * @see ChainedExtractor
00041 * @see TypedExtractor
00042 */
00043 class COH_EXPORT ReflectionExtractor
00044     : public cloneable_spec<ReflectionExtractor,
00045         extends<AbstractExtractor> >
00046     {
00047     friend class factory<ReflectionExtractor>;
00048 
00049     // ----- constructors ---------------------------------------------------
00050 
00051     protected:
00052         /**
00053         * Construct an empty ReflectionExtractor
00054         * (necessary for the PortableObject interface).
00055         */
00056         ReflectionExtractor();
00057 
00058         /**
00059         * Construct a ReflectionExtractor based on a method name, optional
00060         * parameters and the entry extraction target.
00061         *
00062         * @param vsMethod  the name of the method to invoke via reflection
00063         * @param vaParam   the array of arguments to be used in the method
00064         *                  invocation; may be NULL
00065         * @param nTarget   one of the {@link #VALUE} or {@link #KEY} values
00066         *
00067         * @since Coherence 3.5
00068         */
00069         ReflectionExtractor(String::View vsMethod,
00070                 ObjectArray::View vaParam = NULL, int32_t nTarget = VALUE);
00071 
00072         /**
00073         * Copy constructor.
00074         */
00075         ReflectionExtractor(const ReflectionExtractor& that);
00076 
00077 
00078    // ----- ValueExtractor interface ---------------------------------------
00079 
00080     public:
00081         /**
00082         * {@inheritDoc}
00083         *
00084         * @throws UnsupportedOperationException always
00085         */
00086         virtual Object::Holder extract(Object::Holder ohTarget) const;
00087 
00088 
00089     // ----- PortableObject interface ---------------------------------------
00090 
00091     public:
00092         /**
00093         * {@inheritDoc}
00094         */
00095         virtual void readExternal(PofReader::Handle hIn);
00096 
00097         /**
00098         * {@inheritDoc}
00099         */
00100         virtual void writeExternal(PofWriter::Handle hOut) const;
00101 
00102 
00103     // ----- Object interface -----------------------------------------------
00104 
00105     public:
00106         /**
00107         * {@inheritDoc}
00108         */
00109         virtual bool equals(Object::View v) const;
00110 
00111         /**
00112         * {@inheritDoc}
00113         */
00114         virtual size32_t hashCode() const;
00115 
00116         /**
00117         * {@inheritDoc}
00118         */
00119         virtual void toStream(std::ostream& out) const;
00120 
00121 
00122     // ----- data member accessors ------------------------------------------
00123 
00124     public:
00125         /**
00126         * Determine the name of the method that this extractor is configured
00127         * to invoke.
00128         *
00129         * @return the name of the method to invoke using reflection
00130         */
00131         virtual String::View getMethodName() const;
00132 
00133         /**
00134         * Return the array of arguments used to invoke the method.
00135         *
00136         * @return the array of arguments used to invoke the method
00137         */
00138         virtual ObjectArray::View getParameters() const;
00139 
00140 
00141     // ----- data members ---------------------------------------------------
00142 
00143     protected:
00144         /**
00145         * The name of the method to invoke.
00146         */
00147         MemberView<String> m_vsMethod;
00148 
00149         /**
00150         * The parameter array.
00151         */
00152         MemberView<ObjectArray> m_vaParam;
00153     };
00154 
00155 COH_CLOSE_NAMESPACE3
00156 
00157 #endif // COH_REFLECTION_EXTRACTOR_HPP
Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.