// Path: src/main/java/com/jipasoft/domain/AbstractAuditEntity.java
// @Data
// @MappedSuperclass
// public abstract class AbstractAuditEntity implements Serializable {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	@NotNull
// 	@Field("created_by")
// 	@Size(min = 1, max = 50)
// 	@Column(updatable = false)
// 	@CreatedBy
// 	private String createdBy;
// 
// 	@Field("created_date")
// 	@Column(nullable = false)
// 	@CreatedDate
// 	private ZonedDateTime createdDate = ZonedDateTime.now();
// 
// 	@Field("last_modified_by")
// 	@Size(max = 50)
// 	@LastModifiedBy
// 	private String lastModifiedBy;
// 
// 	@Field("last_modified_date")
// 	@LastModifiedDate
// 	private ZonedDateTime lastModifiedDate;
// }
// 
// Path: src/main/java/com/jipasoft/service/Services.java
// public interface Services {
// 
// }
// 
// Path: src/main/java/com/jipasoft/util/Profiles.java
// public class Profiles {
// 	public static final String H2 = "h2";
// 	public static final String POSTGRES = "postgres";
// 	public static final String MYSQL = "mysql";
// 	public static final String MONGO = "mongo";
// 	public static final String EMAIL = "email";
// 	public static final String HEROKU = "heroku";
// 	public static final String ASPECT = "aspect";
// }
// 
// Path: src/main/java/com/jipasoft/web/Controllers.java
// public interface Controllers {
// 
// }


import java.util.Locale;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import com.github.mongobee.Mongobee;
import com.jipasoft.domain.AbstractAuditEntity;
import com.jipasoft.service.Services;
import com.jipasoft.util.Profiles;
import com.jipasoft.web.Controllers;
import com.mongodb.Mongo;
import liquibase.integration.spring.SpringLiquibase;
import lombok.extern.slf4j.Slf4j;

/*
* Copyright 2016, Julius Krah
* by the @authors tag. See the LICENCE in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jipasoft.config;






/**
 * Application root configuration. The
 * {@link SpringBootApplication @SpringBootApplication} <br />
 * is a convenience annotation for {@link ComponentScan @ComponentScan},
 * {@link Configuration @Configuration}, and <br />
 * {@link EnableAutoConfiguration @EnableAutoConfiguration}. The
 * {@code scanBasePackageClasses} in this context is type safe.
 * <p>
 * The application can run on multiple profiles to support different types of
 * databases, relational and non-relational.<br />
 * In the current state, the application runs on:
 * <ol>
 * <li>{@link H2Config H2 Database}</li>
 * <li>{@link PostgresConfig PostgreSQL Database}</li>
 * <li>{@link MySQLConfig MySQL Database}</li>
 * <li>{@link MongoConfig MongoDB}</li>
 * </ol>
 * </p>
 * 
 * @see H2Config
 * @see PostgresConfig
 * @see MongoConfig
 * 
 * @author Julius Krah
 *
 */
@Slf4j
@SpringBootApplication(scanBasePackageClasses = { Controllers.class, Services.class })
@EnableConfigurationProperties({ LiquibaseProperties.class, MailProperties.class })
@EnableAspectJAutoProxy

// Path: src/main/java/com/jipasoft/domain/AbstractAuditEntity.java
// @Data
// @MappedSuperclass
// public abstract class AbstractAuditEntity implements Serializable {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	@NotNull
// 	@Field("created_by")
// 	@Size(min = 1, max = 50)
// 	@Column(updatable = false)
// 	@CreatedBy
// 	private String createdBy;
// 
// 	@Field("created_date")
// 	@Column(nullable = false)
// 	@CreatedDate
// 	private ZonedDateTime createdDate = ZonedDateTime.now();
// 
// 	@Field("last_modified_by")
// 	@Size(max = 50)
// 	@LastModifiedBy
// 	private String lastModifiedBy;
// 
// 	@Field("last_modified_date")
// 	@LastModifiedDate
// 	private ZonedDateTime lastModifiedDate;
// }
// 
// Path: src/main/java/com/jipasoft/service/Services.java
// public interface Services {
// 
// }
// 
// Path: src/main/java/com/jipasoft/util/Profiles.java
// public class Profiles {
// 	public static final String H2 = "h2";
// 	public static final String POSTGRES = "postgres";
// 	public static final String MYSQL = "mysql";
// 	public static final String MONGO = "mongo";
// 	public static final String EMAIL = "email";
// 	public static final String HEROKU = "heroku";
// 	public static final String ASPECT = "aspect";
// }
// 
// Path: src/main/java/com/jipasoft/web/Controllers.java
// public interface Controllers {
// 
// }


// Path: src/main/java/com/jipasoft/config/Application.java
import java.util.Locale;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import com.github.mongobee.Mongobee;
import com.jipasoft.domain.AbstractAuditEntity;
import com.jipasoft.service.Services;
import com.jipasoft.util.Profiles;
import com.jipasoft.web.Controllers;
import com.mongodb.Mongo;
import liquibase.integration.spring.SpringLiquibase;
import lombok.extern.slf4j.Slf4j;

/*
* Copyright 2016, Julius Krah
* by the @authors tag. See the LICENCE in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jipasoft.config;






/**
 * Application root configuration. The
 * {@link SpringBootApplication @SpringBootApplication} <br />
 * is a convenience annotation for {@link ComponentScan @ComponentScan},
 * {@link Configuration @Configuration}, and <br />
 * {@link EnableAutoConfiguration @EnableAutoConfiguration}. The
 * {@code scanBasePackageClasses} in this context is type safe.
 * <p>
 * The application can run on multiple profiles to support different types of
 * databases, relational and non-relational.<br />
 * In the current state, the application runs on:
 * <ol>
 * <li>{@link H2Config H2 Database}</li>
 * <li>{@link PostgresConfig PostgreSQL Database}</li>
 * <li>{@link MySQLConfig MySQL Database}</li>
 * <li>{@link MongoConfig MongoDB}</li>
 * </ol>
 * </p>
 * 
 * @see H2Config
 * @see PostgresConfig
 * @see MongoConfig
 * 
 * @author Julius Krah
 *
 */
@Slf4j
@SpringBootApplication(scanBasePackageClasses = { Controllers.class, Services.class })
@EnableConfigurationProperties({ LiquibaseProperties.class, MailProperties.class })
@EnableAspectJAutoProxy

@EntityScan(basePackageClasses = AbstractAuditEntity.class)
