[VID-6] Initial rebase push
[vid.git] / epsdk-app-onap / src / main / java / org / openecomp / portalapp / conf / ExternalAppConfig.java
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal SDK\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 package org.openecomp.portalapp.conf;\r
21 \r
22 import java.util.ArrayList;\r
23 import java.util.List;\r
24 import javax.annotation.PostConstruct;\r
25 import javax.sql.DataSource;\r
26 \r
27 //import org.openecomp.portalapp.lm.FusionLicenseManagerImpl;\r
28 import org.openecomp.portalapp.login.LoginStrategyImpl;\r
29 import org.openecomp.portalapp.scheduler.RegistryAdapter;\r
30 import org.openecomp.portalsdk.core.auth.LoginStrategy;\r
31 import org.openecomp.portalsdk.core.conf.AppConfig;\r
32 import org.openecomp.portalsdk.core.conf.Configurable;\r
33 import org.openecomp.portalsdk.core.lm.FusionLicenseManager;\r
34 import org.openecomp.portalsdk.core.lm.FusionLicenseManagerUtils;\r
35 //import org.openecomp.portalsdk.core.lm.LicenseableClassImpl;\r
36 import org.openecomp.portalsdk.core.objectcache.AbstractCacheManager;\r
37 import org.openecomp.portalsdk.core.service.DataAccessService;\r
38 import org.openecomp.portalsdk.core.util.CacheManager;\r
39 import org.openecomp.portalsdk.core.util.SystemProperties;\r
40 import org.springframework.beans.factory.annotation.Autowired;\r
41 import org.springframework.beans.factory.annotation.Value;\r
42 import org.springframework.context.annotation.Bean;\r
43 import org.springframework.context.annotation.ComponentScan;\r
44 import org.springframework.context.annotation.Configuration;\r
45 import org.springframework.context.annotation.Import;\r
46 import org.springframework.context.annotation.Profile;\r
47 import org.springframework.context.annotation.PropertySource;\r
48 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;\r
49 import org.springframework.core.io.Resource;\r
50 import org.springframework.jdbc.datasource.init.DataSourceInitializer;\r
51 import org.springframework.jdbc.datasource.init.DatabasePopulator;\r
52 import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;\r
53 import org.springframework.scheduling.annotation.EnableAsync;\r
54 import org.springframework.scheduling.annotation.EnableScheduling;\r
55 import org.springframework.scheduling.quartz.SchedulerFactoryBean;\r
56 import org.springframework.web.servlet.ViewResolver;\r
57 import org.springframework.web.servlet.config.annotation.EnableWebMvc;\r
58 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;\r
59 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\r
60 import org.openecomp.portalsdk.core.service.DataAccessService;\r
61 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
62 /**\r
63  * ECOMP Portal SDK sample application. ECOMP Portal SDK core AppConfig class to\r
64  * reuse interceptors, view resolvers and other features defined there.\r
65  */\r
66 @Configuration\r
67 @EnableWebMvc\r
68 @ComponentScan(basePackages = "org.openecomp")\r
69 @PropertySource(value = { "${container.classpath:}/WEB-INF/conf/app/test.properties" }, ignoreResourceNotFound = true)\r
70 @Profile("src")\r
71 @EnableAsync\r
72 @EnableScheduling\r
73 public class ExternalAppConfig extends AppConfig implements Configurable {\r
74 \r
75         private RegistryAdapter schedulerRegistryAdapter;\r
76         /** The Constant LOG. */\r
77         private static final EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(ExternalAppConfig.class);\r
78 \r
79         /** The vid schema script. */\r
80         @Value("classpath:vid-schema.sql")\r
81         private Resource vidSchemaScript;\r
82 \r
83         /** The vid data script. */\r
84         @Value("classpath:vid-data.sql")\r
85         private Resource vidDataScript;\r
86         \r
87         /**\r
88          * The Class InnerConfiguration.\r
89          */\r
90         @Configuration\r
91         @Import(SystemProperties.class)\r
92         static class InnerConfiguration {\r
93         }\r
94 \r
95         /**\r
96          * View resolver.\r
97          *\r
98          * @return the view resolver\r
99          * @see org.openecomp.portalsdk.core.conf.AppConfig#viewResolver()\r
100          */\r
101         public ViewResolver viewResolver() {\r
102                 return super.viewResolver();\r
103         }\r
104 \r
105         /**\r
106          * @see org.openecomp.portalsdk.core.conf.AppConfig#addResourceHandlers(ResourceHandlerRegistry)\r
107          * \r
108          * @param registry\r
109          */\r
110         public void addResourceHandlers(ResourceHandlerRegistry registry) {\r
111                 super.addResourceHandlers(registry);\r
112         }\r
113 \r
114         /**\r
115          * @see org.openecomp.portalsdk.core.conf.AppConfig#dataAccessService()\r
116          */\r
117         public DataAccessService dataAccessService() {\r
118                 // Echo the JDBC URL to assist developers when starting the app.\r
119                 System.out.println("ExternalAppConfig: " + SystemProperties.DB_CONNECTIONURL + " is "\r
120                                 + SystemProperties.getProperty(SystemProperties.DB_CONNECTIONURL));\r
121                 return super.dataAccessService();\r
122         }\r
123 \r
124         /**\r
125          * Creates a new list with a single entry that is the external app\r
126          * definitions.xml path.\r
127          * \r
128          * @return List of String, size 1\r
129          */\r
130         public List<String> addTileDefinitions() {\r
131                 List<String> definitions = new ArrayList<String>();\r
132                 definitions.add("/WEB-INF/defs/definitions.xml");\r
133                 return definitions;\r
134         }\r
135 \r
136         /**\r
137          * Adds request interceptors to the specified registry by calling\r
138          * {@link AppConfig#addInterceptors(InterceptorRegistry)}, but excludes\r
139          * certain paths from the session timeout interceptor.\r
140          */\r
141         @Override\r
142         public void addInterceptors(InterceptorRegistry registry) {\r
143                 super.setExcludeUrlPathsForSessionTimeout("/login_external", "*/login_external.htm", "login", "/login.htm",\r
144                                 "/api*", "/single_signon.htm", "/single_signon");\r
145                 super.addInterceptors(registry);\r
146         }\r
147 \r
148         /**\r
149          * Creates and returns a new instance of a {@link CacheManager} class.\r
150          * \r
151          * @return New instance of {@link CacheManager}\r
152          */\r
153         @Bean\r
154         public AbstractCacheManager cacheManager() {\r
155                 return new CacheManager();\r
156         }\r
157 \r
158         \r
159 \r
160 \r
161        /**\r
162          * Creates and returns a new instance of a {@link FusionLicenseManager}.\r
163          * \r
164          * @return New instance of {@link FusionLicenseManager}.\r
165          */\r
166 //      @Bean\r
167 //      public FusionLicenseManager fusionLicenseManager() {\r
168 //              return new FusionLicenseManagerImpl();\r
169 //      }\r
170 \r
171         /**\r
172          * Creates and returns a new instance of a\r
173          * {@link FusionLicenseManagerUtils}.\r
174          * \r
175          * @return New instance of {@link FusionLicenseManagerUtils}.\r
176          */\r
177 //      @Bean\r
178 //      public FusionLicenseManagerUtils fusionLicenseManagerUtils() {\r
179 //              return new FusionLicenseManagerUtils();\r
180 //      }\r
181 \r
182         /**\r
183          * Creates and returns a new instance of a {@link SchedulerFactoryBean} and\r
184          * populates it with triggers.\r
185          * \r
186          * @return New instance of {@link SchedulerFactoryBean}\r
187          * @throws Exception\r
188          */\r
189         // @Bean // ANNOTATION COMMENTED OUT\r
190         // APPLICATIONS REQUIRING QUARTZ SHOULD RESTORE ANNOTATION\r
191         public SchedulerFactoryBean schedulerFactoryBean() throws Exception {\r
192                 SchedulerFactoryBean scheduler = new SchedulerFactoryBean();\r
193                 scheduler.setTriggers(schedulerRegistryAdapter.getTriggers());\r
194                 scheduler.setConfigLocation(appApplicationContext.getResource("WEB-INF/conf/quartz.properties"));\r
195                 scheduler.setDataSource(dataSource());\r
196                 return scheduler;\r
197         }\r
198 \r
199         /**\r
200          * Data source initializer.\r
201          *\r
202          * @param dataSource the data source\r
203          * @return the data source initializer\r
204          */\r
205         @Bean\r
206         public DataSourceInitializer dataSourceInitializer(DataSource dataSource) {\r
207                 \r
208                 LOG.info("Initializing VID data source");\r
209                 \r
210                 final DataSourceInitializer initializer = new DataSourceInitializer();\r
211                 initializer.setDataSource(dataSource);\r
212                 initializer.setDatabasePopulator(databasePopulator());\r
213                 return initializer;\r
214         }\r
215         \r
216         /**\r
217          * Database populator.\r
218          *\r
219          * @return the database populator\r
220          */\r
221         public DatabasePopulator databasePopulator() {\r
222                 LOG.info("Populating VID data source");\r
223                 \r
224                 final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();\r
225                 populator.addScript(vidSchemaScript);\r
226                 populator.addScript(vidDataScript);\r
227                 return populator;\r
228         }\r
229         \r
230         /**\r
231          * Sets the scheduler registry adapter.\r
232          * \r
233          * @param schedulerRegistryAdapter\r
234          */\r
235         @Autowired\r
236         public void setSchedulerRegistryAdapter(final RegistryAdapter schedulerRegistryAdapter) {\r
237                 this.schedulerRegistryAdapter = schedulerRegistryAdapter;\r
238         }\r
239 \r
240         /**\r
241          * Creates the LoginStrategy\r
242          * @return instance of LoginStrategy\r
243          */\r
244         @Bean\r
245         public LoginStrategy loginStrategy() {\r
246 \r
247                 return new LoginStrategyImpl();\r
248         }\r
249 }\r