blob: 6762e113bbbb32eee2f612ddd708b76c7730418a [file] [log] [blame]
/*
*******************************************************************************
* Copyright (c) 2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************
*/
package org.eclipse.openk;
import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import org.apache.log4j.Logger;
import org.eclipse.jetty.servlets.CrossOriginFilter;
import org.eclipse.openk.api.BackendSettings;
import org.eclipse.openk.common.util.ResourceLoaderBase;
import org.eclipse.openk.core.controller.BackendConfig;
import org.eclipse.openk.core.controller.InitMailAddressCacheJob;
import org.eclipse.openk.core.controller.InitRabbitMqSetup;
import org.eclipse.openk.db.dao.EntityHelper;
import org.eclipse.openk.health.DBIsPresentHealthCheck;
import org.eclipse.openk.health.MailConfigurationHealthCheck;
import org.eclipse.openk.health.MailServerPresentHealthCheck;
import org.eclipse.openk.resources.MasterDataResource;
import org.eclipse.openk.resources.PlannedGridMeasuresResource;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import static org.eclipse.openk.common.JsonGeneratorBase.getGson;
public class PlannedGridMeasuresApplication extends Application<PlannedGridMeasuresConfiguration> {
private static final Logger logger = Logger.getLogger(PlannedGridMeasuresApplication.class); // NOSONAR
// we leave this logger in place, even if it's not called ... (at the moment)
public static void main(final String[] args) throws Exception {
new PlannedGridMeasuresApplication().run(args);
}
@Override
public String getName() {
return "PlannedGridMeasures";
}
@Override
public void initialize(final Bootstrap<PlannedGridMeasuresConfiguration> bootstrap) {
//Initializations are mainly made in the method configureApp(configuration)
}
public void run(final PlannedGridMeasuresConfiguration configuration,
final Environment environment) {
configureApp( configuration );
final PlannedGridMeasuresResource resource = new PlannedGridMeasuresResource();
final MasterDataResource mdResource = new MasterDataResource();
final DBIsPresentHealthCheck dBIsPresentHealthCheck = new DBIsPresentHealthCheck();
final MailServerPresentHealthCheck mailServerPresentHealthCheck = new MailServerPresentHealthCheck();
final MailConfigurationHealthCheck mailConfigurationHealthCheck = new MailConfigurationHealthCheck();
environment.healthChecks().register("version-main", dBIsPresentHealthCheck);
environment.healthChecks().register("mailserver-running", mailServerPresentHealthCheck);
environment.healthChecks().register("mailconfiguration-ok", mailConfigurationHealthCheck);
environment.jersey().register(resource);
environment.jersey().register(mdResource);
environment.jersey().register(MultiPartFeature.class);
configureCors(environment);
}
private void configureApp( final PlannedGridMeasuresConfiguration configuration ) {
// first set db
EntityHelper.setFactoryName(configuration.getPersistencyUnit());
EntityHelper.setProperties(extractDbProperties( configuration.getDbConn() ));
BackendConfig.configure(configuration, getBackendSettings());
BackendConfig.getInstance().processAndSetWhiteListDocumenttypes(configuration.getWhiteListDocumenttypes());
BackendConfig.getInstance().setEmailConfiguration(configuration.getEmailConfiguration());
InitMailAddressCacheJob initMailAddressCacheJob = new InitMailAddressCacheJob();
initMailAddressCacheJob.init();
InitRabbitMqSetup initRabbitMqSetup = new InitRabbitMqSetup();
initRabbitMqSetup.init();
}
private BackendSettings getBackendSettings() {
ResourceLoaderBase loaderBase = new ResourceLoaderBase();
String backendSettingsString = loaderBase.loadFromPath("./backendSettings.json");
return getGson().fromJson(backendSettingsString, BackendSettings.class);
}
private Map<String, Object> extractDbProperties( PlannedGridMeasuresConfiguration.DBConnection dbconn ) {
Map<String, Object> retMap = new HashMap<>();
retMap.put("javax.persistence.jdbc.driver", dbconn.getDriver());
retMap.put("javax.persistence.jdbc.url", dbconn.getUrl());
retMap.put("javax.persistence.jdbc.user", dbconn.getUser());
retMap.put("javax.persistence.jdbc.password", dbconn.getPassword());
return retMap;
}
private void configureCors(Environment environment) {
final FilterRegistration.Dynamic cors =
environment.servlets().addFilter("CORS", CrossOriginFilter.class);
// Configure CORS parameters
cors.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
cors.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "X-Requested-With,Content-Type,Accept,Origin,Authorization");
cors.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "OPTIONS,GET,PUT,POST,DELETE,HEAD");
cors.setInitParameter(CrossOriginFilter.ALLOW_CREDENTIALS_PARAM, "true");
// Add URL mapping
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
// DO NOT pass a preflight request to down-stream auth filters
// unauthenticated preflight requests should be permitted by spec
cors.setInitParameter(CrossOriginFilter.CHAIN_PREFLIGHT_PARAM, Boolean.FALSE.toString());
}
}