Oracle Coherence for C++ API
Release 3.7.1.0
E22845-01
00001 /* 00002 * PropertyManipulator.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_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 MemberView<String> m_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 MemberView<ValueExtractor> m_vExtractorPart; 00141 00142 /** 00143 * The underlying ValueExtractor. 00144 */ 00145 mutable MemberView<ValueExtractor> m_vExtractor; 00146 00147 /** 00148 * The underlying ValueUpdater. 00149 */ 00150 mutable MemberView<ValueUpdater> m_vUpdater; 00151 }; 00152 00153 COH_CLOSE_NAMESPACE3 00154 00155 #endif // COH_PROPERTY_MANIPULATOR_HPP