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