Last active
October 17, 2017 00:38
-
-
Save archenroot/fbfb58e2cc2375f4e87cc3981d2e2812 to your computer and use it in GitHub Desktop.
Springboot JPA with enum
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> | |
* | |
* @ 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; | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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