Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
748aa84e
Kaydet (Commit)
748aa84e
authored
Ock 09, 2014
tarafından
Matúš Kukan
Kaydeden (comit)
Jan Holesovsky
Ock 20, 2014
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
fwk: Use constructor feature for JobExecutor.
Change-Id: I5087320137dc17f27a382d564a59cec68f1a4f95
üst
c61ecda7
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
133 additions
and
169 deletions
+133
-169
jobexecutor.hxx
framework/inc/jobs/jobexecutor.hxx
+0
-115
jobexecutor.cxx
framework/source/jobs/jobexecutor.cxx
+131
-51
registerservices.cxx
framework/source/register/registerservices.cxx
+0
-2
fwk.component
framework/util/fwk.component
+2
-1
No files found.
framework/inc/jobs/jobexecutor.hxx
deleted
100644 → 0
Dosyayı görüntüle @
c61ecda7
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_FRAMEWORK_INC_JOBS_JOBEXECUTOR_HXX
#define INCLUDED_FRAMEWORK_INC_JOBS_JOBEXECUTOR_HXX
#include <jobs/configaccess.hxx>
#include <threadhelp/threadhelpbase.hxx>
#include <macros/xinterface.hxx>
#include <macros/xtypeprovider.hxx>
#include <macros/xserviceinfo.hxx>
#include <stdtypes.h>
#include <general.h>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/task/XJobExecutor.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/container/XContainerListener.hpp>
#include <com/sun/star/lang/XEventListener.hpp>
#include <com/sun/star/document/XEventListener.hpp>
#include <com/sun/star/frame/XModuleManager2.hpp>
#include <cppuhelper/implbase4.hxx>
#include <rtl/ustring.hxx>
namespace
framework
{
//_______________________________________
/**
@short implements a job executor, which can be triggered from any code
@descr It uses the given trigger event to locate any registered job service
inside the configuration and execute it. Of course it controls the
liftime of such jobs too.
*/
class
JobExecutor
:
private
ThreadHelpBase
,
public
::
cppu
::
WeakImplHelper4
<
css
::
lang
::
XServiceInfo
,
css
::
task
::
XJobExecutor
,
css
::
container
::
XContainerListener
// => lang.XEventListener
,
css
::
document
::
XEventListener
>
{
//___________________________________
// member
private
:
/** reference to the uno service manager */
css
::
uno
::
Reference
<
css
::
uno
::
XComponentContext
>
m_xContext
;
/** reference to the module info service */
css
::
uno
::
Reference
<
css
::
frame
::
XModuleManager2
>
m_xModuleManager
;
/** cached list of all registered event names of cfg for call optimization. */
OUStringList
m_lEvents
;
/** we listen at the configuration for changes at the event list. */
ConfigAccess
m_aConfig
;
/** helper to allow us listen to the configuration without a cyclic dependency */
com
::
sun
::
star
::
uno
::
Reference
<
com
::
sun
::
star
::
container
::
XContainerListener
>
m_xConfigListener
;
//___________________________________
// native interface methods
public
:
JobExecutor
(
const
css
::
uno
::
Reference
<
css
::
uno
::
XComponentContext
>&
xContext
);
virtual
~
JobExecutor
(
);
//___________________________________
// uno interface methods
public
:
// XInterface, XTypeProvider, XServiceInfo
DECLARE_XSERVICEINFO
// task.XJobExecutor
virtual
void
SAL_CALL
trigger
(
const
OUString
&
sEvent
)
throw
(
css
::
uno
::
RuntimeException
);
// document.XEventListener
virtual
void
SAL_CALL
notifyEvent
(
const
css
::
document
::
EventObject
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
// container.XContainerListener
virtual
void
SAL_CALL
elementInserted
(
const
css
::
container
::
ContainerEvent
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
virtual
void
SAL_CALL
elementRemoved
(
const
css
::
container
::
ContainerEvent
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
virtual
void
SAL_CALL
elementReplaced
(
const
css
::
container
::
ContainerEvent
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
// lang.XEventListener
virtual
void
SAL_CALL
disposing
(
const
css
::
lang
::
EventObject
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
};
}
// namespace framework
#endif // INCLUDED_FRAMEWORK_INC_JOBS_JOBEXECUTOR_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
framework/source/jobs/jobexecutor.cxx
Dosyayı görüntüle @
748aa84e
...
...
@@ -17,16 +17,16 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <jobs/jobexecutor.hxx>
#include <jobs/job.hxx>
#include <jobs/joburl.hxx>
#include <jobs/configaccess.hxx>
#include <classes/converter.hxx>
#include <threadhelp/transactionguard.hxx>
#include <threadhelp/threadhelpbase.hxx>
#include <threadhelp/readguard.hxx>
#include <threadhelp/writeguard.hxx>
#include <general.h>
#include <s
ervic
es.h>
#include <s
tdtyp
es.h>
#include "helper/mischelper.hxx"
...
...
@@ -34,56 +34,100 @@
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/container/XContainer.hpp>
#include <com/sun/star/frame/ModuleManager.hpp>
#include <com/sun/star/task/XJobExecutor.hpp>
#include <com/sun/star/container/XContainerListener.hpp>
#include <com/sun/star/lang/XEventListener.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/document/XEventListener.hpp>
#include <com/sun/star/frame/XModuleManager2.hpp>
#include <cppuhelper/implbase5.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <unotools/configpaths.hxx>
#include <rtl/ref.hxx>
#include <rtl/ustrbuf.hxx>
#include <vcl/svapp.hxx>
using
namespace
framework
;
namespace
framework
{
DEFINE_XSERVICEINFO_ONEINSTANCESERVICE_2
(
JobExecutor
,
::
cppu
::
OWeakObject
,
"com.sun.star.task.JobExecutor"
,
IMPLEMENTATIONNAME_JOBEXECUTOR
)
DEFINE_INIT_SERVICE
(
JobExecutor
,
{
m_xModuleManager
=
css
::
frame
::
ModuleManager
::
create
(
m_xContext
);
/*Attention
I think we don't need any mutex or lock here ... because we are called by our own static method impl_createInstance()
to create a new instance of this class by our own supported service factory.
see macro DEFINE_XSERVICEINFO_MULTISERVICE and "impl_initService()" for further information!
*/
// read the list of all currently registered events inside configuration.
// e.g. "/org.openoffice.Office.Jobs/Events/<event name>"
// We need it later to check if an incoming event request can be executed successfully
// or must be rejected. It's an optimization! Of course we must implement updating of this
// list too ... Be listener at the configuration.
m_aConfig
.
open
(
ConfigAccess
::
E_READONLY
);
if
(
m_aConfig
.
getMode
()
==
ConfigAccess
::
E_READONLY
)
{
css
::
uno
::
Reference
<
css
::
container
::
XNameAccess
>
xRegistry
(
m_aConfig
.
cfg
(),
css
::
uno
::
UNO_QUERY
);
if
(
xRegistry
.
is
())
m_lEvents
=
Converter
::
convert_seqOUString2OUStringList
(
xRegistry
->
getElementNames
());
css
::
uno
::
Reference
<
css
::
container
::
XContainer
>
xNotifier
(
m_aConfig
.
cfg
(),
css
::
uno
::
UNO_QUERY
);
if
(
xNotifier
.
is
())
{
m_xConfigListener
=
new
WeakContainerListener
(
this
);
xNotifier
->
addContainerListener
(
m_xConfigListener
);
}
// don't close cfg here!
// It will be done inside disposing ...
}
}
)
namespace
{
//________________________________
/**
@short implements a job executor, which can be triggered from any code
@descr It uses the given trigger event to locate any registered job service
inside the configuration and execute it. Of course it controls the
liftime of such jobs too.
*/
class
JobExecutor
:
private
ThreadHelpBase
,
public
::
cppu
::
WeakImplHelper5
<
css
::
lang
::
XServiceInfo
,
css
::
task
::
XJobExecutor
,
css
::
lang
::
XInitialization
,
css
::
container
::
XContainerListener
// => lang.XEventListener
,
css
::
document
::
XEventListener
>
{
private
:
/** reference to the uno service manager */
css
::
uno
::
Reference
<
css
::
uno
::
XComponentContext
>
m_xContext
;
/** reference to the module info service */
css
::
uno
::
Reference
<
css
::
frame
::
XModuleManager2
>
m_xModuleManager
;
/** cached list of all registered event names of cfg for call optimization. */
OUStringList
m_lEvents
;
/** we listen at the configuration for changes at the event list. */
ConfigAccess
m_aConfig
;
/** helper to allow us listen to the configuration without a cyclic dependency */
com
::
sun
::
star
::
uno
::
Reference
<
com
::
sun
::
star
::
container
::
XContainerListener
>
m_xConfigListener
;
public
:
JobExecutor
(
const
css
::
uno
::
Reference
<
css
::
uno
::
XComponentContext
>&
xContext
);
virtual
~
JobExecutor
();
virtual
OUString
SAL_CALL
getImplementationName
()
throw
(
css
::
uno
::
RuntimeException
)
{
return
OUString
(
"com.sun.star.comp.framework.JobExecutor"
);
}
virtual
sal_Bool
SAL_CALL
supportsService
(
OUString
const
&
ServiceName
)
throw
(
css
::
uno
::
RuntimeException
)
{
return
cppu
::
supportsService
(
this
,
ServiceName
);
}
virtual
css
::
uno
::
Sequence
<
OUString
>
SAL_CALL
getSupportedServiceNames
()
throw
(
css
::
uno
::
RuntimeException
)
{
css
::
uno
::
Sequence
<
OUString
>
aSeq
(
1
);
aSeq
[
0
]
=
OUString
(
"com.sun.star.task.JobExecutor"
);
return
aSeq
;
}
// task.XJobExecutor
virtual
void
SAL_CALL
trigger
(
const
OUString
&
sEvent
)
throw
(
css
::
uno
::
RuntimeException
);
// XInitialization
virtual
void
SAL_CALL
initialize
(
const
css
::
uno
::
Sequence
<
css
::
uno
::
Any
>&
aArguments
)
throw
(
css
::
uno
::
Exception
,
css
::
uno
::
RuntimeException
);
// document.XEventListener
virtual
void
SAL_CALL
notifyEvent
(
const
css
::
document
::
EventObject
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
// container.XContainerListener
virtual
void
SAL_CALL
elementInserted
(
const
css
::
container
::
ContainerEvent
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
virtual
void
SAL_CALL
elementRemoved
(
const
css
::
container
::
ContainerEvent
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
virtual
void
SAL_CALL
elementReplaced
(
const
css
::
container
::
ContainerEvent
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
// lang.XEventListener
virtual
void
SAL_CALL
disposing
(
const
css
::
lang
::
EventObject
&
aEvent
)
throw
(
css
::
uno
::
RuntimeException
);
void
onCreate
();
};
/**
@short standard ctor
...
...
@@ -95,11 +139,39 @@ DEFINE_INIT_SERVICE( JobExecutor,
JobExecutor
::
JobExecutor
(
/*IN*/
const
css
::
uno
::
Reference
<
css
::
uno
::
XComponentContext
>&
xContext
)
:
ThreadHelpBase
(
&
Application
::
GetSolarMutex
()
)
,
m_xContext
(
xContext
)
,
m_xModuleManager
(
)
,
m_xModuleManager
(
css
::
frame
::
ModuleManager
::
create
(
m_xContext
)
)
,
m_aConfig
(
xContext
,
OUString
::
createFromAscii
(
JobData
::
EVENTCFG_ROOT
)
)
{
// Don't do any reference related code here! Do it inside special
// impl_ method() ... see DEFINE_INIT_SERVICE() macro for further information.
}
void
JobExecutor
::
initialize
(
const
css
::
uno
::
Sequence
<
css
::
uno
::
Any
>&
)
throw
(
css
::
uno
::
Exception
,
css
::
uno
::
RuntimeException
)
{
// read the list of all currently registered events inside configuration.
// e.g. "/org.openoffice.Office.Jobs/Events/<event name>"
// We need it later to check if an incoming event request can be executed successfully
// or must be rejected. It's an optimization! Of course we must implement updating of this
// list too ... Be listener at the configuration.
m_aConfig
.
open
(
ConfigAccess
::
E_READONLY
);
if
(
m_aConfig
.
getMode
()
==
ConfigAccess
::
E_READONLY
)
{
css
::
uno
::
Reference
<
css
::
container
::
XNameAccess
>
xRegistry
(
m_aConfig
.
cfg
(),
css
::
uno
::
UNO_QUERY
);
if
(
xRegistry
.
is
())
m_lEvents
=
Converter
::
convert_seqOUString2OUStringList
(
xRegistry
->
getElementNames
());
css
::
uno
::
Reference
<
css
::
container
::
XContainer
>
xNotifier
(
m_aConfig
.
cfg
(),
css
::
uno
::
UNO_QUERY
);
if
(
xNotifier
.
is
())
{
m_xConfigListener
=
new
WeakContainerListener
(
this
);
xNotifier
->
addContainerListener
(
m_xConfigListener
);
}
// don't close cfg here!
// It will be done inside disposing ...
}
}
JobExecutor
::~
JobExecutor
()
...
...
@@ -329,6 +401,14 @@ void SAL_CALL JobExecutor::disposing( const css::lang::EventObject& aEvent ) thr
/* } SAFE */
}
}
// namespace framework
}
extern
"C"
SAL_DLLPUBLIC_EXPORT
css
::
uno
::
XInterface
*
SAL_CALL
com_sun_star_comp_framework_JobExecutor_get_implementation
(
css
::
uno
::
XComponentContext
*
context
,
css
::
uno
::
Sequence
<
css
::
uno
::
Any
>
const
&
)
{
return
static_cast
<
cppu
::
OWeakObject
*>
(
new
JobExecutor
(
context
));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
framework/source/register/registerservices.cxx
Dosyayı görüntüle @
748aa84e
...
...
@@ -34,7 +34,6 @@
)
=================================================================================================================*/
#include <services/desktop.hxx>
#include <jobs/jobexecutor.hxx>
#include <uifactory/uielementfactorymanager.hxx>
#include <uifactory/uicontrollerfactory.hxx>
#include <uielement/uicommanddescription.hxx>
...
...
@@ -55,7 +54,6 @@
COMPONENTGETFACTORY
(
fwk
,
IFFACTORY
(
::
framework
::
Desktop
)
else
IFFACTORY
(
::
framework
::
JobExecutor
)
else
IFFACTORY
(
::
framework
::
UIElementFactoryManager
)
else
IFFACTORY
(
::
framework
::
PopupMenuControllerFactory
)
else
IFFACTORY
(
::
framework
::
UICommandDescription
)
else
...
...
framework/util/fwk.component
Dosyayı görüntüle @
748aa84e
...
...
@@ -55,7 +55,8 @@
constructor=
"com_sun_star_comp_framework_ImageManager_get_implementation"
>
<service
name=
"com.sun.star.ui.ImageManager"
/>
</implementation>
<implementation
name=
"com.sun.star.comp.framework.JobExecutor"
>
<implementation
name=
"com.sun.star.comp.framework.JobExecutor"
constructor=
"com_sun_star_comp_framework_JobExecutor_get_implementation"
>
<service
name=
"com.sun.star.task.JobExecutor"
/>
</implementation>
<implementation
name=
"com.sun.star.comp.framework.LangSelectionStatusbarController"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment