00001 #ifndef FDO_PHYSICALELEMENTMAPPINGCOLLECTION
00002 #define FDO_PHYSICALELEMENTMAPPINGCOLLECTION
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifdef _WIN32
00023 #pragma once
00024 #endif
00025
00026 #include <FdoStd.h>
00027 #include <Common/NamedCollection.h>
00028 #include <Fdo/Commands/CommandException.h>
00029 #include <Fdo/Commands/Schema/PhysicalElementMapping.h>
00030
00031
00032
00033
00034 template <class OBJ> class FdoPhysicalElementMappingCollection : public FdoNamedCollection<OBJ, FdoCommandException>
00035 {
00036
00037 protected:
00038
00039 FdoPhysicalElementMappingCollection() : FdoNamedCollection<OBJ, FdoCommandException>(),
00040 m_parent(NULL)
00041 {
00042 }
00043
00044 FdoPhysicalElementMappingCollection(FdoPhysicalElementMapping* parent) : FdoNamedCollection<OBJ, FdoCommandException>()
00045 {
00046 m_parent = parent;
00047 }
00048
00049 virtual ~FdoPhysicalElementMappingCollection()
00050 {
00051 if ( m_parent)
00052 {
00053 for(FdoInt32 i = 0; i < FdoNamedCollection<OBJ, FdoCommandException>::GetCount(); i++)
00054 {
00055 FdoPtr<OBJ> pitem = FdoNamedCollection<OBJ, FdoCommandException>::GetItem(i);
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 pitem->SetParent(NULL);
00068 }
00069 }
00070 }
00071
00072
00073 public:
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 virtual void SetItem(FdoInt32 index, OBJ* value)
00086 {
00087
00088 if (index < FdoNamedCollection<OBJ, FdoCommandException>::GetCount() && index >= 0)
00089 {
00090 if (m_parent)
00091 {
00092
00093
00094
00095
00096 FdoPhysicalElementMappingP pparent = value->GetParent();
00097 if (pparent && (pparent != m_parent) )
00098 throw FdoCommandException::Create(FdoException::NLSGetMessage(FDO_NLSID(COMMANDS_7_OBJECTHASPARENT),value->GetName()));
00099 }
00100
00101 if (m_parent)
00102 value->SetParent(m_parent);
00103
00104 FdoPtr<OBJ> pitemOld = FdoNamedCollection<OBJ, FdoCommandException>::GetItem(index);
00105 FdoPhysicalElementMappingP pparentOldItem = pitemOld->GetParent();
00106 if ( pparentOldItem == m_parent )
00107 {
00108
00109
00110
00111
00112 pitemOld->SetParent(NULL);
00113 }
00114 }
00115
00116 FdoNamedCollection<OBJ, FdoCommandException>::SetItem(index, value);
00117 }
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 virtual FdoInt32 Add(OBJ* value)
00129 {
00130 if (m_parent)
00131 {
00132
00133
00134
00135
00136 FdoPhysicalElementMappingP pparent = value->GetParent();
00137 if (pparent && (pparent != m_parent) )
00138 throw FdoCommandException::Create(FdoException::NLSGetMessage(FDO_NLSID(COMMANDS_7_OBJECTHASPARENT),value->GetName()));
00139 }
00140
00141 if (m_parent)
00142 value->SetParent(m_parent);
00143
00144 return FdoNamedCollection<OBJ, FdoCommandException>::Add(value);
00145 }
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160 virtual void Insert(FdoInt32 index, OBJ* value)
00161 {
00162 if (m_parent)
00163 {
00164
00165
00166
00167
00168 FdoPhysicalElementMappingP pparent = value->GetParent();
00169 if (pparent && (pparent != m_parent) )
00170 throw FdoCommandException::Create(FdoException::NLSGetMessage(FDO_NLSID(COMMANDS_7_OBJECTHASPARENT),value->GetName()));
00171 }
00172
00173 if (m_parent)
00174 value->SetParent(m_parent);
00175
00176 FdoNamedCollection<OBJ, FdoCommandException>::Insert(index, value);
00177 }
00178
00179
00180
00181
00182
00183
00184
00185 virtual void Clear()
00186 {
00187 if (m_parent)
00188 {
00189 for(FdoInt32 i = 0; i < FdoNamedCollection<OBJ, FdoCommandException>::GetCount(); i++)
00190 {
00191 FdoPtr<OBJ> pitem = FdoNamedCollection<OBJ, FdoCommandException>::GetItem(i);
00192 FdoPhysicalElementMappingP pparent = pitem->GetParent();
00193
00194 if ( pparent == m_parent )
00195 {
00196
00197
00198
00199
00200 pitem->SetParent(NULL);
00201 }
00202 }
00203 }
00204
00205 FdoNamedCollection<OBJ, FdoCommandException>::Clear();
00206 }
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217 virtual void Remove(const OBJ* value)
00218 {
00219 if (m_parent)
00220 {
00221
00222 FdoPtr<OBJ> pitem = (OBJ*)value;
00223 FdoPhysicalElementMappingP pparent = pitem->GetParent();
00224
00225 if ( pparent == m_parent )
00226 {
00227
00228
00229
00230
00231 pitem->SetParent(NULL);
00232 }
00233 }
00234
00235 FdoNamedCollection<OBJ, FdoCommandException>::Remove(value);
00236 }
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247 virtual void RemoveAt(FdoInt32 index)
00248 {
00249
00250 if (m_parent)
00251 {
00252 FdoPtr<OBJ> pitem = FdoNamedCollection<OBJ, FdoCommandException>::GetItem(index);
00253 FdoPhysicalElementMappingP pparent = pitem->GetParent();
00254
00255 if ( pparent == m_parent )
00256 {
00257
00258
00259
00260
00261 pitem->SetParent(NULL);
00262 }
00263
00264 }
00265
00266 FdoNamedCollection<OBJ, FdoCommandException>::RemoveAt(index);
00267 }
00268
00269 protected:
00270
00271
00272
00273
00274 FdoPhysicalElementMapping* m_parent;
00275
00276 };
00277
00278 #endif
00279
00280