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

E26041-01

coherence/util/processor/PropertyManipulator.hpp

00001 /*
00002 * PropertyManipulator.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_PROPERTY_MANIPULATOR_HPP
00017 #define COH_PROPERTY_MANIPULATOR_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/ValueExtractor.hpp"
00025 #include "coherence/util/ValueManipulator.hpp"
00026 #include "coherence/util/ValueUpdater.hpp"
00027 
00028 COH_OPEN_NAMESPACE3(coherence,util,processor)
00029 
00030 using coherence::io::pof::PofReader;
00031 using coherence::io::pof::PofWriter;
00032 using coherence::io::pof::PortableObject;
00033 using coherence::util::ValueExtractor;
00034 using coherence::util::ValueManipulator;
00035 using coherence::util::ValueUpdater;
00036 
00037 
00038 /**
00039 * PropertyManipulator is a reflection based ValueManipulator implementation
00040 * based on the JavaBean property name conventions.
00041 *
00042 * @author tb  2008.05.06
00043 */
00044 class COH_EXPORT PropertyManipulator
00045     : public class_spec<PropertyManipulator,
00046         extends<Object>,
00047         implements<ValueManipulator, PortableObject> >
00048     {
00049     friend class factory<PropertyManipulator>;
00050 
00051     // ----- constructors ---------------------------------------------------
00052 
00053     protected:
00054         /**
00055         * Construct a PropertyManipulator.
00056         */
00057         PropertyManipulator();
00058 
00059         /**
00060         * Construct a PropertyManipulator for the specified property name.
00061         * <p>
00062         * This constructor assumes that the corresponding property getter
00063         * will have a name of either ("get" + sName) or ("is + sName) and the
00064         * corresponding property setter's name will be ("set + sName).
00065         *
00066         * @param vsName a property name
00067         * @param fUseIs if true, the getter method will be prefixed with "is"
00068         *                rather than "get"
00069         */
00070         PropertyManipulator(String::View vsName, bool fUseIs = false);
00071 
00072 
00073     // ----- ValueManipulator interface -------------------------------------
00074 
00075     public:
00076         /**
00077         * {@inheritDoc}
00078         */
00079         virtual ValueExtractor::View getExtractor() const;
00080 
00081         /**
00082         * {@inheritDoc}
00083         */
00084         virtual ValueUpdater::View getUpdater() const;
00085 
00086 
00087     // ----- internal -------------------------------------------------------
00088 
00089     protected:
00090         /**
00091         * Parse the property name and initialize necessary extractor and
00092         * updator.
00093         */
00094         void init() const;
00095 
00096 
00097     // ----- PortableObject interface ---------------------------------------
00098 
00099     public:
00100         /**
00101         * {@inheritDoc}
00102         */
00103         virtual void readExternal(PofReader::Handle hIn);
00104 
00105         /**
00106         * {@inheritDoc}
00107         */
00108         virtual void writeExternal(PofWriter::Handle hOut) const;
00109 
00110 
00111     // ----- Object interface -----------------------------------------------
00112 
00113     public:
00114         /**
00115         * {@inheritDoc}
00116         */
00117         virtual bool equals(Object::View v) const;
00118 
00119         /**
00120         * {@inheritDoc}
00121         */
00122         virtual size32_t hashCode() const;
00123 
00124 
00125     // ----- data members ---------------------------------------------------
00126 
00127         /**
00128         * The property name, never null.
00129         */
00130         FinalView<String> f_vsName;
00131 
00132         /**
00133         * The getter prefix flag.
00134         */
00135         bool m_fUseIs;
00136 
00137         /**
00138         * A partial ValueExtractor used for composite properties.
00139         */
00140         mutable FinalView<ValueExtractor> f_vExtractorPart;
00141 
00142         /**
00143         * The underlying ValueExtractor.
00144         */
00145         mutable FinalView<ValueExtractor> f_vExtractor;
00146 
00147         /**
00148         * The underlying ValueUpdater.
00149         */
00150         mutable FinalView<ValueUpdater> f_vUpdater;
00151     };
00152 
00153 COH_CLOSE_NAMESPACE3
00154 
00155 #endif // COH_PROPERTY_MANIPULATOR_HPP
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.