Changeset 168 for XMLIO_V2/dev/dev_rv/src/xmlio/node/field.cpp
- Timestamp:
- 04/07/11 15:04:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/xmlio/node/field.cpp
r152 r168 7 7 #include "node_type.hpp" 8 8 9 namespace xmlioserver 10 { 11 namespace tree 12 { 13 /// ////////////////////// Définitions ////////////////////// /// 14 15 CField::CField(void) 16 : CObjectTemplate<CField>(), CFieldAttributes() 17 , baseRefObject(), refObject(), grid(), file(), foperation(NULL) 18 { /* Ne rien faire de plus */ } 19 20 CField::CField(const StdString & id) 21 : CObjectTemplate<CField>(id), CFieldAttributes() 22 , baseRefObject(), refObject(), foperation(NULL) 23 { /* Ne rien faire de plus */ } 24 25 CField::~CField(void) 26 { 27 if (this->foperation == NULL) 28 delete this->foperation; 29 } 30 31 void CField::setRelFile(const boost::shared_ptr<CFile> _file) 32 { this->file = _file; } 33 34 //---------------------------------------------------------------- 35 36 StdString CField::GetName(void) { return (StdString("field")); } 37 StdString CField::GetDefName(void){ return (CField::GetName()); } 38 39 boost::shared_ptr<CGrid> CField::getRelGrid(void) const 40 { return (this->grid); } 41 42 boost::shared_ptr<CFile> CField::getRelFile(void) const 43 { return (this->file); } 44 45 boost::shared_ptr<CField> CField::getDirectFieldReference(void) const 46 { 47 if (this->field_ref.isEmpty()) 48 return (this->getBaseFieldReference()); 49 50 if (! CObjectFactory::HasObject<CField>(this->field_ref.getValue())) 51 ERROR("CField::getDirectFieldReference(void)", 52 << "[ ref_name = " << this->field_ref.getValue() << "]" 53 << " invalid field name !"); 54 55 return (CObjectFactory::GetObject<CField>(this->field_ref.getValue())); 56 } 57 58 const boost::shared_ptr<CField> 59 CField::getBaseFieldReference(void) const { return (baseRefObject); } 60 61 const std::vector<boost::shared_ptr<CField> > & 62 CField::getAllReference(void) const { return (refObject); } 63 64 const StdString & CField::getBaseFieldId(void) const 65 { return (this->getBaseFieldReference()->getId()); } 66 67 bool CField::hasDirectFieldReference(void) const 68 { return (!this->field_ref.isEmpty()); } 69 70 //---------------------------------------------------------------- 71 72 void CField::solveRefInheritance(void) 73 { 74 std::set<CField *> sset; 75 boost::shared_ptr<CField> refer_sptr; 76 CField * refer_ptr = this; 77 this->baseRefObject = CObjectFactory::GetObject<CField>(this); 78 while (refer_ptr->hasDirectFieldReference()) 9 namespace xmlioserver{ 10 namespace tree { 11 12 /// ////////////////////// Définitions ////////////////////// /// 13 14 CField::CField(void) 15 : CObjectTemplate<CField>(), CFieldAttributes() 16 , baseRefObject(), refObject(), grid(), file(), foperation(NULL) 17 { /* Ne rien faire de plus */ } 18 19 CField::CField(const StdString & id) 20 : CObjectTemplate<CField>(id), CFieldAttributes() 21 , baseRefObject(), refObject(), foperation(NULL) 22 { /* Ne rien faire de plus */ } 23 24 CField::~CField(void) 25 { 26 if (this->foperation == NULL) 27 delete this->foperation; 28 } 29 30 //---------------------------------------------------------------- 31 32 void CField::setRelFile(const boost::shared_ptr<CFile> _file) 33 { 34 this->file = _file; 35 } 36 37 //---------------------------------------------------------------- 38 39 StdString CField::GetName(void) { return (StdString("field")); } 40 StdString CField::GetDefName(void){ return (CField::GetName()); } 41 ENodeType CField::GetType(void) { return (eField); } 42 43 //---------------------------------------------------------------- 44 45 boost::shared_ptr<CGrid> CField::getRelGrid(void) const 46 { 47 return (this->grid); 48 } 49 50 //---------------------------------------------------------------- 51 52 boost::shared_ptr<CFile> CField::getRelFile(void) const 53 { 54 return (this->file); 55 } 56 57 //---------------------------------------------------------------- 58 59 boost::shared_ptr<CField> CField::getDirectFieldReference(void) const 60 { 61 if (this->field_ref.isEmpty()) 62 return (this->getBaseFieldReference()); 63 64 if (! CObjectFactory::HasObject<CField>(this->field_ref.getValue())) 65 ERROR("CField::getDirectFieldReference(void)", 66 << "[ ref_name = " << this->field_ref.getValue() << "]" 67 << " invalid field name !"); 68 69 return (CObjectFactory::GetObject<CField>(this->field_ref.getValue())); 70 } 71 72 //---------------------------------------------------------------- 73 74 const boost::shared_ptr<CField> CField::getBaseFieldReference(void) const 75 { 76 return (baseRefObject); 77 } 78 79 //---------------------------------------------------------------- 80 81 const std::vector<boost::shared_ptr<CField> > & CField::getAllReference(void) const 82 { 83 return (refObject); 84 } 85 86 //---------------------------------------------------------------- 87 88 const StdString & CField::getBaseFieldId(void) const 89 { 90 return (this->getBaseFieldReference()->getId()); 91 } 92 93 //---------------------------------------------------------------- 94 95 bool CField::hasDirectFieldReference(void) const 96 { 97 return (!this->field_ref.isEmpty()); 98 } 99 100 //---------------------------------------------------------------- 101 102 void CField::solveRefInheritance(void) 103 { 104 std::set<CField *> sset; 105 boost::shared_ptr<CField> refer_sptr; 106 CField * refer_ptr = this; 107 this->baseRefObject = CObjectFactory::GetObject<CField>(this); 108 while (refer_ptr->hasDirectFieldReference()) 109 { 110 refer_sptr = refer_ptr->getDirectFieldReference(); 111 refer_ptr = refer_sptr.get(); 112 113 if(sset.end() != sset.find(refer_ptr)) 79 114 { 80 refer_sptr = refer_ptr->getDirectFieldReference(); 81 refer_ptr = refer_sptr.get(); 82 83 if(sset.end() != sset.find(refer_ptr)) 84 { 85 DEBUG (<< "Dépendance circulaire stoppée pour l'objet de type CField sur " 86 << "\"" + refer_ptr->getId() + "\" !"); 87 break; 88 } 89 90 SuperClassAttribute::setAttributes(refer_ptr); 91 sset.insert(refer_ptr); 92 baseRefObject = refer_sptr; 93 refObject.push_back(refer_sptr); 115 DEBUG (<< "Dépendance circulaire stoppée pour l'objet de type CField sur " 116 << "\"" + refer_ptr->getId() + "\" !"); 117 break; 94 118 } 95 } 96 97 //---------------------------------------------------------------- 98 99 void CField::solveOperation(void) 100 { 101 // TODO : à compléter; 102 } 103 104 //---------------------------------------------------------------- 105 106 void CField::solveGridReference(void) 107 { 108 boost::shared_ptr<CDomain> domain; 109 boost::shared_ptr<CAxis> axis; 110 119 120 SuperClassAttribute::setAttributes(refer_ptr); 121 sset.insert(refer_ptr); 122 baseRefObject = refer_sptr; 123 refObject.push_back(refer_sptr); 124 } 125 } 126 127 //---------------------------------------------------------------- 128 129 void CField::solveOperation(void) 130 { 131 // TODO : à compléter; 132 } 133 134 //---------------------------------------------------------------- 135 136 void CField::solveGridReference(void) 137 { 138 boost::shared_ptr<CDomain> domain; 139 boost::shared_ptr<CAxis> axis; 140 141 if (!domain_ref.isEmpty()) 142 { 143 if (CObjectFactory::HasObject<CDomain>(domain_ref.getValue())) 144 domain = CObjectFactory::GetObject<CDomain>(domain_ref.getValue()) ; 145 else 146 ERROR("CField::solveGridReference(void)", 147 << "Référence au domaine nommé \'" 148 << domain_ref.getValue() << "\' incorrecte") ; 149 } 150 151 if (!axis_ref.isEmpty()) 152 { 153 if (CObjectFactory::HasObject<CAxis>(axis_ref.getValue())) 154 axis = CObjectFactory::GetObject<CAxis>(axis_ref.getValue()) ; 155 else 156 ERROR("CField::solveGridReference(void)", 157 << "Référence à l'axe nommé \'" 158 << axis_ref.getValue() <<"\' incorrecte") ; 159 } 160 161 if (!grid_ref.isEmpty()) 162 { 163 if (CObjectFactory::HasObject<CGrid>(grid_ref.getValue())) 164 this->grid = CObjectFactory::GetObject<CGrid>(grid_ref.getValue()) ; 165 else 166 ERROR("CField::solveGridReference(void)", 167 << "Référence à la grille nommée \'" 168 << grid_ref.getValue() << "\' incorrecte"); 169 if (!domain_ref.isEmpty()) 170 DEBUG(<< "Définition conjointe de la grille " 171 << "et du domaine, la grille prévaut..." ); 172 if (!axis_ref.isEmpty()) 173 DEBUG(<< "Définition conjointe de la grille " 174 << "et de l'axe vertical, la grille prévaut...") ; 175 } 176 else 177 { 111 178 if (!domain_ref.isEmpty()) 112 179 { 113 if (CObjectFactory::HasObject<CDomain>(domain_ref.getValue()))114 domain = CObjectFactory::GetObject<CDomain>(domain_ref.getValue()) ;115 else116 ERROR("CField::solveGridReference(void)",117 << "Référence au domaine nommé \'"118 << domain_ref.getValue() << "\' incorrecte") ;119 }120 121 if (!axis_ref.isEmpty())122 {123 if (CObjectFactory::HasObject<CAxis>(axis_ref.getValue()))124 axis = CObjectFactory::GetObject<CAxis>(axis_ref.getValue()) ;125 else126 ERROR("CField::solveGridReference(void)",127 << "Référence à l'axe nommé \'"128 << axis_ref.getValue() <<"\' incorrecte") ;129 }130 131 if (!grid_ref.isEmpty())132 {133 if (CObjectFactory::HasObject<CGrid>(grid_ref.getValue()))134 this->grid = CObjectFactory::GetObject<CGrid>(grid_ref.getValue()) ;135 else136 ERROR("CField::solveGridReference(void)",137 << "Référence à la grille nommée \'"138 << grid_ref.getValue() << "\' incorrecte");139 if (!domain_ref.isEmpty())140 DEBUG(<< "Définition conjointe de la grille "141 << "et du domaine, la grille prévaut..." );142 180 if (!axis_ref.isEmpty()) 143 DEBUG(<< "Définition conjointe de la grille "144 << "et de l'axe vertical, la grille prévaut...") ;145 }146 else147 {148 if (!domain_ref.isEmpty())149 181 { 150 if (!axis_ref.isEmpty()) 151 { 152 this->grid = CGrid::CreateGrid(domain, axis) ; 153 this->grid_ref.setValue(this->grid->getId()); 154 } 155 else 156 { 157 this->grid = CGrid::CreateGrid(domain) ; 158 this->grid_ref.setValue(this->grid->getId()); 159 } 182 this->grid = CGrid::CreateGrid(domain, axis) ; 183 this->grid_ref.setValue(this->grid->getId()); 160 184 } 161 185 else 162 186 { 163 ERROR("CField::solveGridReference(void)",164 << "Le domaine horizontal pour le champ X n'est pas défini");187 this->grid = CGrid::CreateGrid(domain) ; 188 this->grid_ref.setValue(this->grid->getId()); 165 189 } 166 190 } 167 grid->solveReference() ; 168 } 191 else 192 { 193 ERROR("CField::solveGridReference(void)", 194 << "Le domaine horizontal pour le champ X n'est pas défini"); 195 } 196 } 197 grid->solveReference() ; 198 } 199 169 200 } // namespace tree 170 201
Note: See TracChangeset
for help on using the changeset viewer.