summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/TransformDescriptors.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/FreezeScript/TransformDescriptors.h')
-rw-r--r--cpp/src/FreezeScript/TransformDescriptors.h353
1 files changed, 353 insertions, 0 deletions
diff --git a/cpp/src/FreezeScript/TransformDescriptors.h b/cpp/src/FreezeScript/TransformDescriptors.h
new file mode 100644
index 00000000000..d0d33085796
--- /dev/null
+++ b/cpp/src/FreezeScript/TransformDescriptors.h
@@ -0,0 +1,353 @@
+// **********************************************************************
+//
+// Copyright (c) 2004
+// ZeroC, Inc.
+// Billerica, MA, USA
+//
+// All Rights Reserved.
+//
+// Ice is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License version 2 as published by
+// the Free Software Foundation.
+//
+// **********************************************************************
+
+#ifndef FREEZE_SCRIPT_TRANSFORM_DESCRIPTORS_H
+#define FREEZE_SCRIPT_TRANSFORM_DESCRIPTORS_H
+
+#include <FreezeScript/Parser.h>
+#include <FreezeScript/TransformVisitor.h>
+#include <IceXML/Parser.h>
+
+class Db;
+class DbTxn;
+
+namespace FreezeScript
+{
+
+class Descriptor;
+typedef IceUtil::Handle<Descriptor> DescriptorPtr;
+
+class DeleteRecordException {};
+
+class Descriptor : virtual public IceUtil::SimpleShared
+{
+public:
+
+ virtual ~Descriptor();
+
+ virtual DescriptorPtr parent() const;
+ virtual void addChild(const DescriptorPtr&) = 0;
+ virtual void validate() = 0;
+ virtual void execute(const SymbolTablePtr&, TransformInfo*) = 0;
+
+protected:
+
+ Descriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&);
+
+ NodePtr parse(const std::string&) const;
+
+ Slice::TypePtr findType(const Slice::UnitPtr&, const std::string&);
+
+ DescriptorPtr _parent;
+ int _line;
+ DataFactoryPtr _factory;
+ ErrorReporterPtr _errorReporter;
+};
+
+class SetDescriptor : public Descriptor
+{
+public:
+
+ SetDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ EntityNodePtr _target;
+ NodePtr _value;
+ std::string _valueStr;
+ std::string _type;
+ NodePtr _length;
+ std::string _lengthStr;
+ bool _convert;
+};
+
+class DefineDescriptor : public Descriptor
+{
+public:
+
+ DefineDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&, const Slice::UnitPtr&, const Slice::UnitPtr&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ std::string _name;
+ NodePtr _value;
+ std::string _valueStr;
+ Slice::TypePtr _type;
+ NodePtr _length;
+ std::string _lengthStr;
+ bool _convert;
+};
+
+class AddDescriptor : public Descriptor
+{
+public:
+
+ AddDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ EntityNodePtr _target;
+ NodePtr _key;
+ std::string _keyStr;
+ NodePtr _value;
+ std::string _valueStr;
+ std::string _type;
+ bool _convert;
+};
+
+class RemoveDescriptor : public Descriptor
+{
+public:
+
+ RemoveDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ EntityNodePtr _target;
+ NodePtr _key;
+ std::string _keyStr;
+};
+
+class DeleteDescriptor : public Descriptor
+{
+public:
+
+ DeleteDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+};
+
+class FailDescriptor : public Descriptor
+{
+public:
+
+ FailDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ NodePtr _test;
+ std::string _testStr;
+ std::string _message;
+};
+
+class EchoDescriptor : public Descriptor
+{
+public:
+
+ EchoDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ std::string _message;
+ NodePtr _value;
+ std::string _valueStr;
+};
+
+class ExecutableContainerDescriptor : virtual public Descriptor
+{
+public:
+
+ ExecutableContainerDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&, const std::string&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+protected:
+
+ std::vector<DescriptorPtr> _children;
+
+private:
+
+ std::string _name;
+};
+
+class IfDescriptor : public ExecutableContainerDescriptor
+{
+public:
+
+ IfDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&, const IceXML::Attributes&);
+
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ NodePtr _test;
+ std::string _testStr;
+};
+
+class IterateDescriptor : public ExecutableContainerDescriptor
+{
+public:
+
+ IterateDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&);
+
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ EntityNodePtr _target;
+ std::string _key;
+ std::string _value;
+ std::string _element;
+ std::string _index;
+};
+
+class TransformDescriptor : public ExecutableContainerDescriptor
+{
+public:
+
+ TransformDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&, const Slice::UnitPtr&, const Slice::UnitPtr&);
+
+ Slice::TypePtr type() const;
+ std::string typeName() const;
+ Slice::TypePtr renameType() const;
+ std::string renameTypeName() const;
+ bool doDefaultTransform() const;
+ bool doBaseTransform() const;
+
+private:
+
+ bool _default;
+ bool _base;
+ Slice::TypePtr _newType;
+ Slice::TypePtr _renameType;
+};
+typedef IceUtil::Handle<TransformDescriptor> TransformDescriptorPtr;
+
+class InitDescriptor : virtual public ExecutableContainerDescriptor, virtual public DataInitializer
+{
+public:
+
+ InitDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&, const Slice::UnitPtr&, const Slice::UnitPtr&);
+
+ virtual void initialize(const DataFactoryPtr&, const DataPtr&, const Ice::CommunicatorPtr&);
+
+ std::string typeName() const;
+
+private:
+
+ Slice::UnitPtr _old;
+ Slice::UnitPtr _new;
+ Slice::TypePtr _type;
+};
+typedef IceUtil::Handle<InitDescriptor> InitDescriptorPtr;
+
+class RecordDescriptor : public ExecutableContainerDescriptor
+{
+public:
+
+ RecordDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&, const Slice::UnitPtr&, const Slice::UnitPtr&);
+
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ void transformRecord(IceInternal::BasicStream&, IceInternal::BasicStream&, IceInternal::BasicStream&,
+ IceInternal::BasicStream&, TransformInfo*);
+
+ Slice::UnitPtr _old;
+ Slice::UnitPtr _new;
+};
+typedef IceUtil::Handle<RecordDescriptor> RecordDescriptorPtr;
+
+class DatabaseDescriptor : public ExecutableContainerDescriptor
+{
+public:
+
+ DatabaseDescriptor(const DescriptorPtr&, int, const DataFactoryPtr&, const ErrorReporterPtr&,
+ const IceXML::Attributes&, const Slice::UnitPtr&, const Slice::UnitPtr&);
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+private:
+
+ Slice::UnitPtr _old;
+ Slice::UnitPtr _new;
+ Slice::TypePtr _oldKey;
+ Slice::TypePtr _newKey;
+ Slice::TypePtr _oldValue;
+ Slice::TypePtr _newValue;
+ RecordDescriptorPtr _record;
+};
+typedef IceUtil::Handle<DatabaseDescriptor> DatabaseDescriptorPtr;
+
+class TransformInfoI;
+
+class TransformDBDescriptor : public Descriptor
+{
+public:
+
+ TransformDBDescriptor(int, const DataFactoryPtr&, const ErrorReporterPtr&, const IceXML::Attributes&,
+ const Slice::UnitPtr&, const Slice::UnitPtr&);
+ ~TransformDBDescriptor();
+
+ virtual void addChild(const DescriptorPtr&);
+ virtual void validate();
+ virtual void execute(const SymbolTablePtr&, TransformInfo*);
+
+ void transform(const Ice::CommunicatorPtr&, Db*, DbTxn*, Db*, DbTxn*, bool);
+
+private:
+
+ Slice::UnitPtr _old;
+ Slice::UnitPtr _new;
+ DatabaseDescriptorPtr _database;
+ std::vector<DescriptorPtr> _children;
+ TransformInfoI* _info;
+};
+typedef IceUtil::Handle<TransformDBDescriptor> TransformDBDescriptorPtr;
+
+} // End of namespace FreezeScript
+
+#endif