service-locator.ts
3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import {FileHandler} from './api/file-handler';
import {ElectronFileHandler} from './file-handler/electron-file-handler';
import {CordovaFileHandler} from './file-handler/cordova-file-handler';
import {FileReplicator} from './file-replicator';
import {
Config,
CONFIG_RETRY_TIMEOUT,
CONFIG_ITEM_KEY,
CONFIG_ITEM_VALUE,
CONFIG_ITEM_TARGET_ATTRIBUTE,
CONFIG_ITEM_SOURCE_ATTRIBUTE,
CONFIG_TARGET_DIRECTORY
} from './config';
export const ENV_ELECTRON = "electron";
export const ENV_CORDOVA = "cordova";
export const ENV_UNKNOWN = "unknown";
export class ServiceLocator {
protected static fileHandlers:any = {};
protected static fileReplicator: FileReplicator;
protected static config: Config;
static addFileHandler(environment:string, fileHandler:FileHandler) {
ServiceLocator.fileHandlers[environment] = fileHandler;
}
static getConfig() : Config {
if (!ServiceLocator.config) {
ServiceLocator.config = new Config();
}
return ServiceLocator.config;
}
static getEnvironment() {
if (typeof window['require'] === 'function' && window['require']('electron')) {
return ENV_ELECTRON;
}
if (typeof window['FileTransfer'] === 'function') {
return ENV_CORDOVA;
}
return ENV_UNKNOWN;
}
static getFileHandler() : FileHandler {
let environment = ServiceLocator.getEnvironment();
if (ServiceLocator.fileHandlers[environment]) {
return ServiceLocator.fileHandlers[environment];
}
if (environment === ENV_ELECTRON) {
return new ElectronFileHandler(window['require']('electron').ipcRenderer);
}
if (environment === ENV_CORDOVA) {
return new CordovaFileHandler();
}
return null;
}
static getFileReplicator() : FileReplicator {
if (!ServiceLocator.fileReplicator) {
ServiceLocator.fileReplicator = new FileReplicator();
ServiceLocator.fileReplicator.fileHandler = ServiceLocator.getFileHandler();
}
if (ServiceLocator.getConfig().hasConfig(CONFIG_RETRY_TIMEOUT)) {
ServiceLocator.fileReplicator.retryTimeout = ServiceLocator.getConfig().getConfig(CONFIG_RETRY_TIMEOUT);
}
if (ServiceLocator.getConfig().hasConfig(CONFIG_ITEM_KEY)) {
ServiceLocator.fileReplicator.itemKey = ServiceLocator.getConfig().getConfig(CONFIG_ITEM_KEY);
}
if (ServiceLocator.getConfig().hasConfig(CONFIG_ITEM_VALUE)) {
ServiceLocator.fileReplicator.itemValue = ServiceLocator.getConfig().getConfig(CONFIG_ITEM_VALUE);
}
if (ServiceLocator.getConfig().hasConfig(CONFIG_ITEM_SOURCE_ATTRIBUTE)) {
ServiceLocator.fileReplicator.itemSourceAttribute = ServiceLocator.getConfig().getConfig(CONFIG_ITEM_SOURCE_ATTRIBUTE);
}
if (ServiceLocator.getConfig().hasConfig(CONFIG_ITEM_TARGET_ATTRIBUTE)) {
ServiceLocator.fileReplicator.itemTargetAttribute = ServiceLocator.getConfig().getConfig(CONFIG_ITEM_TARGET_ATTRIBUTE);
}
if (ServiceLocator.getConfig().hasConfig(CONFIG_TARGET_DIRECTORY)) {
ServiceLocator.fileReplicator.targetDirectory = ServiceLocator.getConfig().getConfig(CONFIG_TARGET_DIRECTORY);
}
return ServiceLocator.fileReplicator;
}
}