#78 fixed some smells

This commit is contained in:
Fabio Formosa
2022-11-08 23:38:48 +01:00
parent a4b0a1bafb
commit 018c0f18dc
26 changed files with 52 additions and 72 deletions

View File

@@ -2,6 +2,8 @@ package it.fabioformosa.quartzmanager.api.common.config;
public class OpenAPIConfigConsts {
final static public String QUARTZ_MANAGER_SEC_OAS_SCHEMA = "quartz-manager-auth";
private OpenAPIConfigConsts(){
}
public static final String QUARTZ_MANAGER_SEC_OAS_SCHEMA = "quartz-manager-auth";
}

View File

@@ -10,7 +10,7 @@ import java.util.Date;
class DateUtilsTest {
@Test
public void givenALocaleDatetime_whenTheConversionIsCalled_shouldGetADate(){
void givenALocaleDatetime_whenTheConversionIsCalled_shouldGetADate(){
LocalDateTime originalLocalDateTime = LocalDateTime.now().truncatedTo(ChronoUnit.MILLIS);
Date date = DateUtils.fromLocalDateTimeToDate(originalLocalDateTime);
LocalDateTime convertedLocalDateTime = DateUtils.fromDateToLocalDateTime(date);

View File

@@ -38,7 +38,7 @@ public class OpenApiConfig {
@ConditionalOnProperty(name = "quartz-manager.oas.enabled")
@Bean
public GroupedOpenApi quartzManagerStoreOpenApi(@Autowired(required = false) @Qualifier("quartzManagerOpenApiCustomiser") Optional<OpenApiCustomiser> openApiCustomiser) {
String paths[] = {QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/**"};
String[] paths = {QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/**"};
GroupedOpenApi.Builder groupedOpenApiBuilder = GroupedOpenApi.builder().group("quartz-manager").pathsToMatch(paths);
openApiCustomiser.ifPresent(oaCustomizer -> groupedOpenApiBuilder.addOpenApiCustomiser(oaCustomizer));
return groupedOpenApiBuilder.build();

View File

@@ -46,7 +46,8 @@ public class SchedulerConfig {
}
@Bean(name = "quartzManagerScheduler")
public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("quartzJobFactory") JobFactory jobFactory, @Autowired(required = false) @Qualifier("ManagedQuartzProperties") Properties quartzProperties) throws IOException {
public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("quartzJobFactory") JobFactory jobFactory,
@Autowired(required = false) @Qualifier("ManagedQuartzProperties") Properties quartzProperties) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setJobFactory(jobFactory);
Properties mergedProperties = new Properties();

View File

@@ -20,7 +20,7 @@ import java.util.stream.Collectors;
@SecurityRequirement(name = OpenAPIConfigConsts.QUARTZ_MANAGER_SEC_OAS_SCHEMA)
@RestController
public class JobController {
final private JobService jobService;
private final JobService jobService;
public JobController(JobService jobService) {
this.jobService = jobService;
@@ -30,10 +30,10 @@ public class JobController {
@Operation(summary = "Get the list of job classes eligible for Quartz-Manager")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Return a list of qualified java classes",
content = { @Content(mediaType = "application/json",
schema = @Schema(implementation = String.class)) })
content = {@Content(mediaType = "application/json",
schema = @Schema(implementation = String.class))})
})
public List<String> listJobs(){
public List<String> listJobs() {
return jobService.getJobClasses().stream().map(Class::getName).collect(Collectors.toList());
}

View File

@@ -31,9 +31,9 @@ import static it.fabioformosa.quartzmanager.api.common.config.QuartzManagerPaths
@RequestMapping(SchedulerController.SCHEDULER_CONTROLLER_BASE_URL)
public class SchedulerController {
static protected final String SCHEDULER_CONTROLLER_BASE_URL = QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/scheduler";
protected static final String SCHEDULER_CONTROLLER_BASE_URL = QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/scheduler";
final private SchedulerService schedulerService;
private final SchedulerService schedulerService;
public SchedulerController(SchedulerService schedulerService) {
this.schedulerService = schedulerService;

View File

@@ -27,9 +27,9 @@ import javax.validation.Valid;
@RestController
public class SimpleTriggerController {
static protected final String SIMPLE_TRIGGER_CONTROLLER_BASE_URL = QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/simple-triggers";
protected static final String SIMPLE_TRIGGER_CONTROLLER_BASE_URL = QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/simple-triggers";
final private SimpleTriggerService simpleSchedulerService;
private final SimpleTriggerService simpleSchedulerService;
public SimpleTriggerController(SimpleTriggerService simpleSchedulerService) {
this.simpleSchedulerService = simpleSchedulerService;

View File

@@ -25,9 +25,9 @@ import static it.fabioformosa.quartzmanager.api.common.config.QuartzManagerPaths
@RestController
public class TriggerController {
static protected final String TRIGGER_CONTROLLER_BASE_URL = QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/triggers";
protected static final String TRIGGER_CONTROLLER_BASE_URL = QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/triggers";
final private TriggerService triggerService;
private final TriggerService triggerService;
public TriggerController(TriggerService triggerService) {
this.triggerService = triggerService;

View File

@@ -18,7 +18,7 @@ public class ExceptionHandlingController {
ExceptionResponse response = new ExceptionResponse();
response.setErrorCode("Conflict");
response.setErrorMessage(ex.getMessage());
return new ResponseEntity<ExceptionResponse>(response, HttpStatus.CONFLICT);
return new ResponseEntity<>(response, HttpStatus.CONFLICT);
}
@ExceptionHandler(TriggerNotFoundException.class)

View File

@@ -18,7 +18,7 @@ public enum MisfireInstruction {
this.num = num;
}
static public MisfireInstruction parseInt(int num) {
public static MisfireInstruction parseInt(int num) {
return Arrays.stream(MisfireInstruction.values())
.filter(misfireInstruction -> misfireInstruction.getNum() == num)
.findFirst().orElseThrow(() -> new IllegalArgumentException(num + " is not a valid misfire instruction code!"));

View File

@@ -8,7 +8,7 @@ public class ResourceConflictException extends RuntimeException {
private static final long serialVersionUID = 1791564636123821405L;
private Long resourceId;
private final Long resourceId;
public ResourceConflictException(Long resourceId, String message) {
super(message);

View File

@@ -22,10 +22,10 @@ public abstract class AbstractQuartzManagerJob implements Job {
private static final Logger log = LoggerFactory.getLogger(AbstractQuartzManagerJob.class);
@Resource
private WebhookSender webSocketProgressNotifier;
private WebhookSender<TriggerFiredBundleDTO> webSocketProgressNotifier;
@Resource
private WebhookSender webSocketLogsNotifier;
private WebhookSender<LogRecord> webSocketLogsNotifier;
/**
* @param jobExecutionContext

View File

@@ -9,7 +9,7 @@ import org.springframework.scheduling.quartz.SpringBeanJobFactory;
public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
implements ApplicationContextAware {
private transient AutowireCapableBeanFactory beanFactory;
private AutowireCapableBeanFactory beanFactory;
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle)

View File

@@ -27,14 +27,14 @@ public class JobService {
.map(String::trim)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (splitPackages.size() > 0)
if (!splitPackages.isEmpty())
this.jobClassPackages.addAll(splitPackages);
}
@PostConstruct
public void initJobClassList() {
List<Class<? extends AbstractQuartzManagerJob>> foundJobClasses = jobClassPackages.stream().flatMap(jobClassPackage -> findJobClassesInPackage(jobClassPackage).stream()).collect(Collectors.toList());
if (foundJobClasses.size() > 0) {
if (!foundJobClasses.isEmpty()) {
log.info("Found the following eligible job classes: {}", foundJobClasses);
this.jobClasses.addAll(foundJobClasses);
}

View File

@@ -13,7 +13,7 @@ class JobServiceTest {
JobService jobService = new JobService("it.fabioformosa.quartzmanager.api.jobs, it.fabioformosa.samplepackage");
jobService.initJobClassList();
Assertions.assertThat(jobService).isNotNull();
Assertions.assertThat(jobService.getJobClasses().size()).isEqualTo(2);
Assertions.assertThat(jobService.getJobClasses()).hasSize(2);
}
@ParameterizedTest
@@ -26,7 +26,7 @@ class JobServiceTest {
JobService jobService = new JobService(packageStr);
jobService.initJobClassList();
Assertions.assertThat(jobService).isNotNull();
Assertions.assertThat(jobService.getJobClasses().size()).isEqualTo(1);
Assertions.assertThat(jobService.getJobClasses()).hasSize(1);
}
@ParameterizedTest

View File

@@ -52,7 +52,7 @@ class SimpleTriggerServiceIntegrationTest {
Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(repeatCount);
Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(repeatInterval);
Assertions.assertThat(simpleTriggerDTO.getMisfireInstruction()).isEqualTo(misfireInstructionFireNow.getNum());
Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isEqualTo(0);
Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isZero();
Assertions.assertThat(simpleTriggerDTO.getFinalFireTime()).isEqualTo(DateUtils.fromLocalDateTimeToDate(expectedFinalDateTime));
Assertions.assertThat(simpleTriggerDTO.getNextFireTime()).isEqualTo(startDate);
Assertions.assertThat(simpleTriggerDTO.getJobKeyDTO().getName()).isNotNull();
@@ -72,13 +72,13 @@ class SimpleTriggerServiceIntegrationTest {
SimpleTriggerDTO simpleTriggerDTO = simpleTriggerService.scheduleSimpleTrigger(simpleTriggerCommand);
Assertions.assertThat(simpleTriggerDTO.getTriggerKeyDTO().getName()).isEqualTo(simpleTriggerTestName);
Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isEqualTo(0);
Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isZero();
Assertions.assertThat(simpleTriggerDTO.getJobKeyDTO().getName()).isNotNull();
Assertions.assertThat(simpleTriggerDTO.getStartTime()).isNotNull();
Assertions.assertThat(simpleTriggerDTO.getEndTime()).isNull();
Assertions.assertThat(simpleTriggerDTO.getFinalFireTime()).isNotNull();
Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(0);
Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(0);
Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isZero();
Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isZero();
}
}

View File

@@ -13,7 +13,7 @@ class ValidRepetitionValidatorTest {
private ValidRepetitionValidator validRepetitionValidator = new ValidRepetitionValidator();
@Test
public void givenACountAndIntervalSet_whenTheValidatorIsCalled_shouldReturnValid() {
void givenACountAndIntervalSet_whenTheValidatorIsCalled_shouldReturnValid() {
TriggerRepetitionDTO repetitionDTO = new SimpleTriggerInputDTO();
repetitionDTO.setRepeatCount(10);
repetitionDTO.setRepeatInterval(1000L);
@@ -22,7 +22,7 @@ class ValidRepetitionValidatorTest {
}
@Test
public void givenACountAndIntervalUnSet_whenTheValidatorIsCalled_shouldReturnInValid() {
void givenACountAndIntervalUnSet_whenTheValidatorIsCalled_shouldReturnInValid() {
TriggerRepetitionDTO repetitionDTO = new SimpleTriggerInputDTO();
boolean valid = validRepetitionValidator.isValid(repetitionDTO, null);
Assertions.assertThat(valid).isTrue();
@@ -30,7 +30,7 @@ class ValidRepetitionValidatorTest {
@ParameterizedTest
@CsvSource({"10, ", ",1000"})
public void givenACountAndIntervalNotSet_whenTheValidatorIsCalled_shouldReturnInValid(String repeatCountStr, String repeatIntervalStr) {
void givenACountAndIntervalNotSet_whenTheValidatorIsCalled_shouldReturnInValid(String repeatCountStr, String repeatIntervalStr) {
Integer repeatCount = null;
if (StringUtils.isNotBlank(repeatCountStr))
repeatCount = Integer.valueOf(repeatCountStr);

View File

@@ -30,7 +30,7 @@ public class SecurityOpenApiConfig {
@Bean("quartzManagerOpenApiCustomiser")
public OpenApiCustomiser configureQuartzManagerOpenAPI(JwtSecurityProperties jwtSecurityProps) {
return openAPI -> {
if (jwtSecurityProps.getCookieStrategy().isEnabled() == false)
if (!jwtSecurityProps.getCookieStrategy().isEnabled())
openAPI
.components(new Components().addSecuritySchemes(OpenAPIConfigConsts.QUARTZ_MANAGER_SEC_OAS_SCHEMA, buildBasicAuthScheme()));

View File

@@ -1,12 +1,5 @@
package it.fabioformosa.quartzmanager.api.security.helpers.impl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.WebAttributes;
@@ -14,6 +7,10 @@ import org.springframework.security.web.authentication.AuthenticationSuccessHand
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AjaxAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
public class AjaxLoginAuthSuccessHandler extends SimpleUrlAuthenticationSuccessHandler
@@ -21,10 +18,9 @@ public class AjaxAuthenticationFilter extends UsernamePasswordAuthenticationFilt
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
Authentication authentication) {
response.setStatus(HttpServletResponse.SC_OK);
clearAuthenticationAttributes(request);
return;
super.clearAuthenticationAttributes(request);
}
}

View File

@@ -15,10 +15,8 @@ public class AnonAuthentication extends AbstractAuthenticationToken {
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
return true;
}
return getClass() == obj.getClass();
}
@Override
public Object getCredentials() {
@@ -32,8 +30,7 @@ public class AnonAuthentication extends AbstractAuthenticationToken {
@Override
public int hashCode() {
int hash = 7;
return hash;
return 7;
}
@Override

View File

@@ -1,20 +1,7 @@
package it.fabioformosa.quartzmanager.api.security.helpers.impl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
public class AuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
super.onAuthenticationFailure(request, response, exception);
}
}

View File

@@ -67,8 +67,7 @@ public class FormLoginConfig implements LoginConfigurer {
login = login.failureHandler(authenticationFailureHandler);
}
HttpSecurity httpSecurity = login.and();
return httpSecurity;
return login.and();
}
}

View File

@@ -41,7 +41,7 @@ public class JwtTokenAuthenticationFilter extends OncePerRequestFilter {
private static final String LOGIN_MATCHER = "/api/login";
private static final String LOGOUT_MATCHER = "/api/logout";
private final static List<String> PATH_TO_SKIP = Arrays.asList(
private static final List<String> PATH_TO_SKIP = Arrays.asList(
ROOT_MATCHER,
HTML_MATCHER,
FAVICON_MATCHER,
@@ -92,7 +92,7 @@ public class JwtTokenAuthenticationFilter extends OncePerRequestFilter {
private boolean skipPathRequest(HttpServletRequest request, List<String> pathsToSkip ) {
if(pathsToSkip == null)
pathsToSkip = new ArrayList<>();
List<RequestMatcher> matchers = pathsToSkip.stream().map(path -> new AntPathRequestMatcher(path)).collect(Collectors.toList());
List<RequestMatcher> matchers = pathsToSkip.stream().map(AntPathRequestMatcher::new).collect(Collectors.toList());
OrRequestMatcher compositeMatchers = new OrRequestMatcher(matchers);
return compositeMatchers.matches(request);
}

View File

@@ -1,9 +1,11 @@
package it.fabioformosa.quartzmanager.api.security.helpers.impl;
import lombok.EqualsAndHashCode;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
@EqualsAndHashCode(callSuper = true)
public class JwtTokenBasedAuthentication extends AbstractAuthenticationToken {
private static final long serialVersionUID = 1L;
@@ -26,10 +28,6 @@ public class JwtTokenBasedAuthentication extends AbstractAuthenticationToken {
return principle;
}
public String getToken() {
return token;
}
@Override
public boolean isAuthenticated() {
return true;

View File

@@ -26,7 +26,7 @@ public class JwtUsernamePasswordFiterLoginConfig implements LoginConfigurer {
this.jwtAuthenticationSuccessHandler = jwtAuthenticationSuccessHandler;
}
public GenericFilterBean authenticationProcessingFilter(String loginPath, AuthenticationManager authenticationManager) throws Exception {
public GenericFilterBean authenticationProcessingFilter(String loginPath, AuthenticationManager authenticationManager) {
JwtAuthenticationFilter authenticationProcessingFilter = new JwtAuthenticationFilter(authenticationManager, jwtAuthenticationSuccessHandler);
authenticationProcessingFilter.setRequiresAuthenticationRequestMatcher(new RegexRequestMatcher(loginPath, HttpMethod.POST.name(), false));
return authenticationProcessingFilter;

View File

@@ -54,7 +54,7 @@ public class InMemoryUsersValidationControllerTest {
Assertions.assertThat(result.isBound()).isTrue();
InMemoryAccountProperties inMemoryAccountProperties = result.get();
Assertions.assertThat(propertyValidator.validate(inMemoryAccountProperties).size()).isGreaterThan(0);
Assertions.assertThat(propertyValidator.validate(inMemoryAccountProperties).size()).isPositive();
}
@@ -73,7 +73,7 @@ public class InMemoryUsersValidationControllerTest {
Assertions.assertThat(result.isBound()).isTrue();
InMemoryAccountProperties inMemoryAccountProperties = result.get();
Assertions.assertThat(propertyValidator.validate(inMemoryAccountProperties).size()).isEqualTo(0);
Assertions.assertThat(propertyValidator.validate(inMemoryAccountProperties).size()).isZero();
}
}