Skip to content

Instantly share code, notes, and snippets.

@archenroot
Last active October 17, 2017 00:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save archenroot/fbfb58e2cc2375f4e87cc3981d2e2812 to your computer and use it in GitHub Desktop.
Save archenroot/fbfb58e2cc2375f4e87cc3981d2e2812 to your computer and use it in GitHub Desktop.
Springboot JPA with enum
package org.archenroot.integration.commons.archive_service.app;
import org.archenroot.integration.commons.archive_service.app.security.SecurityConfig;
import org.archenroot.integration.commons.archive_service.backend.domain.entity.GlobalConfiguration;
import org.archenroot.integration.commons.archive_service.backend.service.UserAccountService;
import org.archenroot.integration.commons.archive_service.backend.util.LocalDateJpaConverter;
import org.archenroot.integration.commons.archive_service.ui.AppUI;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.format.FormatterRegistry;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.vaadin.spring.events.annotation.EnableEventBus;
import org.archenroot.integration.commons.archive_service.backend.repository.OrderRepository;
import org.archenroot.integration.commons.archive_service.backend.domain.entity.Order;
@SpringBootApplication(scanBasePackageClasses = { AppUI.class, Application.class, UserAccountService.class,
SecurityConfig.class })
@EnableJpaRepositories(basePackageClasses = { OrderRepository.class })
@EntityScan(basePackageClasses = { Order.class, LocalDateJpaConverter.class, GlobalConfiguration.CompressionType.class})
@EnableEventBus
public class Application extends SpringBootServletInitializer {
public static final String APP_URL = "/";
public static final String LOGIN_URL = "/login.html";
public static final String LOGOUT_URL = "/login.html?logout";
public static final String LOGIN_FAILURE_URL = "/login.html?error";
public static final String LOGIN_PROCESSING_URL = "/login";
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
package org.archenroot.integration.commons.archive_service.backend.domain.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Converter;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
/**
* Created by zangetsu on 10/5/17.
*
* This class defines parameters which could be defined on both global (app wide) and local (archive entry) levels.
*
* Main purpose and starting point is to define global parameters to be shared accross multiple archive configuration
* entries. Still, for specific reason every parameter defined on global level can be overrided.
*
* <blockquote><pre>
*
* &#064 meaning at sign in html escaping
*
* </pre></blockquote>
*
*/
@Entity
//, uniqueConstraints = @UniqueConstraint(columnNames = "move_to_archive_time_unit"
@Table(name = "archive_configuration")
@Data(staticConstructor = "of")
@NoArgsConstructor
@AllArgsConstructor
@ToString(includeFieldNames = true)
public class GlobalConfiguration extends AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
//@NotNull
@Column(name = "compression_type",
columnDefinition="text DEFAULT 'xz'")
//@Enumerated(EnumType.STRING)
//@Convert(converter = CompressionTypeConverter.class)
private CompressionType compressionType;
@Column(name = "compress_at_original_place_after_time_unit",
columnDefinition="text DEFAULT 'MONTH'")
@Enumerated(EnumType.STRING)
private TimeUnit compressAtOriginalPlaceAfterTimeUnit;
@Column(name = "compress_at_original_place_after_value",
columnDefinition="smallint DEFAULT '1'")
private int compressAtOriginalPlaceAfterValue;
/**
* (Optional)Time unit definition at which moment
* to move the live data into archive. Source data might be already
* compressed.
*
*/
@NotNull
@Column(name = "move_to_archive_time_unit",
columnDefinition="text DEFAULT 'MONTH'")
@Enumerated(EnumType.STRING)
private TimeUnit moveToArchiveTimeUnit;
@NotNull
@Column(name = "move_to_archive_value",
columnDefinition="smallint DEFAULT '3'")
private int moveToArchiveValue;
@NotNull
@Column(name = "retention_period_time_unit",
columnDefinition="text DEFAULT 'YEAR'")
@Enumerated(EnumType.STRING)
private TimeUnit retentionPeriodTimeUnit;
@NotNull
@Column(name = "retention_period_value",
columnDefinition="smallint DEFAULT '10'")
private int retentionPeriodValue;
@ToString
public enum TimeUnit{
DAY("Represents unit type in days."),
MONTH("Represents unit type in months."),
YEAR("Represents unit type in years.");
private final String description;
TimeUnit(String description){
this.description = description;
}
private String getDescription(){
return description;
}
}
public enum CompressionType{
XZ("XZ");
private final String compressionType;
CompressionType(String compressionType){
this.compressionType = compressionType;
}
private String getCompressionType(){
return compressionType;
}
@Override
public String toString() {
return compressionType;
}
}
}
package org.archenroot.integration.commons.archive_service.backend.repository;
import org.archenroot.integration.commons.archive_service.backend.domain.entity.GlobalConfiguration;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.repository.query.QueryByExampleExecutor;
import org.springframework.stereotype.Repository;
import java.util.List;
//@RepositoryRestResource(collectionResourceRel = "archive_global_configuration", path = "archive_global_configuration")
//@Repository
//@Api(tags = "archive_global_configuration")
//@ComponentScan("eu.coreso.integration.commons.archive_service.backend.domain")
@Repository
public interface GlobalConfigurationRepository extends
JpaRepository<GlobalConfiguration, Long>,
PagingAndSortingRepository<GlobalConfiguration, Long>,
QueryByExampleExecutor<GlobalConfiguration> {
/**
* Method that returns a lista of clients doing a search by the passed name parameter.
* * * @param name * @return list of clients
*/
//Page<BusinessProcess> findAll(Pageable pageable);
List<GlobalConfiguration> findByCompressionType(@Param("compression_type") GlobalConfiguration.CompressionType compressionType);
Page<GlobalConfiguration> findByCompressionTypeLikeIgnoreCase(GlobalConfiguration.CompressionType compressionType, Pageable page);
int countByCompressionTypeLikeIgnoreCase(GlobalConfiguration.CompressionType compressionType);
}
package org.archenroot.integration.commons.archive_service.backend.service;
import org.archenroot.integration.commons.archive_service.backend.domain.entity.GlobalConfiguration;
import org.archenroot.integration.commons.archive_service.backend.repository.GlobalConfigurationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
//@RestController
public class GlobalConfigurationService extends CrudService<GlobalConfiguration> {
private final GlobalConfigurationRepository globalConfigurationRepository;
@Autowired
public GlobalConfigurationService(GlobalConfigurationRepository globalConfigurationRepository) {
this.globalConfigurationRepository = globalConfigurationRepository;
}
@Override
protected GlobalConfigurationRepository getRepository() {
return globalConfigurationRepository;
}
@Override
public long countAnyMatching(Optional<String> filter) {
return 0;
}
@Override
public Page<GlobalConfiguration> findAnyMatching(Optional<String> filter, Pageable pageable) {
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment