#include <Model_Validator.h>
#include <ModelAPI_Events.h>
#include <Events_Loop.h>
-#include <Events_Error.h>
+#include <Events_InfoMessage.h>
#include <Config_FeatureMessage.h>
#include <Config_AttributeMessage.h>
#include <Config_ValidatorMessage.h>
if (myPlugins.find(theFeatureID) != myPlugins.end()) {
std::pair<std::string, std::string>& aPlugin = myPlugins[theFeatureID]; // plugin and doc kind
if (!aPlugin.second.empty() && aPlugin.second != theDocOwner->kind()) {
- Events_Error::send(
- string("Feature '") + theFeatureID + "' can be created only in document '"
- + aPlugin.second + "' by the XML definition");
+ Events_InfoMessage("Model_Session",
+ "Feature '%1' can be created only in document '%2' by the XML definition")
+ .arg(theFeatureID).arg(aPlugin.second).send();
return FeaturePtr();
}
myCurrentPluginName = aPlugin.first;
if (myPluginObjs.find(myCurrentPluginName) != myPluginObjs.end()) {
FeaturePtr aCreated = myPluginObjs[myCurrentPluginName]->createFeature(theFeatureID);
if (!aCreated) {
- Events_Error::send(
- string("Can not initialize feature '") + theFeatureID + "' in plugin '"
- + myCurrentPluginName + "'");
+ Events_InfoMessage("Model_Session",
+ "Can not initialize feature '%1' in plugin '%2'")
+ .arg(theFeatureID).arg(myCurrentPluginName).send();
}
return aCreated;
} else {
- Events_Error::send(string("Can not load plugin '") + myCurrentPluginName + "'");
+ Events_InfoMessage("Model_Session",
+ "Can not load plugin '%1'").arg(myCurrentPluginName).send();
}
} else {
- Events_Error::send(string("Feature '") + theFeatureID + "' not found in any plugin");
+ Events_InfoMessage("Model_Session",
+ "Feature '%1' not found in any plugin").arg(theFeatureID).send();
}
return FeaturePtr(); // return nothing
Handle(Model_Application) anApp = Model_Application::getApplication();
bool aFirstCall = !anApp->hasRoot();
if (aFirstCall) {
+ // to be sure that plugins are loaded,
+ // even before the first "createFeature" call (in unit tests)
+ LoadPluginsInfo();
// creation of the root document is always outside of the transaction, so, avoid checking it
setCheckTransactions(false);
anApp->createDocument(0); // 0 is a root ID
const std::shared_ptr<Config_FeatureMessage> aMsg =
std::dynamic_pointer_cast<Config_FeatureMessage>(theMessage);
if (aMsg) {
+
// process the plugin info, load plugin
if (myPlugins.find(aMsg->id()) == myPlugins.end()) {
myPlugins[aMsg->id()] = std::pair<std::string, std::string>(
const std::shared_ptr<Config_AttributeMessage> aMsgAttr =
std::dynamic_pointer_cast<Config_AttributeMessage>(theMessage);
if (aMsgAttr) {
+
if (!aMsgAttr->isObligatory()) {
validators()->registerNotObligatory(aMsgAttr->featureId(), aMsgAttr->attributeId());
}
if(aMsgAttr->isConcealment()) {
validators()->registerConcealment(aMsgAttr->featureId(), aMsgAttr->attributeId());
}
- if (!aMsgAttr->caseId().empty()) {
- validators()->registerCase(aMsgAttr->featureId(), aMsgAttr->attributeId(),
- aMsgAttr->switchId(), aMsgAttr->caseId());
+ const std::list<std::pair<std::string, std::string> >& aCases = aMsgAttr->getCases();
+ if (!aCases.empty()) {
+ validators()->registerCase(aMsgAttr->featureId(), aMsgAttr->attributeId(), aCases);
}
}
}
}
} else { // create/update/delete
if (myCheckTransactions && !isOperation())
- Events_Error::send("Modification of data structure outside of the transaction");
+ Events_InfoMessage("Model_Session",
+ "Modification of data structure outside of the transaction").send();
// if part is deleted, make the root as the current document (on undo of Parts creations)
static const Events_ID kDeletedEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED);
if (theMessage->eventID() == kDeletedEvent) {