diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/slice/IcePatch/Node.ice | 22 | ||||
-rw-r--r-- | cpp/src/IcePatch/.depend | 3 | ||||
-rw-r--r-- | cpp/src/IcePatch/Client.cpp | 56 | ||||
-rw-r--r-- | cpp/src/IcePatch/Makefile | 3 | ||||
-rw-r--r-- | cpp/src/IcePatch/NodeDescFactory.cpp | 38 | ||||
-rw-r--r-- | cpp/src/IcePatch/NodeDescFactory.h | 30 | ||||
-rw-r--r-- | cpp/src/IcePatch/NodeI.cpp | 3 | ||||
-rw-r--r-- | cpp/src/IcePatch/NodeI.h | 4 |
8 files changed, 144 insertions, 15 deletions
diff --git a/cpp/slice/IcePatch/Node.ice b/cpp/slice/IcePatch/Node.ice index 80216427686..e1e4e6be590 100644 --- a/cpp/slice/IcePatch/Node.ice +++ b/cpp/slice/IcePatch/Node.ice @@ -21,24 +21,40 @@ exception NodeAccessException string reason; }; -interface Node +class NodeDesc { }; -sequence<Node*> Nodes; +sequence<NodeDesc> NodeDescSeq; + +interface Node +{ + NodeDesc describe() + throws NodeAccessException; +}; interface Directory extends Node { - Nodes getNodes() + NodeDescSeq getContents() throws NodeAccessException; }; +class DirectoryDesc extends NodeDesc +{ + Directory* directory; +}; + interface File extends Node { Ice::ByteSeq getBytes(int startPos, int howMuch) throws NodeAccessException; }; +class FileDesc extends NodeDesc +{ + File* file; +}; + }; #endif diff --git a/cpp/src/IcePatch/.depend b/cpp/src/IcePatch/.depend index 336aaacdc27..ab4c45857e2 100644 --- a/cpp/src/IcePatch/.depend +++ b/cpp/src/IcePatch/.depend @@ -1,5 +1,6 @@ Node.o: Node.cpp ../../include/Ice/Stream.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/BuiltinSequences.h ../../include/IcePatch/Node.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ObjectFactory.h -Client.o: Client.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/SystemF.h ../../include/Ice/SslExtensionF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IcePatch/Node.h +Client.o: Client.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/SystemF.h ../../include/Ice/SslExtensionF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../IcePatch/NodeDescFactory.h ../../include/IcePatch/Node.h +NodeDescFactory.o: NodeDescFactory.cpp ../IcePatch/NodeDescFactory.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/SystemF.h ../../include/Ice/SslExtensionF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IcePatch/Node.h Server.o: Server.cpp ../../include/Ice/Application.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/SystemF.h ../../include/Ice/SslExtensionF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../IcePatch/NodeLocator.h ../IcePatch/NodeI.h ../../include/IcePatch/Node.h NodeI.o: NodeI.cpp ../IcePatch/NodeI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/SystemF.h ../../include/Ice/SslExtensionF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IcePatch/Node.h NodeLocator.o: NodeLocator.cpp ../IcePatch/NodeLocator.h ../IcePatch/NodeI.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Communicator.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/SystemF.h ../../include/Ice/SslExtensionF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/IcePatch/Node.h diff --git a/cpp/src/IcePatch/Client.cpp b/cpp/src/IcePatch/Client.cpp index 1adc3b93fe4..79480906f34 100644 --- a/cpp/src/IcePatch/Client.cpp +++ b/cpp/src/IcePatch/Client.cpp @@ -9,7 +9,7 @@ // ********************************************************************** #include <Ice/Application.h> -#include <IcePatch/Node.h> +#include <IcePatch/NodeDescFactory.h> using namespace std; using namespace Ice; @@ -24,6 +24,7 @@ public: void usage(); virtual int run(int, char*[]); + void printNodeDesc(const NodeDescPtr&); void printNodeDescSeq(const NodeDescSeq&, const string&); }; @@ -91,21 +92,62 @@ IcePatch::Client::run(int argc, char* argv[]) } // + // Create and install the node description factory. + // + ObjectFactoryPtr factory = new NodeDescFactory; + communicator()->addObjectFactory(factory, "::IcePatch::DirectoryDesc"); + communicator()->addObjectFactory(factory, "::IcePatch::FileDesc"); + + // // Display node structure. // ObjectPrx topObj = communicator()->stringToProxy("IcePatch/.:" + endpoints); NodePrx top = NodePrx::checkedCast(topObj); - NodeDescPtr nodeDesc = top->describe(); - NodeDescSeq nodeDescSeq; - nodeDescSeq.push_back(nodeDesc); - printNodeDescSeq(nodeDescSeq, ""); + printNodeDesc(top->describe()); return EXIT_SUCCESS; } void +IcePatch::Client::printNodeDesc(const NodeDescPtr& nodeDesc) +{ + string name; + DirectoryDescPtr directoryDesc = DirectoryDescPtr::dynamicCast(nodeDesc); + if (directoryDesc) + { + name = directoryDesc->directory->ice_getIdentity().name; + } + else + { + FileDescPtr fileDesc = FileDescPtr::dynamicCast(nodeDesc); + assert(fileDesc); + name = fileDesc->file->ice_getIdentity().name; + } + + string::size_type pos = name.rfind('/'); + if (pos != string::npos) + { + name.erase(0, pos + 1); + } + + cout << name << endl; + + if (directoryDesc) + { + printNodeDescSeq(directoryDesc->directory->getContents(), ""); + } +} + +void IcePatch::Client::printNodeDescSeq(const NodeDescSeq& nodeDescSeq, const string& indent) { + if (nodeDescSeq.empty()) + { + return; + } + + cout << indent << "| " << endl; + for (unsigned int i = 0; i < nodeDescSeq.size(); ++i) { string name; @@ -127,7 +169,7 @@ IcePatch::Client::printNodeDescSeq(const NodeDescSeq& nodeDescSeq, const string& name.erase(0, pos + 1); } - cout << "+-" << name << endl; + cout << indent << "+-" << name << endl; if (directoryDesc) { @@ -144,6 +186,8 @@ IcePatch::Client::printNodeDescSeq(const NodeDescSeq& nodeDescSeq, const string& printNodeDescSeq(directoryDesc->directory->getContents(), newIndent); } } + + cout << indent << " " << endl; } int diff --git a/cpp/src/IcePatch/Makefile b/cpp/src/IcePatch/Makefile index 2333ac32897..f8ad9be4ad5 100644 --- a/cpp/src/IcePatch/Makefile +++ b/cpp/src/IcePatch/Makefile @@ -17,7 +17,8 @@ TARGETS = $(CLIENT) $(SERVER) OBJS = Node.o -COBJS = Client.o +COBJS = Client.o \ + NodeDescFactory.o SOBJS = Server.o \ NodeI.o \ diff --git a/cpp/src/IcePatch/NodeDescFactory.cpp b/cpp/src/IcePatch/NodeDescFactory.cpp new file mode 100644 index 00000000000..5423adcfd2f --- /dev/null +++ b/cpp/src/IcePatch/NodeDescFactory.cpp @@ -0,0 +1,38 @@ +// ********************************************************************** +// +// Copyright (c) 2002 +// MutableRealms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +#include <IcePatch/NodeDescFactory.h> + +using namespace std; +using namespace Ice; +using namespace IcePatch; + +ObjectPtr +IcePatch::NodeDescFactory::create(const std::string& type) +{ + if (type == "::IcePatch::DirectoryDesc") + { + return new DirectoryDesc; + } + + if (type == "::IcePatch::FileDesc") + { + return new FileDesc; + } + + assert(false); + return 0; // To keep the compiler from complaining. +} + +void +IcePatch::NodeDescFactory::destroy() +{ + // Nothing to do. +} diff --git a/cpp/src/IcePatch/NodeDescFactory.h b/cpp/src/IcePatch/NodeDescFactory.h new file mode 100644 index 00000000000..96313dd27bd --- /dev/null +++ b/cpp/src/IcePatch/NodeDescFactory.h @@ -0,0 +1,30 @@ +// ********************************************************************** +// +// Copyright (c) 2002 +// MutableRealms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +#ifndef ICE_PATCH_NODE_DESC_FACTORY_H +#define ICE_PATCH_NODE_DESC_FACTORY_H + +#include <Ice/Ice.h> +#include <IcePatch/Node.h> + +namespace IcePatch +{ + +class NodeDescFactory : public Ice::ObjectFactory +{ +public: + + Ice::ObjectPtr create(const std::string&); + void destroy(); +}; + +} + +#endif diff --git a/cpp/src/IcePatch/NodeI.cpp b/cpp/src/IcePatch/NodeI.cpp index 4a3c0ed1b7e..e5b39645ed4 100644 --- a/cpp/src/IcePatch/NodeI.cpp +++ b/cpp/src/IcePatch/NodeI.cpp @@ -9,9 +9,6 @@ // ********************************************************************** #include <IcePatch/NodeI.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> #include <dirent.h> using namespace std; diff --git a/cpp/src/IcePatch/NodeI.h b/cpp/src/IcePatch/NodeI.h index 71818b2c744..4f5e73a6b9c 100644 --- a/cpp/src/IcePatch/NodeI.h +++ b/cpp/src/IcePatch/NodeI.h @@ -37,7 +37,8 @@ public: DirectoryI(const Ice::ObjectAdapterPtr&); - virtual Nodes getNodes(const Ice::Current&); + virtual NodeDescPtr describe(const Ice::Current&); + virtual NodeDescSeq getContents(const Ice::Current&); }; class FileI : virtual public File, @@ -47,6 +48,7 @@ public: FileI(const Ice::ObjectAdapterPtr&); + virtual NodeDescPtr describe(const Ice::Current&); virtual Ice::ByteSeq getBytes(Ice::Int, Ice::Int, const Ice::Current&); }; |