Mercurial > hg > orthanc-wsi
changeset 571:c4f3e08e0c44 annotations
reorganization
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Tue, 01 Sep 2026 21:33:29 +0200 |
| parents | 90d017623910 |
| children | 3efdbcfe34ab |
| files | ViewerPlugin/Annotations/AnnotationsRestApi.cpp ViewerPlugin/Annotations/ILayer.h ViewerPlugin/Annotations/ISerializable.h ViewerPlugin/Annotations/LayersCollection.cpp ViewerPlugin/Annotations/LayersCollection.h ViewerPlugin/CMakeLists.txt |
| diffstat | 6 files changed, 286 insertions(+), 157 deletions(-) [+] |
line wrap: on
line diff
--- a/ViewerPlugin/Annotations/AnnotationsRestApi.cpp Tue Sep 01 21:24:14 2026 +0200 +++ b/ViewerPlugin/Annotations/AnnotationsRestApi.cpp Tue Sep 01 21:33:29 2026 +0200 @@ -29,7 +29,9 @@ #include "../ViewerToolbox.h" #include "AnnotationsWorkspaceId.h" #include "IAuthenticatedUser.h" +#include "ILayer.h" #include "ISerializable.h" +#include "LayersCollection.h" #include <Cache/SharedObjectCache.h> #include <Compression/GzipCompressor.h> @@ -56,163 +58,6 @@ static const char* const KEY_TYPE = "type"; static const char* const KEY_VERSION = "version"; static const char* const KEY_VISIBLE = "visible"; - - - class ILayer : public ISerializable - { - public: - virtual std::string GetId() const = 0; - }; - - - class LayersCollection : public ISerializable - { - private: - typedef std::list<ILayer*> Content; - typedef std::map<std::string, Content::iterator> Index; - - Content content_; - Index index_; - - public: - ~LayersCollection() - { - for (Content::iterator it = content_.begin(); it != content_.end(); ++it) - { - assert(*it != NULL); - delete *it; - } - } - - size_t GetSize() const - { - assert(content_.size() == index_.size()); - return content_.size(); - } - - void AddLayer(ILayer* layer /* takes ownership */) - { - std::unique_ptr<ILayer> protection(layer); - - if (layer == NULL) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); - } - - const std::string id = protection->GetId(); - - if (index_.find(id) != index_.end()) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls, "Duplicate layer ID"); - } - else - { - content_.push_back(protection.release()); - - Content::iterator it = content_.end(); - --it; // Points to the element we just inserted - index_[id] = it; - } - } - - bool HasLayer(const std::string& id) const - { - return (index_.find(id) != index_.end()); - } - - ILayer& GetLayer(const std::string& id) const - { - Index::const_iterator found = index_.find(id); - - if (found == index_.end()) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); - } - else - { - assert(*(found->second) != NULL); - return **(found->second); - } - } - - void DeleteLayer(const std::string& id) - { - Index::iterator found = index_.find(id); - - if (found == index_.end()) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); - } - else - { - assert(*(found->second) != NULL); - delete *(found->second); - content_.erase(found->second); - index_.erase(found); - } - } - - virtual void Serialize(Json::Value& serialized) const ORTHANC_OVERRIDE - { - serialized = Json::arrayValue; - - for (Content::const_iterator it = content_.begin(); it != content_.end(); ++it) - { - assert(*it != NULL); - - Json::Value item; - (*it)->Serialize(item); - serialized.append(item); - } - } - - class Iterator : public boost::noncopyable - { - private: - Content::const_iterator it_; - Content::const_iterator end_; - - public: - Iterator(const LayersCollection& that) : - it_(that.content_.begin()), - end_(that.content_.end()) - { - } - - bool IsDone() const - { - return it_ == end_; - } - - const ILayer& GetLayer() const - { - if (IsDone()) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); - } - else - { - assert(*it_ != NULL); - return **it_; - } - } - - void Next() - { - if (IsDone()) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); - } - else - { - it_++; - } - } - }; - }; - - - static const char* const KEY_ACTIVE_USERS = "active-users"; static const char* const KEY_PROJECT_NAME = "project-name"; static const char* const KEY_PROJECT_DESCRIPTION = "project-description";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ViewerPlugin/Annotations/ILayer.h Tue Sep 01 21:33:29 2026 +0200 @@ -0,0 +1,36 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2024-2026 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2026 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "ISerializable.h" + + +namespace OrthancWSI +{ + class ILayer : public ISerializable + { + public: + virtual std::string GetId() const = 0; + }; +}
--- a/ViewerPlugin/Annotations/ISerializable.h Tue Sep 01 21:24:14 2026 +0200 +++ b/ViewerPlugin/Annotations/ISerializable.h Tue Sep 01 21:33:29 2026 +0200 @@ -25,6 +25,7 @@ #include <boost/noncopyable.hpp> #include <json/value.h> +#include <string> namespace OrthancWSI
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ViewerPlugin/Annotations/LayersCollection.cpp Tue Sep 01 21:33:29 2026 +0200 @@ -0,0 +1,170 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2024-2026 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2026 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#include "../../Framework/PrecompiledHeadersWSI.h" +#include "LayersCollection.h" + +#include <OrthancException.h> + +#include <cassert> + + +namespace OrthancWSI +{ + LayersCollection::~LayersCollection() + { + for (Content::iterator it = content_.begin(); it != content_.end(); ++it) + { + assert(*it != NULL); + delete *it; + } + } + + + size_t LayersCollection::GetSize() const + { + assert(content_.size() == index_.size()); + return content_.size(); + } + + + void LayersCollection::AddLayer(ILayer* layer) + { + std::unique_ptr<ILayer> protection(layer); + + if (layer == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); + } + + const std::string id = protection->GetId(); + + if (index_.find(id) != index_.end()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls, "Duplicate layer ID"); + } + else + { + content_.push_back(protection.release()); + + Content::iterator it = content_.end(); + --it; // Points to the element we just inserted + index_[id] = it; + } + } + + + bool LayersCollection::HasLayer(const std::string& id) const + { + return (index_.find(id) != index_.end()); + } + + + ILayer& LayersCollection::GetLayer(const std::string& id) const + { + Index::const_iterator found = index_.find(id); + + if (found == index_.end()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); + } + else + { + assert(*(found->second) != NULL); + return **(found->second); + } + } + + + void LayersCollection::DeleteLayer(const std::string& id) + { + Index::iterator found = index_.find(id); + + if (found == index_.end()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); + } + else + { + assert(*(found->second) != NULL); + delete *(found->second); + content_.erase(found->second); + index_.erase(found); + } + } + + + void LayersCollection::Serialize(Json::Value& serialized) const + { + serialized = Json::arrayValue; + + for (Content::const_iterator it = content_.begin(); it != content_.end(); ++it) + { + assert(*it != NULL); + + Json::Value item; + (*it)->Serialize(item); + serialized.append(item); + } + } + + + LayersCollection::Iterator::Iterator(const LayersCollection& that) : + it_(that.content_.begin()), + end_(that.content_.end()) + { + } + + + bool LayersCollection::Iterator::IsDone() const + { + return it_ == end_; + } + + + const ILayer& LayersCollection::Iterator::GetLayer() const + { + if (IsDone()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else + { + assert(*it_ != NULL); + return **it_; + } + } + + + void LayersCollection::Iterator::Next() + { + if (IsDone()) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else + { + it_++; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ViewerPlugin/Annotations/LayersCollection.h Tue Sep 01 21:33:29 2026 +0200 @@ -0,0 +1,76 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * Copyright (C) 2017-2023 Osimis S.A., Belgium + * Copyright (C) 2024-2026 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2026 Sebastien Jodogne, ICTEAM UCLouvain, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "ILayer.h" + +#include <Compatibility.h> + +#include <list> +#include <map> + + +namespace OrthancWSI +{ + class LayersCollection : public ISerializable + { + private: + typedef std::list<ILayer*> Content; + typedef std::map<std::string, Content::iterator> Index; + + Content content_; + Index index_; + + public: + ~LayersCollection(); + + size_t GetSize() const; + + void AddLayer(ILayer* layer /* takes ownership */); + + bool HasLayer(const std::string& id) const; + + ILayer& GetLayer(const std::string& id) const; + + void DeleteLayer(const std::string& id); + + virtual void Serialize(Json::Value& serialized) const ORTHANC_OVERRIDE; + + class Iterator : public boost::noncopyable + { + private: + Content::const_iterator it_; + Content::const_iterator end_; + + public: + Iterator(const LayersCollection& that); + + bool IsDone() const; + + const ILayer& GetLayer() const; + + void Next(); + }; + }; +}
--- a/ViewerPlugin/CMakeLists.txt Tue Sep 01 21:24:14 2026 +0200 +++ b/ViewerPlugin/CMakeLists.txt Tue Sep 01 21:33:29 2026 +0200 @@ -189,6 +189,7 @@ Annotations/AnnotationsWorkspaceId.cpp Annotations/IAuthenticatedUser.cpp Annotations/ISerializable.cpp + Annotations/LayersCollection.cpp Annotations/UserId.cpp DicomPyramidCache.cpp IIIF.cpp
