summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/Parser.cpp')
-rw-r--r--cpp/src/IceGrid/Parser.cpp165
1 files changed, 126 insertions, 39 deletions
diff --git a/cpp/src/IceGrid/Parser.cpp b/cpp/src/IceGrid/Parser.cpp
index f452a5cc9c6..fed59d3ec86 100644
--- a/cpp/src/IceGrid/Parser.cpp
+++ b/cpp/src/IceGrid/Parser.cpp
@@ -684,68 +684,155 @@ Parser::diffApplication(const list<string>& args)
ApplicationDescriptorHelper newAppHelper(_communicator, newApp);
ApplicationDescriptorHelper origAppHelper(_communicator, origApp);
-// //
-// // Compare the server templates
-// //
-
-
-// //
-// // Compare the servers
-// //
-// set<string> oldSvrs;
-// set<string> newSvrs;
-// for_each(origApp->servers.begin(), origApp->servers.end(), AddServerName(oldSvrs));
-// for_each(newApp->servers.begin(), newApp->servers.end(), AddServerName(newSvrs));
+ if(!origApp->serverTemplates.empty() || !newApp->serverTemplates.empty())
+ {
+ out << nl << "server templates";
+ out << sb;
-// set<string> added, removed, updated;
-// set_intersection(newSvrs.begin(), newSvrs.end(), oldSvrs.begin(), oldSvrs.end(), set_inserter(updated));
-// set_difference(oldSvrs.begin(), oldSvrs.end(), newSvrs.begin(), newSvrs.end(), set_inserter(removed));
-// set_difference(newSvrs.begin(), newSvrs.end(), oldSvrs.begin(), oldSvrs.end(), set_inserter(added));
+ set<string> oldTmpls;
+ set<string> newTmpls;
+ for(TemplateDescriptorDict::const_iterator p = origApp->serverTemplates.begin();
+ p != origApp->serverTemplates.end(); ++p)
+ {
+ oldTmpls.insert(p->first);
+ }
+ for(TemplateDescriptorDict::const_iterator p = newApp->serverTemplates.begin();
+ p != newApp->serverTemplates.end(); ++p)
+ {
+ newTmpls.insert(p->first);
+ }
-// out << nl << "servers";
-// out <<
+ set<string> added, removed, updated;
+ set_difference(newTmpls.begin(), newTmpls.end(), oldTmpls.begin(), oldTmpls.end(), set_inserter(added));
+ set_difference(oldTmpls.begin(), oldTmpls.end(), newTmpls.begin(), newTmpls.end(), set_inserter(removed));
- for(p = newApp->servers.begin(); p != newApp->servers.end(); ++p)
- {
- ServerDescriptorPtr desc = ServerDescriptorPtr::dynamicCast(p->descriptor);
- ServerDescriptorPtr orig;
- for(InstanceDescriptorSeq::const_iterator q = origApp->servers.begin(); q != origApp->servers.end(); ++q)
+ for(TemplateDescriptorDict::const_iterator p = newApp->serverTemplates.begin();
+ p != newApp->serverTemplates.end(); ++p)
{
- if(desc->name == q->descriptor->name)
+ ServerDescriptorPtr desc = ServerDescriptorPtr::dynamicCast(p->second.descriptor);
+ TemplateDescriptorDict::const_iterator q = origApp->serverTemplates.find(p->first);
+ if(q != origApp->serverTemplates.end())
{
- orig = ServerDescriptorPtr::dynamicCast(q->descriptor);
- break;
+ ServerDescriptorPtr orig = ServerDescriptorPtr::dynamicCast(q->second.descriptor);
+ if(ServerDescriptorHelper(newAppHelper, desc) != ServerDescriptorHelper(origAppHelper, orig))
+ {
+ updated.insert(p->first);
+ }
}
}
+
+ for(set<string>::const_iterator p = added.begin(); p != added.end(); ++p)
+ {
+ out << nl << "server template `" << *p << "' added";
+ }
+ for(set<string>::const_iterator p = updated.begin(); p != updated.end(); ++p)
+ {
+ out << nl << "server template `" << *p << "' updated";
+ }
+ for(set<string>::const_iterator p = removed.begin(); p != removed.end(); ++p)
+ {
+ out << nl << "server template `" << *p << "' removed";
+ }
+ out << eb;
+ }
- if(orig)
+ if(!origApp->serviceTemplates.empty() || !newApp->serviceTemplates.empty())
+ {
+ out << nl << "service templates";
+ out << sb;
+
+ set<string> oldTmpls;
+ set<string> newTmpls;
+ for(TemplateDescriptorDict::const_iterator p = origApp->serviceTemplates.begin();
+ p != origApp->serviceTemplates.end(); ++p)
{
- if(ServerDescriptorHelper(newAppHelper, desc) != ServerDescriptorHelper(origAppHelper, orig))
+ oldTmpls.insert(p->first);
+ }
+ for(TemplateDescriptorDict::const_iterator p = newApp->serviceTemplates.begin();
+ p != newApp->serviceTemplates.end(); ++p)
+ {
+ newTmpls.insert(p->first);
+ }
+
+ set<string> added, removed, updated;
+ set_difference(newTmpls.begin(), newTmpls.end(), oldTmpls.begin(), oldTmpls.end(), set_inserter(added));
+ set_difference(oldTmpls.begin(), oldTmpls.end(), newTmpls.begin(), newTmpls.end(), set_inserter(removed));
+
+ for(TemplateDescriptorDict::const_iterator p = newApp->serviceTemplates.begin();
+ p != newApp->serviceTemplates.end(); ++p)
+ {
+ ServiceDescriptorPtr desc = ServiceDescriptorPtr::dynamicCast(p->second.descriptor);
+ TemplateDescriptorDict::const_iterator q = origApp->serviceTemplates.find(p->first);
+ if(q != origApp->serviceTemplates.end())
{
- out << nl << "server `" << orig->name << "' updated";
+ ServiceDescriptorPtr orig = ServiceDescriptorPtr::dynamicCast(q->second.descriptor);
+ if(ServiceDescriptorHelper(newAppHelper, desc) != ServiceDescriptorHelper(origAppHelper, orig))
+ {
+ updated.insert(p->first);
+ }
}
}
- else
+
+ for(set<string>::const_iterator p = added.begin(); p != added.end(); ++p)
+ {
+ out << nl << "service template `" << *p << "' added";
+ }
+ for(set<string>::const_iterator p = updated.begin(); p != updated.end(); ++p)
+ {
+ out << nl << "service template `" << *p << "' updated";
+ }
+ for(set<string>::const_iterator p = removed.begin(); p != removed.end(); ++p)
{
- out << nl << "server `" << desc->name << "' added";
+ out << nl << "service template `" << *p << "' removed";
}
+
+ out << eb;
}
- for(p = origApp->servers.begin(); p != origApp->servers.end(); ++p)
+ if(!origApp->servers.empty() || !newApp->servers.empty())
{
- bool found = false;
- for(InstanceDescriptorSeq::const_iterator q = newApp->servers.begin(); q != newApp->servers.end(); ++q)
+ out << nl << "servers";
+ out << sb;
+
+ set<string> oldSvrs;
+ set<string> newSvrs;
+ for_each(origApp->servers.begin(), origApp->servers.end(), AddServerName(oldSvrs));
+ for_each(newApp->servers.begin(), newApp->servers.end(), AddServerName(newSvrs));
+
+ set<string> added, removed, updated;
+ set_difference(newSvrs.begin(), newSvrs.end(), oldSvrs.begin(), oldSvrs.end(), set_inserter(added));
+ set_difference(oldSvrs.begin(), oldSvrs.end(), newSvrs.begin(), newSvrs.end(), set_inserter(removed));
+
+ for(p = newApp->servers.begin(); p != newApp->servers.end(); ++p)
{
- if(p->descriptor->name == q->descriptor->name)
+ ServerDescriptorPtr desc = ServerDescriptorPtr::dynamicCast(p->descriptor);
+ for(InstanceDescriptorSeq::const_iterator q = origApp->servers.begin(); q != origApp->servers.end(); ++q)
{
- found = true;
- break;
+ if(desc->name == q->descriptor->name)
+ {
+ ServerDescriptorPtr orig = ServerDescriptorPtr::dynamicCast(q->descriptor);
+ if(ServerDescriptorHelper(newAppHelper, desc) != ServerDescriptorHelper(origAppHelper, orig))
+ {
+ updated.insert(orig->name);
+ }
+ break;
+ }
}
}
- if(!found)
+
+ for(set<string>::const_iterator p = added.begin(); p != added.end(); ++p)
+ {
+ out << nl << "server `" << *p << "' added";
+ }
+ for(set<string>::const_iterator p = updated.begin(); p != updated.end(); ++p)
{
- out << nl << "server `" << p->descriptor->name << "' removed";
+ out << nl << "server `" << *p << "' updated";
}
+ for(set<string>::const_iterator p = removed.begin(); p != removed.end(); ++p)
+ {
+ out << nl << "server `" << *p << "' removed";
+ }
+ out << eb;
}
out << eb;