Salome HOME
Merge remote-tracking branch 'origin/Dev_0.6.1' into Dev_0.6.1
[modules/shaper.git] / src / ModuleBase / ModuleBase_FilterFactory.cpp
1 // File:        ModuleBase_FilterFactory.h
2 // Created:     10 Dec 2014
3 // Author:      Natalia ERMOLAEVA
4
5 #include "ModuleBase_FilterFactory.h"
6
7 #include <Model_FeatureValidator.h>
8 #include <ModelAPI_Feature.h>
9 #include <ModelAPI_Attribute.h>
10 #include <ModelAPI_Data.h>
11 #include <ModelAPI_AttributeValidator.h>
12 #include <Events_Error.h>
13
14
15 void ModuleBase_FilterFactory::registerFilter(const std::string& theID,
16                                                         ModuleBase_Filter* theValidator)
17 {
18   /*if (myIDs.find(theID) != myIDs.end()) {
19     Events_Error::send(std::string("Validator ") + theID + " is already registered");
20   } else {
21     myIDs[theID] = theValidator;
22   }*/
23 }
24
25 void ModuleBase_FilterFactory::assignFilter(const std::string& theID,
26   const std::string& theFeatureID,
27   const std::string& theAttrID)
28 {
29   /*
30   // create feature-structures if not exist
31   std::map<std::string, std::map<std::string, AttrValidators> >::iterator aFeature = myAttrs.find(
32     theFeatureID);
33   if (aFeature == myAttrs.end()) {
34     myAttrs[theFeatureID] = std::map<std::string, AttrValidators>();
35     aFeature = myAttrs.find(theFeatureID);
36   }
37   // add attr-structure if not exist, or generate error if already exist
38   std::map<std::string, AttrValidators>::iterator anAttr = aFeature->second.find(theAttrID);
39   if (anAttr == aFeature->second.end()) {
40     aFeature->second[theAttrID] = AttrValidators();
41   }
42   //aFeature->second[theAttrID][theID] = theArguments;
43   */
44 }
45
46 const SelectMgr_ListOfFilter& ModuleBase_FilterFactory::filters(const std::string& theFeatureID,
47   const std::string& theAttrID/*,
48   std::list<ModuleBase_Filter*>& theFilters/*,
49   std::list<std::list<std::string> >& theArguments*/) const
50 {
51   SelectMgr_ListOfFilter aFilters;
52   return aFilters;
53   /*  std::map<std::string, std::map<std::string, AttrValidators> >::const_iterator aFeature = 
54     myAttrs.find(theFeatureID);
55   if (aFeature != myAttrs.cend()) {
56     std::map<std::string, AttrValidators>::const_iterator anAttr = aFeature->second.find(theAttrID);
57     if (anAttr != aFeature->second.end()) {
58       AttrValidators::const_iterator aValIter = anAttr->second.cbegin();
59       for (; aValIter != anAttr->second.cend(); aValIter++) {
60         std::map<std::string, ModuleBase_Filter*>::const_iterator aFound = myIDs.find(
61           aValIter->first);
62         if (aFound == myIDs.end()) {
63           Events_Error::send(std::string("Validator ") + aValIter->first + " was not registered");
64         } else {
65           theValidators.push_back(aFound->second);
66           theArguments.push_back(aValIter->second);
67         }
68       }
69     }
70   }*/
71 }
72
73 ModuleBase_FilterFactory::ModuleBase_FilterFactory()
74 {
75   //const static std::string kDefaultId = "Model_FeatureValidator";
76   //registerValidator(kDefaultId, new Model_FeatureValidator);
77 }
78
79 const ModuleBase_Filter* ModuleBase_FilterFactory::validator(const std::string& theID) const
80 {
81 /*  std::map<std::string, ModuleBase_Filter*>::const_iterator aIt = myIDs.find(theID);
82   if (aIt != myIDs.end()) {
83     return aIt->second;
84   }*/
85   return NULL;
86 }
87
88 void ModuleBase_FilterFactory::addDefaultValidators(std::list<ModuleBase_Filter*>& theValidators) const
89 {
90 /*  const static std::string kDefaultId = "Model_FeatureValidator";
91   std::map<std::string, ModuleBase_Filter*>::const_iterator it = myIDs.find(kDefaultId);
92   if(it == myIDs.end())
93     return;
94   theValidators.push_back(it->second);*/
95 }
96
97 bool ModuleBase_FilterFactory::validate(const std::shared_ptr<ModelAPI_Feature>& theFeature) const
98 {
99 /*  const static std::string kDefaultId = "Model_FeatureValidator";
100   // check feature validators first
101   std::map<std::string, AttrValidators>::const_iterator aFeature = 
102     myFeatures.find(theFeature->getKind());
103   if (aFeature != myFeatures.end()) {
104     AttrValidators::const_iterator aValidator = aFeature->second.begin();
105     for(; aValidator != aFeature->second.end(); aValidator++) {
106       std::map<std::string, ModuleBase_Filter*>::const_iterator aValFind = 
107         myIDs.find(aValidator->first);
108       if (aValFind == myIDs.end()) {
109         Events_Error::send(std::string("Validator ") + aValidator->first + " was not registered");
110         continue;
111       }
112       const ModelAPI_FeatureValidator* aFValidator = 
113         dynamic_cast<const ModelAPI_FeatureValidator*>(aValFind->second);
114       if (aFValidator) {
115         if (!aFValidator->isValid(theFeature, aValidator->second))
116           return false;
117       }
118     }
119   }
120   // check default validator
121   std::map<std::string, ModuleBase_Filter*>::const_iterator aDefaultVal = myIDs.find(kDefaultId);
122   if(aDefaultVal != myIDs.end()) {
123     static const std::list<std::string> anEmptyArgList;
124     const ModelAPI_FeatureValidator* aFValidator = 
125       dynamic_cast<const ModelAPI_FeatureValidator*>(aDefaultVal->second);
126     if (aFValidator) {
127       if (!aFValidator->isValid(theFeature, anEmptyArgList))
128         return false;
129     }
130   }
131   
132   // check all attributes for validity
133   std::shared_ptr<ModelAPI_Data> aData = theFeature->data();
134   // Validity of data is checked by "Model_FeatureValidator" (kDefaultId)
135   // if (!aData || !aData->isValid())
136   //   return false;
137   static const std::string kAllTypes = "";
138   std::map<std::string, std::map<std::string, AttrValidators> >::const_iterator aFeatureIter = 
139     myAttrs.find(theFeature->getKind());
140   if (aFeatureIter != myAttrs.cend()) {
141     std::list<std::string> aLtAttributes = aData->attributesIDs(kAllTypes);
142     std::list<std::string>::iterator anAttrIter = aLtAttributes.begin();
143     for (; anAttrIter != aLtAttributes.end(); anAttrIter++) {
144       std::map<std::string, AttrValidators>::const_iterator anAttr = 
145           aFeatureIter->second.find(*anAttrIter);
146       if (anAttr != aFeatureIter->second.end()) {
147         AttrValidators::const_iterator aValIter = anAttr->second.cbegin();
148         for (; aValIter != anAttr->second.cend(); aValIter++) {
149           std::map<std::string, ModuleBase_Filter*>::const_iterator aFound = myIDs.find(
150             aValIter->first);
151           if (aFound == myIDs.end()) {
152             Events_Error::send(std::string("Validator ") + aValIter->first + " was not registered");
153           } else {
154             const ModelAPI_AttributeValidator* anAttrValidator = 
155               dynamic_cast<const ModelAPI_AttributeValidator*>(aFound->second);
156             if (anAttrValidator) {
157               AttributePtr anAttribute = theFeature->data()->attribute(*anAttrIter);
158               if (!anAttrValidator->isValid(anAttribute, aValIter->second)) {
159                   return false;
160               }
161             }
162           }
163         }
164       }
165     }
166   }
167   */
168  return true;
169 }
170
171 void ModuleBase_FilterFactory::registerNotObligatory(std::string theFeature, std::string theAttribute)
172 {
173 /*  const static std::string kDefaultId = "Model_FeatureValidator";
174   std::map<std::string, ModuleBase_Filter*>::const_iterator it = myIDs.find(kDefaultId);
175   if (it != myIDs.end()) {
176     Model_FeatureValidator* aValidator = dynamic_cast<Model_FeatureValidator*>(it->second);
177     if (aValidator) {
178       aValidator->registerNotObligatory(theFeature, theAttribute);
179     }
180   }*/
181 }
182
183 bool ModuleBase_FilterFactory::isNotObligatory(std::string theFeature, std::string theAttribute)
184 {
185 /*  const static std::string kDefaultId = "Model_FeatureValidator";
186   std::map<std::string, ModuleBase_Filter*>::const_iterator it = myIDs.find(kDefaultId);
187   if (it != myIDs.end()) {
188     Model_FeatureValidator* aValidator = dynamic_cast<Model_FeatureValidator*>(it->second);
189     if (aValidator) {
190       return aValidator->isNotObligatory(theFeature, theAttribute);
191     }
192   }*/
193   return false; // default
194 }
195
196 void ModuleBase_FilterFactory::registerConcealment(std::string theFeature, std::string theAttribute)
197 {
198 /*  std::map<std::string, std::set<std::string> >::iterator aFind = myConcealed.find(theFeature);
199   if (aFind == myConcealed.end()) {
200     std::set<std::string> aNewSet;
201     aNewSet.insert(theAttribute);
202     myConcealed[theFeature] = aNewSet;
203   } else {
204     aFind->second.insert(theAttribute);
205   }*/
206 }
207
208 bool ModuleBase_FilterFactory::isConcealed(std::string theFeature, std::string theAttribute)
209 {
210   /*std::map<std::string, std::set<std::string> >::iterator aFind = myConcealed.find(theFeature);
211   return aFind != myConcealed.end() && aFind->second.find(theAttribute) != aFind->second.end();*/
212   return true;
213 }