ome-xml 5.2.3

OMEModelObject.h
1 /*
2 * #%L
3 * OME-XML C++ library for working with OME-XML metadata structures.
4 * %%
5 * Copyright © 2006 - 2016 Open Microscopy Environment:
6 * - Massachusetts Institute of Technology
7 * - National Institutes of Health
8 * - University of Dundee
9 * - Board of Regents of the University of Wisconsin-Madison
10 * - Glencoe Software, Inc.
11 * %%
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions are met:
14 *
15 * 1. Redistributions of source code must retain the above copyright notice,
16 * this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 *
33 * The views and conclusions contained in the software and documentation are
34 * those of the authors and should not be interpreted as representing official
35 * policies, either expressed or implied, of any organization.
36 * #L%
37 */
38
39 #ifndef OME_XML_MODEL_OMEMODELOBJECT_H
40 #define OME_XML_MODEL_OMEMODELOBJECT_H
41
42 #include <algorithm>
43 #include <map>
44 #include <string>
45 #include <vector>
46
47 #include <boost/multi_index_container.hpp>
48 #include <boost/multi_index/identity.hpp>
49 #include <boost/multi_index/indexed_by.hpp>
50 #include <boost/multi_index/ordered_index.hpp>
51 #include <boost/multi_index/random_access_index.hpp>
52
53 #include <ome/compat/memory.h>
54
55 #include <ome/common/xml/dom/Element.h>
56 #include <ome/common/xml/dom/Document.h>
57
58 namespace ome
59 {
60 namespace xml
61 {
62 namespace model
63 {
64
65 class OMEModel;
66 class Reference;
67
77 class OMEModelObject : public ome::compat::enable_shared_from_this<OMEModelObject>
78 {
79 protected:
84 template<typename T, template <typename ElementType> class Ptr>
85 struct indexed_container
86 {
88 typedef boost::multi_index_container<
89 Ptr<T>, // value type
90 boost::multi_index::indexed_by<
91 boost::multi_index::random_access<>, // insertion order
92 boost::multi_index::ordered_unique<boost::multi_index::identity<Ptr<T> >, ome::compat::owner_less<Ptr<T> > > // sorted order
93 >
94 > type;
95 };
96
98 OMEModelObject ()
99 {}
100
101 public:
103 virtual
104 ~OMEModelObject ()
105 {}
106
114 virtual const std::string&
115 elementName() const = 0;
116
127 virtual bool
128 validElementName(const std::string& name) const = 0;
129
130 private:
132 OMEModelObject (const OMEModelObject&);
133
135 OMEModelObject&
136 operator= (const OMEModelObject&);
137
138 public:
146 virtual common::xml::dom::Element
147 asXMLElement (common::xml::dom::Document& document) const = 0;
148
163 virtual void
164 update (const common::xml::dom::Element& element,
165 OMEModel& model) = 0;
166
188 virtual bool
189 link (ome::compat::shared_ptr<Reference>& reference,
190 ome::compat::shared_ptr<OMEModelObject>& object) = 0;
191
197 virtual const std::string&
198 getXMLNamespace() const = 0;
199 };
200
201 }
202 }
203 }
204
205 #endif // OME_XML_MODEL_OMEMODELOBJECT_H
206
207 /*
208 * Local Variables:
209 * mode:C++
210 * End:
211 */
ome::xml::model::OMEModel
OME model interface (abstract top-level container)
Definition: OMEModel.h:62
ome::xml::model::OMEModelObject::~OMEModelObject
virtual ~OMEModelObject()
Destructor.
Definition: OMEModelObject.h:104
ome::xml::model::OMEModelObject::OMEModelObject
OMEModelObject()
Constructor.
Definition: OMEModelObject.h:98
ome::common::xml::dom::Document
ome::common::xml::dom::Element
ome::xml::model::OMEModelObject::indexed_container::type
boost::multi_index_container< Ptr< T >, boost::multi_index::indexed_by< boost::multi_index::random_access<>, boost::multi_index::ordered_unique< boost::multi_index::identity< Ptr< T > >, ome::compat::owner_less< Ptr< T > > > > > type
Multi-index container type.
Definition: OMEModelObject.h:94
ome::xml::model::OMEModelObject
OME model object interface.
Definition: OMEModelObject.h:77
ome::xml::model::OMEModelObject::update
virtual void update(const common::xml::dom::Element &element, OMEModel &model)=0
Update the object hierarchy recursively from an XML DOM tree.
ome::xml::model::OMEModelObject::indexed_container
Multi-index container for efficient ordered insertion and deletion of model object references...
Definition: OMEModelObject.h:85
ome
Open Microscopy Environment C++ implementation.
ome::xml::model::OMEModelObject::getXMLNamespace
virtual const std::string & getXMLNamespace() const =0
Get the XML namespace for this model object.
memory.h
ome::xml::model::OMEModelObject::validElementName
virtual bool validElementName(const std::string &name) const =0
Check if a given element name is valid for processing by this model object.
ome::xml::model::OMEModelObject::operator=
OMEModelObject & operator=(const OMEModelObject &)
Assignment operator (deleted).
ome::xml::model::OMEModelObject::asXMLElement
virtual common::xml::dom::Element asXMLElement(common::xml::dom::Document &document) const =0
Transform the object hierarchy rooted at this element to XML.
ome::xml::model::OMEModelObject::elementName
virtual const std::string & elementName() const =0
Get the element name of this model object.
ome::xml::model::OMEModelObject::link
virtual bool link(ome::compat::shared_ptr< Reference > &reference, ome::compat::shared_ptr< OMEModelObject > &object)=0
Link a given OME model object to this model object.