Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
berryEvaluationContext.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #include "berryEvaluationContext.h"
14 
15 namespace berry {
16 
18  const Object::ConstPointer& defaultVariable)
19  : fParent(parent), fDefaultVariable(defaultVariable), fAllowPluginActivation(-1)
20 {
21  poco_assert(defaultVariable != 0);
22 }
23 
25  const Object::ConstPointer& defaultVariable,
26  const std::vector<IVariableResolver*>& resolvers)
27  : fParent(parent), fDefaultVariable(defaultVariable),
28  fVariableResolvers(resolvers), fAllowPluginActivation(-1)
29 {
30  poco_assert(defaultVariable != 0);
31  poco_assert(resolvers.size() != 0);
32 }
33 
35 {
36  return fParent;
37 }
38 
40 {
41  if (fParent == nullptr)
42  return const_cast<EvaluationContext*>(this);
43  return fParent->GetRoot();
44 }
45 
47 {
48  return fDefaultVariable;
49 }
50 
52 {
53  fAllowPluginActivation= value ? 1 : 0;
54 }
55 
57 {
58  if (fAllowPluginActivation < 0)
59  {
60  if (fParent)
61  {
62  return fParent->GetAllowPluginActivation();
63  }
64  return false;
65  }
66  return fAllowPluginActivation;
67 }
68 
69 void
70 EvaluationContext::AddVariable(const QString &name, const Object::ConstPointer& value)
71 {
72  poco_assert(name.size() != 0);
73  poco_assert(value.IsNotNull());
74 
75  fVariables[name] = value;
76 }
77 
80 {
81  poco_assert(name.size() != 0);
82 
83  Object::ConstPointer elem(fVariables[name]);
84  fVariables.remove(name);
85  return elem;
86 }
87 
89 EvaluationContext::GetVariable(const QString& name) const
90 {
91  poco_assert(name.size() != 0);
92 
93  Object::ConstPointer result;
94 
95  QHash<QString, Object::ConstPointer>::const_iterator iter(fVariables.find(name));
96  if (iter != fVariables.end())
97  {
98  result = iter.value();
99  }
100 
101  if (!result.IsNull())
102  return result;
103 
104  if (fParent != nullptr)
105  return fParent->GetVariable(name);
106 
107  return result;
108 }
109 
111 EvaluationContext::ResolveVariable(const QString &name, const QList<Object::Pointer>& args) const
112 {
113  if (fVariableResolvers.size() > 0) {
114  for (unsigned int i= 0; i < fVariableResolvers.size(); ++i) {
115  IVariableResolver* resolver = fVariableResolvers[i];
116  Object::Pointer variable(resolver->Resolve(name, args));
117  if (!variable.IsNull())
118  return variable;
119  }
120  }
121 
122  if (fParent != nullptr)
123  return fParent->ResolveVariable(name, args);
124 
125  return Object::Pointer();
126 }
127 
128 }
virtual Object::Pointer Resolve(const QString &name, const QList< Object::Pointer > &args)=0
IEvaluationContext * GetRoot() const override
Object::ConstPointer ResolveVariable(const QString &name, const QList< Object::Pointer > &args) const override
bool GetAllowPluginActivation() const override
virtual IEvaluationContext * GetRoot() const =0
Implements transparent reference counting.
IEvaluationContext * GetParent() const override
Object::ConstPointer GetVariable(const QString &name) const override
berry::SmartPointer< Self > Pointer
Definition: berryObject.h:82
void SetAllowPluginActivation(bool value) override
virtual bool GetAllowPluginActivation() const =0
EvaluationContext(IEvaluationContext *parent, const Object::ConstPointer &defaultVariable)
Object::ConstPointer GetDefaultVariable() const override
void AddVariable(const QString &name, const Object::ConstPointer &value) override
virtual Object::ConstPointer ResolveVariable(const QString &name, const QList< Object::Pointer > &args) const =0
Object::ConstPointer RemoveVariable(const QString &name) override
virtual Object::ConstPointer GetVariable(const QString &name) const =0