// ********************************************************************** // // Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #pragma once #include #include #include #include #include namespace IceGrid { class ApplicationHelper; class Resolver { public: Resolver(const ApplicationDescriptor&, const Ice::CommunicatorPtr&, bool); Resolver(const Resolver&, const std::map&, bool); Resolver(const InternalNodeInfoPtr&, const Ice::CommunicatorPtr&); std::string operator()(const std::string&, const std::string& = std::string(), bool = true) const; Ice::StringSeq operator()(const Ice::StringSeq&, const std::string&) const; DistributionDescriptor operator()(const DistributionDescriptor&) const; PropertyDescriptorSeq operator()(const PropertyDescriptorSeq&, const std::string& = std::string("property")) const; PropertySetDescriptorDict operator()(const PropertySetDescriptorDict&) const; ObjectDescriptorSeq operator()(const ObjectDescriptorSeq&, const std::string&) const; Ice::Identity operator()(const Ice::Identity&, const std::string&) const; PropertySetDescriptor operator()(const PropertySetDescriptor&) const; std::string asInt(const std::string&, const std::string& = std::string()) const; std::string asFloat(const std::string&, const std::string& = std::string()) const; std::string asId(const std::string&, const std::string& = std::string(), bool = false) const; void setReserved(const std::string&, const std::string&); void setContext(const std::string&); void addPropertySets(const PropertySetDescriptorDict&); const PropertySetDescriptor& getPropertySet(const std::string&) const; PropertyDescriptorSeq getProperties(const Ice::StringSeq&) const; void addIgnored(const std::string&); void setVersion(const std::string&); int getVersion() const; void exception(const std::string&) const; TemplateDescriptor getServerTemplate(const std::string&) const; TemplateDescriptor getServiceTemplate(const std::string&) const; bool hasReplicaGroup(const std::string&) const; Ice::CommunicatorPtr getCommunicator() const { return _communicator; } bool warningEnabled() const { return _enableWarning; } private: std::string substitute(const std::string&, bool, bool) const; std::string getVariable(const std::string&, bool, bool&) const; PropertyDescriptorSeq getProperties(const Ice::StringSeq&, std::set&) const; static std::map getReserved(); void checkReserved(const std::string&, const std::map&) const; const ApplicationDescriptor* _application; const Ice::CommunicatorPtr _communicator; const bool _escape; const bool _enableWarning; std::string _context; std::map _variables; std::map _parameters; PropertySetDescriptorDict _propertySets; std::map _reserved; std::set _ignore; int _version; }; class CommunicatorHelper { public: CommunicatorHelper(const CommunicatorDescriptorPtr&); CommunicatorHelper() { } virtual ~CommunicatorHelper() { } virtual bool operator==(const CommunicatorHelper&) const; virtual bool operator!=(const CommunicatorHelper&) const; virtual void getIds(std::multiset&, std::multiset&) const; virtual void getReplicaGroups(std::set&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&) const; protected: void printDbEnv(IceUtilInternal::Output&, const DbEnvDescriptor&) const; void printObjectAdapter(const Ice::CommunicatorPtr&, IceUtilInternal::Output&, const AdapterDescriptor&) const; void printPropertySet(IceUtilInternal::Output&, const PropertySetDescriptor&) const; virtual std::string getProperty(const std::string&) const; void instantiateImpl(const CommunicatorDescriptorPtr&, const Resolver&) const; private: CommunicatorDescriptorPtr _desc; }; class ServiceHelper : public CommunicatorHelper { public: ServiceHelper(const ServiceDescriptorPtr&); ServiceHelper() { } virtual bool operator==(const CommunicatorHelper&) const; virtual bool operator!=(const CommunicatorHelper&) const; ServiceDescriptorPtr getDescriptor() const; ServiceDescriptorPtr instantiate(const Resolver&, const PropertyDescriptorSeq&, const PropertySetDescriptorDict&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&) const; protected: using CommunicatorHelper::instantiateImpl; void instantiateImpl(const ServiceDescriptorPtr&, const Resolver&, const PropertyDescriptorSeq&, const PropertySetDescriptorDict&) const; private: ServiceDescriptorPtr _desc; }; class ServerHelper : public CommunicatorHelper, public IceUtil::SimpleShared { public: ServerHelper(const ServerDescriptorPtr&); ServerHelper() { } virtual bool operator==(const CommunicatorHelper&) const; virtual bool operator!=(const CommunicatorHelper&) const; ServerDescriptorPtr getDescriptor() const; virtual ServerDescriptorPtr instantiate(const Resolver&, const PropertyDescriptorSeq&, const PropertySetDescriptorDict&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&, const ServerInfo&) const; protected: using CommunicatorHelper::instantiateImpl; void printImpl(const Ice::CommunicatorPtr&, IceUtilInternal::Output&, const ServerInfo&) const; void instantiateImpl(const ServerDescriptorPtr&, const Resolver&, const PropertyDescriptorSeq&) const; private: ServerDescriptorPtr _desc; }; typedef IceUtil::Handle ServerHelperPtr; class InstanceHelper { protected: std::map instantiateParams(const Resolver&, const std::string&, const std::map&, const std::vector&, const std::map&) const; }; class ServiceInstanceHelper : public InstanceHelper { public: ServiceInstanceHelper(const ServiceInstanceDescriptor&); bool operator==(const ServiceInstanceHelper&) const; bool operator!=(const ServiceInstanceHelper&) const; ServiceInstanceDescriptor instantiate(const Resolver&, const PropertySetDescriptorDict&) const; void getIds(std::multiset&, std::multiset&) const; void getReplicaGroups(std::set&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&) const; private: ServiceInstanceDescriptor _def; mutable ServiceHelper _service; }; class IceBoxHelper : public ServerHelper { public: IceBoxHelper(const IceBoxDescriptorPtr&); IceBoxHelper() { } virtual bool operator==(const CommunicatorHelper&) const; virtual bool operator!=(const CommunicatorHelper&) const; virtual ServerDescriptorPtr instantiate(const Resolver&, const PropertyDescriptorSeq&, const PropertySetDescriptorDict&) const; virtual void getIds(std::multiset&, std::multiset&) const; virtual void getReplicaGroups(std::set&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&) const; void print(const Ice::CommunicatorPtr&, IceUtilInternal::Output&, const ServerInfo&) const; protected: #if defined(__sun) using ServerHelper::instantiateImpl; #endif void instantiateImpl(const IceBoxDescriptorPtr&, const Resolver&, const PropertyDescriptorSeq&, const PropertySetDescriptorDict&) const; private: IceBoxDescriptorPtr _desc; std::vector _services; }; class ServerInstanceHelper : public InstanceHelper { public: ServerInstanceHelper(const ServerInstanceDescriptor&, const Resolver&, bool); ServerInstanceHelper(const ServerDescriptorPtr&, const Resolver&, bool); void operator=(const ServerInstanceHelper&); bool operator==(const ServerInstanceHelper&) const; bool operator!=(const ServerInstanceHelper&) const; std::string getId() const; ServerInstanceDescriptor getDefinition() const; ServerInstanceDescriptor getInstance() const; ServerDescriptorPtr getServerDefinition() const; ServerDescriptorPtr getServerInstance() const; void getIds(std::multiset&, std::multiset&) const; void getReplicaGroups(std::set&) const; private: void init(const ServerDescriptorPtr&, const Resolver&, bool); const ServerInstanceDescriptor _def; std::string _id; ServerInstanceDescriptor _instance; ServerHelperPtr _serverDefinition; ServerHelperPtr _serverInstance; }; class NodeHelper { public: NodeHelper(const std::string&, const NodeDescriptor&, const Resolver&, bool); virtual ~NodeHelper() { } virtual bool operator==(const NodeHelper&) const; virtual bool operator!=(const NodeHelper&) const; NodeUpdateDescriptor diff(const NodeHelper&) const; NodeDescriptor update(const NodeUpdateDescriptor&, const Resolver&) const; void getIds(std::multiset&, std::multiset&, std::multiset&) const; void getReplicaGroups(std::set&) const; const NodeDescriptor& getDefinition() const; const NodeDescriptor& getInstance() const; void getServerInfos(const std::string&, const std::string&, int, std::map&) const; bool hasDistributions(const std::string&) const; bool hasServers() const; bool hasServer(const std::string&) const; void print(IceUtilInternal::Output&) const; void printDiff(IceUtilInternal::Output&, const NodeHelper&) const; private: NodeDescriptor instantiate(const Resolver&) const; std::string _name; NodeDescriptor _def; NodeDescriptor _instance; bool _instantiated; typedef std::map ServerInstanceHelperDict; ServerInstanceHelperDict _serverInstances; ServerInstanceHelperDict _servers; }; class ApplicationHelper { public: ApplicationHelper(const Ice::CommunicatorPtr&, const ApplicationDescriptor&, bool = false, bool = true); ApplicationUpdateDescriptor diff(const ApplicationHelper&) const; ApplicationDescriptor update(const ApplicationUpdateDescriptor&) const; ApplicationDescriptor instantiateServer(const std::string&, const ServerInstanceDescriptor&) const; void getIds(std::set&, std::set&, std::set&) const; void getReplicaGroups(std::set&, std::set&) const; const ApplicationDescriptor& getDefinition() const; const ApplicationDescriptor& getInstance() const; void getDistributions(DistributionDescriptor&, std::vector&,const std::string& = std::string()) const; void print(IceUtilInternal::Output&, const ApplicationInfo&) const; void printDiff(IceUtilInternal::Output&, const ApplicationHelper&) const; std::map getServerInfos(const std::string&, int) const; private: Ice::CommunicatorPtr _communicator; ApplicationDescriptor _def; ApplicationDescriptor _instance; typedef std::map NodeHelperDict; NodeHelperDict _nodes; }; bool descriptorEqual(const ServerDescriptorPtr&, const ServerDescriptorPtr&); ServerHelperPtr createHelper(const ServerDescriptorPtr&); }