LibreOffice Module forms (master) 1
submission/submission.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include <tools/urlobj.hxx>
23#include <osl/conditn.hxx>
25#include <com/sun/star/uno/Reference.hxx>
26#include <com/sun/star/uno/Any.hxx>
27#include <com/sun/star/xml/dom/XDocumentFragment.hpp>
28
29#include <com/sun/star/ucb/XCommandEnvironment.hpp>
30#include <com/sun/star/ucb/XProgressHandler.hpp>
31
32#include <com/sun/star/task/XInteractionHandler.hpp>
33
34#include <com/sun/star/frame/XFrame.hpp>
35
37
38#include "serialization.hxx"
39
40#include <memory>
41#include <mutex>
42#include <utility>
43
44class CSubmissionPut;
45class CSubmissionPost;
46class CSubmissionGet;
47
48class CCommandEnvironmentHelper final : public cppu::WeakImplHelper< css::ucb::XCommandEnvironment >
49{
50 friend class CSubmissionPut;
51 friend class CSubmissionPost;
52 friend class CSubmissionGet;
53 friend class CSubmission;
54
55 css::uno::Reference< css::task::XInteractionHandler > m_aInteractionHandler;
56 css::uno::Reference< css::ucb::XProgressHandler > m_aProgressHandler;
57
58public:
59 virtual css::uno::Reference< css::task::XInteractionHandler > SAL_CALL getInteractionHandler() override
60 {
62 }
63 virtual css::uno::Reference< css::ucb::XProgressHandler > SAL_CALL getProgressHandler() override
64 {
65 return m_aProgressHandler;
66 }
67};
68
69class CProgressHandlerHelper final : public cppu::WeakImplHelper< css::ucb::XProgressHandler >
70{
71 friend class CSubmissionPut;
72 friend class CSubmissionPost;
73 friend class CSubmissionGet;
74 osl::Condition m_cFinished;
75 std::mutex m_mLock;
76 sal_Int32 m_count;
77public:
79 : m_count(0)
80 {}
81 virtual void SAL_CALL push( const css::uno::Any& /*aStatus*/) override
82 {
83 std::unique_lock g(m_mLock);
84 m_count++;
85 }
86 virtual void SAL_CALL update(const css::uno::Any& /*aStatus*/) override
87 {
88 }
89 virtual void SAL_CALL pop() override
90 {
91 std::unique_lock g(m_mLock);
92 m_count--;
93 if (m_count == 0)
94 m_cFinished.set();
95 }
96};
97
99{
100
101protected:
103 css::uno::Reference< css::xml::dom::XDocumentFragment > m_aFragment;
104 css::uno::Reference< css::io::XInputStream > m_aResultStream;
105 css::uno::Reference< css::uno::XComponentContext > m_xContext;
106
107 ::std::unique_ptr< CSerialization > createSerialization(const css::uno::Reference< css::task::XInteractionHandler >& aHandler
108 ,css::uno::Reference<css::ucb::XCommandEnvironment>& _rOutEnv);
109
110public:
114 };
115
116 CSubmission(std::u16string_view aURL, css::uno::Reference< css::xml::dom::XDocumentFragment > aFragment)
117 : m_aURLObj(aURL)
118 , m_aFragment(std::move(aFragment))
120 {}
121
122 const INetURLObject& GetURLObject() const { return m_aURLObj; }
123
124 virtual ~CSubmission() {}
125
126 virtual SubmissionResult submit(const css::uno::Reference< css::task::XInteractionHandler >& ) = 0;
127
128 SubmissionResult replace(std::u16string_view, const css::uno::Reference< css::xml::dom::XDocument >&, const css::uno::Reference< css::frame::XFrame>&);
129
130};
131
132/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual css::uno::Reference< css::task::XInteractionHandler > SAL_CALL getInteractionHandler() override
virtual css::uno::Reference< css::ucb::XProgressHandler > SAL_CALL getProgressHandler() override
css::uno::Reference< css::ucb::XProgressHandler > m_aProgressHandler
css::uno::Reference< css::task::XInteractionHandler > m_aInteractionHandler
virtual void SAL_CALL pop() override
virtual void SAL_CALL update(const css::uno::Any &) override
virtual void SAL_CALL push(const css::uno::Any &) override
INetURLObject m_aURLObj
::std::unique_ptr< CSerialization > createSerialization(const css::uno::Reference< css::task::XInteractionHandler > &aHandler, css::uno::Reference< css::ucb::XCommandEnvironment > &_rOutEnv)
Definition: replace.cxx:108
css::uno::Reference< css::uno::XComponentContext > m_xContext
CSubmission(std::u16string_view aURL, css::uno::Reference< css::xml::dom::XDocumentFragment > aFragment)
css::uno::Reference< css::xml::dom::XDocumentFragment > m_aFragment
css::uno::Reference< css::io::XInputStream > m_aResultStream
SubmissionResult replace(std::u16string_view, const css::uno::Reference< css::xml::dom::XDocument > &, const css::uno::Reference< css::frame::XFrame > &)
Definition: replace.cxx:47
virtual SubmissionResult submit(const css::uno::Reference< css::task::XInteractionHandler > &)=0
const INetURLObject & GetURLObject() const
URL aURL
Reference< XComponentContext > getProcessComponentContext()