1 /**
2  * UGENE - Integrated Bioinformatics Tools.
3  * Copyright (C) 2008-2021 UniPro <ugene@unipro.ru>
4  * http://ugene.net
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  */
21 
22 #ifndef _U2_APPCONTEXT_H_
23 #define _U2_APPCONTEXT_H_
24 
25 #include <QObject>
26 
27 #include "global.h"
28 
29 namespace U2 {
30 
31 template<class T>
32 class IdRegistry;
33 class AlignmentAlgorithmsRegistry;
34 class AnnotationSettingsRegistry;
35 class AppFileStorage;
36 class AppGlobalObject;
37 class AppSettings;
38 class AppSettingsGUI;
39 class AssemblyConsensusAlgorithmRegistry;
40 class AutoAnnotationsSupport;
41 class CDSearchFactoryRegistry;
42 class CMDLineRegistry;
43 class ConvertFactoryRegistry;
44 class CredentialsAsker;
45 class CudaGpuRegistry;
46 class DBXRefRegistry;
47 class DNAAlphabetRegistry;
48 class DNATranslationRegistry;
49 class DashboardInfoRegistry;
50 class DataBaseRegistry;
51 class DnaAssemblyAlgRegistry;
52 class DocumentFormatRegistry;
53 class ExternalToolRegistry;
54 class GObjectViewFactoryRegistry;
55 class GenomeAssemblyAlgRegistry;
56 class IOAdapterRegistry;
57 class MSAConsensusAlgorithmRegistry;
58 class MSADistanceAlgorithmRegistry;
59 class MainWindow;
60 class MolecularSurfaceFactoryRegistry;
61 class MsaColorSchemeRegistry;
62 class MsaHighlightingSchemeRegistry;
63 class OPCommonWidgetFactoryRegistry;
64 class OPWidgetFactoryRegistry;
65 class OpenCLGpuRegistry;
66 class PWMConversionAlgorithmRegistry;
67 class PasswordStorage;
68 class PasteFactory;
69 class PhyTreeGeneratorRegistry;
70 class PluginSupport;
71 class PluginViewer;
72 class Project;
73 class ProjectFilterTaskRegistry;
74 class ProjectLoader;
75 class ProjectService;
76 class ProjectView;
77 class ProtocolInfoRegistry;
78 class QDActorPrototypeRegistry;
79 class RecentlyDownloadedCache;
80 class RemoteMachineMonitor;
81 class RepeatFinderTaskFactoryRegistry;
82 class ResourceTracker;
83 class SWMulAlignResultNamesTagsRegistry;
84 class SWResultFilterRegistry;
85 class ScriptingToolRegistry;
86 class SecStructPredictAlgRegistry;
87 class ServiceRegistry;
88 class Settings;
89 class SmithWatermanTaskFactoryRegistry;
90 class SplicedAlignmentTaskRegistry;
91 class StructuralAlignmentAlgorithmRegistry;
92 class SubstMatrixRegistry;
93 class TaskScheduler;
94 class TestFramework;
95 class U2DataPathRegistry;
96 class U2DbiRegistry;
97 class UGUITestBase;
98 class UdrSchemaRegistry;
99 class VirtualFileSystemRegistry;
100 class WelcomePageAction;
101 class WorkflowScriptRegistry;
102 
103 class U2CORE_EXPORT AppContext : public QObject {
104     Q_OBJECT
105 public:
~AppContext()106     virtual ~AppContext() {
107     }
108 
getPluginSupport()109     static PluginSupport *getPluginSupport() {
110         return getInstance()->_getPluginSupport();
111     }
112 
getServiceRegistry()113     static ServiceRegistry *getServiceRegistry() {
114         return getInstance()->_getServiceRegistry();
115     }
116 
getProjectLoader()117     static ProjectLoader *getProjectLoader() {
118         return getInstance()->_getProjectLoader();
119     }
120 
getProject()121     static Project *getProject() {
122         return getInstance()->_getProject();
123     }
124 
getProjectService()125     static ProjectService *getProjectService() {
126         return getInstance()->_getProjectService();
127     }
128 
getPluginViewer()129     static PluginViewer *getPluginViewer() {
130         return getInstance()->_getPluginViewer();
131     }
132 
133     /** admin level, readonly settings*/
getGlobalSettings()134     static const Settings *getGlobalSettings() {
135         return getInstance()->_getGlobalSettings();
136     }
137 
138     /** per-user settings*/
getSettings()139     static Settings *getSettings() {
140         return getInstance()->_getSettings();
141     }
142 
143     /** structured and preloaded settings */
getAppSettings()144     static AppSettings *getAppSettings() {
145         return getInstance()->_getAppSettings();
146     }
147 
148     /** GUI for structured and preloaded settings */
getAppSettingsGUI()149     static AppSettingsGUI *getAppSettingsGUI() {
150         return getInstance()->_getAppSettingsGUI();
151     }
152 
getMainWindow()153     static MainWindow *getMainWindow() {
154         return getInstance()->_getMainWindow();
155     }
156 
getProjectView()157     static ProjectView *getProjectView() {
158         return getInstance()->_getProjectView();
159     }
160 
getDocumentFormatRegistry()161     static DocumentFormatRegistry *getDocumentFormatRegistry() {
162         return getInstance()->_getDocumentFormatRegistry();
163     }
164 
getIOAdapterRegistry()165     static IOAdapterRegistry *getIOAdapterRegistry() {
166         return getInstance()->_getIOAdapterRegistry();
167     }
168 
getDNATranslationRegistry()169     static DNATranslationRegistry *getDNATranslationRegistry() {
170         return getInstance()->_getDNATranslationRegistry();
171     }
172 
getDNAAlphabetRegistry()173     static DNAAlphabetRegistry *getDNAAlphabetRegistry() {
174         return getInstance()->_getDNAAlphabetRegistry();
175     }
176 
getObjectViewFactoryRegistry()177     static GObjectViewFactoryRegistry *getObjectViewFactoryRegistry() {
178         return getInstance()->_getObjectViewFactoryRegistry();
179     }
180 
getTaskScheduler()181     static TaskScheduler *getTaskScheduler() {
182         return getInstance()->_getTaskScheduler();
183     }
184 
getResourceTracker()185     static ResourceTracker *getResourceTracker() {
186         return getInstance()->_getResourceTracker();
187     }
188 
getAnnotationsSettingsRegistry()189     static AnnotationSettingsRegistry *getAnnotationsSettingsRegistry() {
190         return getInstance()->_getAnnotationsSettingsRegistry();
191     }
192 
getTestFramework()193     static TestFramework *getTestFramework() {
194         return getInstance()->_getTestFramework();
195     }
196 
getDBXRefRegistry()197     static DBXRefRegistry *getDBXRefRegistry() {
198         return getInstance()->_getDBXRefRegistry();
199     }
200 
getSubstMatrixRegistry()201     static SubstMatrixRegistry *getSubstMatrixRegistry() {
202         return getInstance()->_getSubstMatrixRegistry();
203     }
204 
getSmithWatermanTaskFactoryRegistry()205     static SmithWatermanTaskFactoryRegistry *getSmithWatermanTaskFactoryRegistry() {
206         return getInstance()->_getSmithWatermanTaskFactoryRegistry();
207     }
208 
getSWMulAlignResultNamesTagsRegistry()209     static SWMulAlignResultNamesTagsRegistry *getSWMulAlignResultNamesTagsRegistry() {
210         return getInstance()->_getSWMulAlignResultNamesTagsRegistry();
211     }
212 
getMolecularSurfaceFactoryRegistry()213     static MolecularSurfaceFactoryRegistry *getMolecularSurfaceFactoryRegistry() {
214         return getInstance()->_getMolecularSurfaceFactoryRegistry();
215     }
216 
getSWResultFilterRegistry()217     static SWResultFilterRegistry *getSWResultFilterRegistry() {
218         return getInstance()->_getSWResultFilterRegistry();
219     }
220 
getMsaColorSchemeRegistry()221     static MsaColorSchemeRegistry *getMsaColorSchemeRegistry() {
222         return getInstance()->_getMsaColorSchemeRegistry();
223     }
224 
getMsaHighlightingSchemeRegistry()225     static MsaHighlightingSchemeRegistry *getMsaHighlightingSchemeRegistry() {
226         return getInstance()->_getMsaHighlightingSchemeRegistry();
227     }
228 
getSecStructPredictAlgRegistry()229     static SecStructPredictAlgRegistry *getSecStructPredictAlgRegistry() {
230         return getInstance()->_getSecStructPredictAlgRegistry();
231     }
232 
getCudaGpuRegistry()233     static CudaGpuRegistry *getCudaGpuRegistry() {
234         return getInstance()->_getCudaGpuRegistry();
235     }
236 
getOpenCLGpuRegistry()237     static OpenCLGpuRegistry *getOpenCLGpuRegistry() {
238         return getInstance()->_getOpenCLGpuRegistry();
239     }
240 
getRecentlyDownloadedCache()241     static RecentlyDownloadedCache *getRecentlyDownloadedCache() {
242         return getInstance()->_getRecentlyDownloadedCache();
243     }
244 
getProtocolInfoRegistry()245     static ProtocolInfoRegistry *getProtocolInfoRegistry() {
246         return getInstance()->_getProtocolInfoRegistry();
247     }
248 
getRemoteMachineMonitor()249     static RemoteMachineMonitor *getRemoteMachineMonitor() {
250         return getInstance()->_getRemoteMachineMonitor();
251     }
252 
getPhyTreeGeneratorRegistry()253     static PhyTreeGeneratorRegistry *getPhyTreeGeneratorRegistry() {
254         return getInstance()->_getPhyTreeGeneratorRegistry();
255     }
256 
getCMDLineRegistry()257     static CMDLineRegistry *getCMDLineRegistry() {
258         return getInstance()->_getCMDLineRegistry();
259     }
260 
getMSAConsensusAlgorithmRegistry()261     static MSAConsensusAlgorithmRegistry *getMSAConsensusAlgorithmRegistry() {
262         return getInstance()->_getMSAConsensusAlgorithmRegistry();
263     }
264 
getMSADistanceAlgorithmRegistry()265     static MSADistanceAlgorithmRegistry *getMSADistanceAlgorithmRegistry() {
266         return getInstance()->_getMSADistanceAlgorithmRegistry();
267     }
268 
getAssemblyConsensusAlgorithmRegistry()269     static AssemblyConsensusAlgorithmRegistry *getAssemblyConsensusAlgorithmRegistry() {
270         return getInstance()->_getAssemblyConsensusAlgorithmRegistry();
271     }
272 
getPWMConversionAlgorithmRegistry()273     static PWMConversionAlgorithmRegistry *getPWMConversionAlgorithmRegistry() {
274         return getInstance()->_getPWMConversionAlgorithmRegistry();
275     }
276 
getVirtualFileSystemRegistry()277     static VirtualFileSystemRegistry *getVirtualFileSystemRegistry() {
278         return getInstance()->_getVirtualFileSystemRegistry();
279     }
280 
getDnaAssemblyAlgRegistry()281     static DnaAssemblyAlgRegistry *getDnaAssemblyAlgRegistry() {
282         return getInstance()->_getDnaAssemblyAlgRegistry();
283     }
284 
getGenomeAssemblyAlgRegistry()285     static GenomeAssemblyAlgRegistry *getGenomeAssemblyAlgRegistry() {
286         return getInstance()->_getGenomeAssemblyAlgRegistry();
287     }
288 
getRepeatFinderTaskFactoryRegistry()289     static RepeatFinderTaskFactoryRegistry *getRepeatFinderTaskFactoryRegistry() {
290         return getInstance()->_getRepeatFinderTaskFactoryRegistry();
291     }
292 
getAutoAnnotationsSupport()293     static AutoAnnotationsSupport *getAutoAnnotationsSupport() {
294         return getInstance()->_getAutoAnnotationsSupport();
295     }
296 
getCDSFactoryRegistry()297     static CDSearchFactoryRegistry *getCDSFactoryRegistry() {
298         return getInstance()->_getCDSFactoryRegistry();
299     }
300 
301     /** Registers application global resource */
registerGlobalObject(AppGlobalObject * obj)302     static void registerGlobalObject(AppGlobalObject *obj) {
303         return getInstance()->_registerGlobalObject(obj);
304     }
305 
306     /** Unregisters application global resource */
unregisterGlobalObject(const QString & id)307     static void unregisterGlobalObject(const QString &id) {
308         return getInstance()->_unregisterGlobalObject(id);
309     }
310 
311     /** Finds application global resource */
getGlobalObjectById(const QString & id)312     static AppGlobalObject *getGlobalObjectById(const QString &id) {
313         return getInstance()->_getGlobalObjectById(id);
314     }
315 
getDataBaseRegistry()316     static DataBaseRegistry *getDataBaseRegistry() {
317         return getInstance()->_getDataBaseRegistry();
318     }
319 
getExternalToolRegistry()320     static ExternalToolRegistry *getExternalToolRegistry() {
321         return getInstance()->_getExternalToolRegistry();
322     }
323 
getQDActorProtoRegistry()324     static QDActorPrototypeRegistry *getQDActorProtoRegistry() {
325         return getInstance()->_getQDActorFactoryRegistry();
326     }
327 
getStructuralAlignmentAlgorithmRegistry()328     static StructuralAlignmentAlgorithmRegistry *getStructuralAlignmentAlgorithmRegistry() {
329         return getInstance()->_getStructuralAlignmentAlgorithmRegistry();
330     }
331 
getSplicedAlignmentTaskRegistry()332     static SplicedAlignmentTaskRegistry *getSplicedAlignmentTaskRegistry() {
333         return getInstance()->_getSplicedAlignmentTaskRegistry();
334     }
335 
getOPCommonWidgetFactoryRegistry()336     static OPCommonWidgetFactoryRegistry *getOPCommonWidgetFactoryRegistry() {
337         return getInstance()->_getOPCommonWidgetFactoryRegistry();
338     }
339 
getOPWidgetFactoryRegistry()340     static OPWidgetFactoryRegistry *getOPWidgetFactoryRegistry() {
341         return getInstance()->_getOPWidgetFactoryRegistry();
342     }
343 
getDbiRegistry()344     static U2DbiRegistry *getDbiRegistry() {
345         return getInstance()->_getDbiRegistry();
346     }
347 
getUdrSchemaRegistry()348     static UdrSchemaRegistry *getUdrSchemaRegistry() {
349         return getInstance()->_getUdrSchemaRegistry();
350     }
351 
getDataPathRegistry()352     static U2DataPathRegistry *getDataPathRegistry() {
353         return getInstance()->_getDataPathRegistry();
354     }
355 
isGUIMode()356     static bool isGUIMode() {
357         return getInstance()->_isGUIMode();
358     }
359 
getWorkflowScriptRegistry()360     static WorkflowScriptRegistry *getWorkflowScriptRegistry() {
361         return getInstance()->_getWorkflowScriptRegistry();
362     }
363 
getActiveWindowName()364     static QString getActiveWindowName() {
365         return getInstance()->_getActiveWindowName();
366     }
setActiveWindowName(const QString & name)367     static void setActiveWindowName(const QString &name) {
368         getInstance()->_setActiveWindowName(name);
369     }
370 
getAppFileStorage()371     static AppFileStorage *getAppFileStorage() {
372         return getInstance()->_getAppFileStorage();
373     }
374 
getAlignmentAlgorithmsRegistry()375     static AlignmentAlgorithmsRegistry *getAlignmentAlgorithmsRegistry() {
376         return getInstance()->_getAlignmentAlgorithmsRegistry();
377     }
378 
getScriptingToolRegistry()379     static ScriptingToolRegistry *getScriptingToolRegistry() {
380         return getInstance()->_getScriptingToolRegistry();
381     }
382 
getConvertFactoryRegistry()383     static ConvertFactoryRegistry *getConvertFactoryRegistry() {
384         return getInstance()->_getConvertFactoryRegistry();
385     }
386 
getWelcomePageActionRegistry()387     static IdRegistry<WelcomePageAction> *getWelcomePageActionRegistry() {
388         return getInstance()->_getWelcomePageActionRegistry();
389     }
390 
getWorkingDirectoryPath()391     static QString getWorkingDirectoryPath() {
392         return getInstance()->_getWorkingDirectoryPath();
393     }
394 
getCredentialsAsker()395     static CredentialsAsker *getCredentialsAsker() {
396         return getInstance()->_getCredentialsAsker();
397     }
398 
getPasswordStorage()399     static PasswordStorage *getPasswordStorage() {
400         return getInstance()->_getPasswordStorage();
401     }
402 
getProjectFilterTaskRegistry()403     static ProjectFilterTaskRegistry *getProjectFilterTaskRegistry() {
404         return getInstance()->_getProjectFilterTaskRegistry();
405     }
406 
getPasteFactory()407     static PasteFactory *getPasteFactory() {
408         return getInstance()->_getPasteFactory();
409     }
410 
getDashboardInfoRegistry()411     static DashboardInfoRegistry *getDashboardInfoRegistry() {
412         return getInstance()->_getDashboardInfoRegistry();
413     }
414 
415 protected:
getInstance()416     static AppContext *getInstance() {
417         assert(instance);
418         return instance;
419     }
420 
421     virtual PluginSupport *_getPluginSupport() const = 0;
422     virtual ServiceRegistry *_getServiceRegistry() const = 0;
423     virtual ProjectLoader *_getProjectLoader() const = 0;
424     virtual Project *_getProject() const = 0;
425     virtual ProjectService *_getProjectService() const = 0;
426     virtual PluginViewer *_getPluginViewer() const = 0;
427     virtual Settings *_getSettings() const = 0;
428     virtual Settings *_getGlobalSettings() const = 0;
429     virtual MainWindow *_getMainWindow() const = 0;
430     virtual ProjectView *_getProjectView() const = 0;
431     virtual DocumentFormatRegistry *_getDocumentFormatRegistry() const = 0;
432     virtual IOAdapterRegistry *_getIOAdapterRegistry() const = 0;
433     virtual DNATranslationRegistry *_getDNATranslationRegistry() const = 0;
434     virtual DNAAlphabetRegistry *_getDNAAlphabetRegistry() const = 0;
435     virtual GObjectViewFactoryRegistry *_getObjectViewFactoryRegistry() const = 0;
436     virtual TaskScheduler *_getTaskScheduler() const = 0;
437     virtual ResourceTracker *_getResourceTracker() const = 0;
438     virtual AnnotationSettingsRegistry *_getAnnotationsSettingsRegistry() const = 0;
439     virtual AppSettings *_getAppSettings() const = 0;
440     virtual AppSettingsGUI *_getAppSettingsGUI() const = 0;
441     virtual TestFramework *_getTestFramework() const = 0;
442     virtual DBXRefRegistry *_getDBXRefRegistry() const = 0;
443     virtual SubstMatrixRegistry *_getSubstMatrixRegistry() const = 0;
444     virtual SmithWatermanTaskFactoryRegistry *_getSmithWatermanTaskFactoryRegistry() const = 0;
445     virtual MolecularSurfaceFactoryRegistry *_getMolecularSurfaceFactoryRegistry() const = 0;
446     virtual SWMulAlignResultNamesTagsRegistry *_getSWMulAlignResultNamesTagsRegistry() const = 0;
447     virtual SWResultFilterRegistry *_getSWResultFilterRegistry() const = 0;
448     virtual MsaColorSchemeRegistry *_getMsaColorSchemeRegistry() const = 0;
449     virtual MsaHighlightingSchemeRegistry *_getMsaHighlightingSchemeRegistry() const = 0;
450     virtual SecStructPredictAlgRegistry *_getSecStructPredictAlgRegistry() const = 0;
451     virtual CudaGpuRegistry *_getCudaGpuRegistry() const = 0;
452     virtual OpenCLGpuRegistry *_getOpenCLGpuRegistry() const = 0;
453     virtual RecentlyDownloadedCache *_getRecentlyDownloadedCache() const = 0;
454     virtual ProtocolInfoRegistry *_getProtocolInfoRegistry() const = 0;
455     virtual RemoteMachineMonitor *_getRemoteMachineMonitor() const = 0;
456     virtual PhyTreeGeneratorRegistry *_getPhyTreeGeneratorRegistry() const = 0;
457     virtual CMDLineRegistry *_getCMDLineRegistry() const = 0;
458     virtual MSAConsensusAlgorithmRegistry *_getMSAConsensusAlgorithmRegistry() const = 0;
459     virtual MSADistanceAlgorithmRegistry *_getMSADistanceAlgorithmRegistry() const = 0;
460     virtual AssemblyConsensusAlgorithmRegistry *_getAssemblyConsensusAlgorithmRegistry() const = 0;
461     virtual PWMConversionAlgorithmRegistry *_getPWMConversionAlgorithmRegistry() const = 0;
462     virtual VirtualFileSystemRegistry *_getVirtualFileSystemRegistry() const = 0;
463     virtual DnaAssemblyAlgRegistry *_getDnaAssemblyAlgRegistry() const = 0;
464     virtual GenomeAssemblyAlgRegistry *_getGenomeAssemblyAlgRegistry() const = 0;
465     virtual DataBaseRegistry *_getDataBaseRegistry() const = 0;
466     virtual ExternalToolRegistry *_getExternalToolRegistry() const = 0;
467     virtual RepeatFinderTaskFactoryRegistry *_getRepeatFinderTaskFactoryRegistry() const = 0;
468     virtual QDActorPrototypeRegistry *_getQDActorFactoryRegistry() const = 0;
469     virtual StructuralAlignmentAlgorithmRegistry *_getStructuralAlignmentAlgorithmRegistry() const = 0;
470     virtual AutoAnnotationsSupport *_getAutoAnnotationsSupport() const = 0;
471     virtual U2DbiRegistry *_getDbiRegistry() const = 0;
472     virtual UdrSchemaRegistry *_getUdrSchemaRegistry() const = 0;
473     virtual CDSearchFactoryRegistry *_getCDSFactoryRegistry() const = 0;
474     virtual SplicedAlignmentTaskRegistry *_getSplicedAlignmentTaskRegistry() const = 0;
475     virtual OPCommonWidgetFactoryRegistry *_getOPCommonWidgetFactoryRegistry() const = 0;
476     virtual OPWidgetFactoryRegistry *_getOPWidgetFactoryRegistry() const = 0;
477     virtual WorkflowScriptRegistry *_getWorkflowScriptRegistry() const = 0;
478     virtual AppFileStorage *_getAppFileStorage() const = 0;
479     virtual AlignmentAlgorithmsRegistry *_getAlignmentAlgorithmsRegistry() const = 0;
480     virtual U2DataPathRegistry *_getDataPathRegistry() const = 0;
481     virtual ScriptingToolRegistry *_getScriptingToolRegistry() const = 0;
482     virtual CredentialsAsker *_getCredentialsAsker() const = 0;
483     virtual PasswordStorage *_getPasswordStorage() const = 0;
484     virtual ConvertFactoryRegistry *_getConvertFactoryRegistry() const = 0;
485     virtual IdRegistry<WelcomePageAction> *_getWelcomePageActionRegistry() const = 0;
486     virtual ProjectFilterTaskRegistry *_getProjectFilterTaskRegistry() const = 0;
487     virtual PasteFactory *_getPasteFactory() const = 0;
488     virtual DashboardInfoRegistry *_getDashboardInfoRegistry() const = 0;
489 
490     virtual void _registerGlobalObject(AppGlobalObject *go) = 0;
491     virtual void _unregisterGlobalObject(const QString &id) = 0;
492     virtual AppGlobalObject *_getGlobalObjectById(const QString &id) const = 0;
493     virtual bool _isGUIMode() const = 0;
494     virtual QString _getActiveWindowName() const = 0;
495     virtual void _setActiveWindowName(const QString &name) = 0;
496     virtual QString _getWorkingDirectoryPath() const = 0;
497 
498     static AppContext *instance;
499 };
500 
501 }  // namespace U2
502 
503 #endif
504