f94540210640d063c0843626e18d66ca13e8b835
[sdc.git] / common-app-api / src / main / java / org / openecomp / sdc / be / config / Configuration.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.config;
22
23 import static java.lang.String.format;
24 import static java.util.Collections.emptyMap;
25
26 import java.util.Collections;
27 import java.util.Date;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31 import lombok.Getter;
32 import lombok.NoArgsConstructor;
33 import lombok.Setter;
34 import lombok.ToString;
35 import org.apache.commons.collections.CollectionUtils;
36 import org.apache.commons.collections.map.CaseInsensitiveMap;
37 import org.openecomp.sdc.common.api.BasicConfiguration;
38
39 @Getter
40 @Setter
41 @NoArgsConstructor
42 public class Configuration extends BasicConfiguration {
43
44     private List<String> identificationHeaderFields;
45     /**
46      * Requests from these Urls will not be logged by org.openecomp.sdc.be.filters.BeServletFilter.<br>
47      **/
48     private List<String> unLoggedUrls;
49     /**
50      * backend host
51      */
52     private String beFqdn;
53     /**
54      * backend http port
55      */
56     private Integer beHttpPort;
57     /**
58      * backend http secured port
59      */
60     private Integer beSslPort;
61     /**
62      * be http context
63      */
64     private String beContext;
65     /**
66      * backend protocol. http | https
67      */
68     private String beProtocol = "http";
69     private Date released;
70     private String version = "1111";
71     private String toscaConformanceLevel = "3.0";
72     private String minToscaConformanceLevel = "3.0";
73     private List<String> protocols;
74     private Map<String, String> users;
75     private Map<String, Object> neo4j;
76     private String janusGraphCfgFile;
77     private String janusGraphMigrationKeySpaceCfgFile;
78     private Boolean janusGraphInMemoryGraph;
79     private int startMigrationFrom;
80     private Long janusGraphLockTimeout;
81     private Long janusGraphReconnectIntervalInSeconds;
82     private List<String> healthStatusExclude;
83     private Long janusGraphHealthCheckReadTimeout;
84     private Long uebHealthCheckReconnectIntervalInSeconds;
85     private Long uebHealthCheckReadTimeout;
86     private List<Map<String, Map<String, String>>> defaultImports;
87     private List<String> globalCsarImports;
88     private List<String> resourceTypes;
89     private List<String> excludeResourceCategory;
90     private List<String> excludeResourceType;
91     private Map<String, Set<String>> excludedPolicyTypesMapping;
92     private Map<String, Set<String>> excludedGroupTypesMapping;
93     private Map<String, Object> deploymentResourceArtifacts;
94     private Map<String, Object> deploymentResourceInstanceArtifacts;
95     private Map<String, Object> toscaArtifacts;
96     private Map<String, Object> informationalResourceArtifacts;
97     private Map<String, Object> informationalServiceArtifacts;
98     private Map<String, Object> serviceApiArtifacts;
99     private List<String> excludeServiceCategory;
100     private List<String> licenseTypes;
101     private List<String> definedResourceNamespace;
102     private List<String> directives;
103     private List<CustomToscaFunction> defaultCustomToscaFunctions;
104     private Integer additionalInformationMaxNumberOfKeys;
105     private HeatDeploymentArtifactTimeout heatArtifactDeploymentTimeout;
106     private BeMonitoringConfig systemMonitoring;
107     private CleanComponentsConfiguration cleanComponentsConfiguration;
108     private String artifactsIndex;
109     private String heatEnvArtifactHeader;
110     private String heatEnvArtifactFooter;
111     private String toscaFilesDir;
112     private String heatTranslatorPath;
113     private OnboardingConfig onboarding;
114     private BasicAuthConfig basicAuth;
115     private CassandrConfig cassandraConfig;
116     private SwitchoverDetectorConfig switchoverDetector;
117     private ApplicationL1CacheConfig applicationL1Cache;
118     private ApplicationL2CacheConfig applicationL2Cache;
119     private ToscaValidatorsConfig toscaValidators;
120     private boolean disableAudit;
121     private Map<String, VfModuleProperty> vfModuleProperties;
122     private Map<String, String> genericAssetNodeTypes;
123     private Map<String, CategoryBaseTypeConfig> serviceBaseNodeTypes;
124     private Map<String, Map<String, String>> resourceNodeTypes;
125     private String appVersion;
126     private String artifactGeneratorConfig;
127     private String autoHealingOwner;
128     private boolean enableAutoHealing;
129     private Map<String, List<String>> resourcesForUpgrade;
130     private DmaapConsumerConfiguration dmaapConsumerConfiguration;
131     private DmaapProducerConfiguration dmaapProducerConfiguration;
132     private boolean skipUpgradeFailedVfs;
133     private boolean skipUpgradeVSPs;
134     private DmeConfiguration dmeConfiguration;
135     private boolean supportAllottedResourcesAndProxy;
136     private Integer deleteLockTimeoutInSeconds;
137     private Integer maxDeleteComponents;
138     private String workloadContext;
139     private EnvironmentContext environmentContext;
140     private List<GabConfig> gabConfig;
141     private EcompPortalConfig ecompPortal;
142     private List<ArtifactConfiguration> artifacts;
143     private Map<String, Map<String, List<String>>> componentAllowedInstanceTypes;
144     private ExternalCsarStore externalCsarStore;
145     private CsarFormat csarFormat;
146     private String componentInstanceCounterDelimiter;
147     private String dataValidatorFilterExcludedUrls; // Comma separated list of excluded URLs by the DataValidatorFilter
148     private String permittedAncestors; // Space separated list of permitted ancestors
149
150     @SuppressWarnings("unchecked")
151     private <K, V> Map<K, V> safeGetCapsInsensitiveMap(Map<K, V> map) {
152         return map == null ? emptyMap() : new CaseInsensitiveMap(map);
153     }
154
155     public Long getJanusGraphHealthCheckReadTimeout(long defaultVal) {
156         return janusGraphHealthCheckReadTimeout == null ? defaultVal : janusGraphHealthCheckReadTimeout;
157     }
158
159     public Long getJanusGraphReconnectIntervalInSeconds(long defaultVal) {
160         return janusGraphReconnectIntervalInSeconds == null ? defaultVal : janusGraphReconnectIntervalInSeconds;
161     }
162
163     public Map<String, Set<String>> getExcludedPolicyTypesMapping() {
164         return safeGetCapsInsensitiveMap(excludedPolicyTypesMapping);
165     }
166
167     public Map<String, Set<String>> getExcludedGroupTypesMapping() {
168         return safeGetCapsInsensitiveMap(excludedGroupTypesMapping);
169     }
170
171     public List<Map<String, Map<String, String>>> getDefaultImports() {
172         return Collections.unmodifiableList(defaultImports);
173     }
174
175     @Override
176     public String toString() {
177         return new StringBuilder().append(format("backend host: %s%n", beFqdn)).append(format("backend http port: %s%n", beHttpPort))
178             .append(format("backend ssl port: %s%n", beSslPort)).append(format("backend context: %s%n", beContext))
179             .append(format("backend protocol: %s%n", beProtocol)).append(format("Version: %s%n", version)).append(format("Released: %s%n", released))
180             .append(format("Supported protocols: %s%n", protocols)).append(format("Users: %s%n", users)).append(format("Neo4j: %s%n", neo4j))
181             .append(format("JanusGraph Cfg File: %s%n", janusGraphCfgFile)).append(format("JanusGraph In memory: %s%n", janusGraphInMemoryGraph))
182             .append(format("JanusGraph lock timeout: %s%n", janusGraphLockTimeout))
183             .append(format("JanusGraph reconnect interval seconds: %s%n", janusGraphReconnectIntervalInSeconds))
184             .append(format("excludeResourceCategory: %s%n", excludeResourceCategory))
185             .append(format("informationalResourceArtifacts: %s%n", informationalResourceArtifacts))
186             .append(format("deploymentResourceArtifacts: %s%n", deploymentResourceArtifacts))
187             .append(format("informationalServiceArtifacts: %s%n", informationalServiceArtifacts))
188             .append(format("Supported artifacts types: %s%n", artifacts)).append(format("Supported license types: %s%n", licenseTypes))
189             .append(format("Additional information Maximum number of preoperties: %s%n", additionalInformationMaxNumberOfKeys))
190             .append(format("Heat Artifact Timeout in Minutes: %s%n", heatArtifactDeploymentTimeout))
191             .append(format("URLs For HTTP Requests that will not be automatically logged : %s%n", unLoggedUrls))
192             .append(format("Service Api Artifacts: %s%n", serviceApiArtifacts))
193             .append(format("heat env artifact header: %s%n", heatEnvArtifactHeader))
194             .append(format("heat env artifact footer: %s%n", heatEnvArtifactFooter)).append(format("onboarding: %s%n", onboarding)).toString();
195     }
196
197     public List<String> getGlobalCsarImports() {
198         if (CollectionUtils.isEmpty(globalCsarImports)) {
199             return Collections.emptyList();
200         }
201         return globalCsarImports;
202     }
203
204     @Getter
205     @Setter
206     @NoArgsConstructor
207     public static class CassandrConfig {
208
209         private static final Integer CASSANDRA_DEFAULT_PORT = 9042;
210         private List<String> cassandraHosts;
211         private Integer cassandraPort;
212         private String localDataCenter;
213         private Long reconnectTimeout;
214         private Integer socketReadTimeout;
215         private Integer socketConnectTimeout;
216         private List<KeyspaceConfig> keySpaces;
217         private boolean authenticate;
218         private String username;
219         private String password;
220         private boolean ssl;
221         private String truststorePath;
222         private String truststorePassword;
223         private int maxWaitSeconds = 120;
224
225         public Integer getCassandraPort() {
226             return cassandraPort != null ? cassandraPort : Configuration.CassandrConfig.CASSANDRA_DEFAULT_PORT;
227         }
228
229         @Getter
230         @Setter
231         @NoArgsConstructor
232         public static class KeyspaceConfig {
233
234             private String name;
235             private String replicationStrategy;
236             private List<String> replicationInfo;
237         }
238     }
239
240     @Getter
241     @Setter
242     @NoArgsConstructor
243     public static class SwitchoverDetectorConfig {
244
245         private String gBeFqdn;
246         private String gFeFqdn;
247         private String beVip;
248         private String feVip;
249         private int beResolveAttempts;
250         private int feResolveAttempts;
251         private Boolean enabled;
252         private long interval;
253         private String changePriorityUser;
254         private String changePriorityPassword;
255         private String publishNetworkUrl;
256         private String publishNetworkBody;
257         private Map<String, GroupInfo> groups;
258
259         public String getgBeFqdn() {
260             return gBeFqdn;
261         }
262
263         public void setgBeFqdn(String gBeFqdn) {
264             this.gBeFqdn = gBeFqdn;
265         }
266
267         public String getgFeFqdn() {
268             return gFeFqdn;
269         }
270
271         public void setgFeFqdn(String gFeFqdn) {
272             this.gFeFqdn = gFeFqdn;
273         }
274
275         @Getter
276         @Setter
277         @NoArgsConstructor
278         public static class GroupInfo {
279
280             String changePriorityUrl;
281             String changePriorityBody;
282         }
283     }
284
285     @Getter
286     @Setter
287     @NoArgsConstructor
288     @ToString
289     public static class HeatDeploymentArtifactTimeout {
290
291         private Integer defaultMinutes;
292         private Integer minMinutes;
293         private Integer maxMinutes;
294     }
295
296     @Getter
297     @Setter
298     @NoArgsConstructor
299     public static class BeMonitoringConfig {
300
301         private Boolean enabled;
302         private Boolean isProxy;
303         private Integer probeIntervalInSeconds;
304
305         public Integer getProbeIntervalInSeconds(int defaultVal) {
306             return probeIntervalInSeconds == null ? defaultVal : probeIntervalInSeconds;
307         }
308     }
309
310     @Getter
311     @Setter
312     @NoArgsConstructor
313     public static class ArtifactTypeConfig {
314
315         private List<String> acceptedTypes;
316         private List<String> validForResourceTypes;
317     }
318
319     @Getter
320     @Setter
321     @NoArgsConstructor
322     @ToString
323     public static class OnboardingConfig {
324
325         private String protocol = "http";
326         private String host;
327         private Integer port;
328         private String getLatestVspPackageUri;
329         private String getVspPackageUri;
330         private String getVspUri;
331         private String getLatestVspUri;
332         @ToString.Exclude
333         private String healthCheckUri;
334     }
335
336     @Getter
337     @Setter
338     @NoArgsConstructor
339     public static class BasicAuthConfig {
340
341         private boolean enabled;
342         private String userName;
343         private String userPass;
344         private String excludedUrls;
345     }
346
347     @Getter
348     @Setter
349     @NoArgsConstructor
350     @ToString(onlyExplicitlyIncluded = true)
351     public static class EcompPortalConfig {
352
353         private String protocol = "https";
354         private String host;
355         private Integer port;
356         private String healthCheckUri;
357         @ToString.Include
358         private String defaultFunctionalMenu;
359         private Integer pollingInterval;
360         private Integer timeoutMs;
361     }
362
363     @Getter
364     @Setter
365     @NoArgsConstructor
366     @ToString
367     public static class ApplicationL1CacheConfig {
368
369         private ApplicationL1CacheInfo datatypes;
370     }
371
372     @Getter
373     @Setter
374     @NoArgsConstructor
375     @ToString
376     public static class ApplicationL2CacheConfig {
377
378         private boolean enabled;
379         private ApplicationL1CacheCatalogInfo catalogL1Cache;
380         @ToString.Exclude
381         private QueueInfo queue;
382     }
383
384     @Getter
385     @Setter
386     @NoArgsConstructor
387     @ToString
388     public static class ToscaValidatorsConfig {
389
390         private Integer stringMaxLength;
391     }
392
393     @Getter
394     @Setter
395     @NoArgsConstructor
396     @ToString
397     public static class ApplicationL1CacheInfo {
398
399         private Boolean enabled;
400         private Integer firstRunDelay;
401         private Integer pollIntervalInSec;
402     }
403
404     @Getter
405     @Setter
406     @NoArgsConstructor
407     @ToString
408     public static class ApplicationL1CacheCatalogInfo {
409
410         private Boolean enabled;
411         private Integer resourcesSizeInCache;
412         private Integer servicesSizeInCache;
413         private Integer productsSizeInCache;
414     }
415
416     @Getter
417     @Setter
418     @NoArgsConstructor
419     @ToString
420     public static class QueueInfo {
421
422         private Integer waitOnShutDownInMinutes;
423         private Integer syncIntervalInSecondes;
424         private Integer numberOfCacheWorkers;
425     }
426
427     @Getter
428     @Setter
429     @NoArgsConstructor
430     public static class EnvironmentContext {
431
432         private String defaultValue;
433         private List<String> validValues;
434     }
435
436     @Getter
437     @Setter
438     @NoArgsConstructor
439     public static class VfModuleProperty {
440
441         private String forBaseModule;
442         private String forNonBaseModule;
443     }
444
445     @Getter
446     @Setter
447     @NoArgsConstructor
448     public static class PathsAndNamesDefinition {
449
450         private String friendlyName;
451         private String path;
452         private Boolean searchable;
453     }
454
455     @Getter
456     @Setter
457     @NoArgsConstructor
458     public static class GabConfig {
459
460         private String artifactType;
461         private List<PathsAndNamesDefinition> pathsAndNamesDefinitions;
462     }
463
464     @Getter
465     @Setter
466     @NoArgsConstructor
467     public static class ExternalCsarStore {
468
469         private String storageType;
470         private Endpoint endpoint;
471         private Credentials credentials;
472         private String tempPath;
473         private int uploadPartSize;
474
475         @Getter
476         @Setter
477         @NoArgsConstructor
478         public static class Endpoint {
479
480             private String host;
481             private int port;
482             private boolean secure;
483         }
484
485         @Getter
486         @Setter
487         @NoArgsConstructor
488         public static class Credentials {
489
490             private String accessKey;
491             private String secretKey;
492         }
493     }
494
495     @Getter
496     @Setter
497     @NoArgsConstructor
498     public static class CsarFormat {
499
500         private String defaultFormat;
501     }
502
503     @Getter
504     @Setter
505     @NoArgsConstructor
506     public static class CustomToscaFunction {
507
508         private String name;
509         private String type;
510     }
511
512 }