Skip to content

Commit

Permalink
feat($Quartz): patch Quartz configuration by Java reflection
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Oct 1, 2021
1 parent aeaef0c commit 099d109
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,16 @@ public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> modify(
return ResponseBodyBean.ofSuccess(this.service.modify(id, payload));
}

@PatchMapping("/quartz-job-configurations/{id}/{property}")
@ApiOperation(value = "Patch Quartz job configuration", notes = "Patch Quartz job configuration")
public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> patch(
@PathVariable Long id,
@PathVariable String property,
@RequestBody CreateOrModifyQuartzJobConfigurationPayload payload
) {
return ResponseBodyBean.ofSuccess(this.service.patch(id, property, payload));
}

@Override
protected void onExceptionOccurred() {
log.error("Exception occurred when uploading excel. Excel class: {}", QuartzJobConfigurationExcel.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
Expand Down Expand Up @@ -69,6 +70,20 @@ void validateBeforeAddToBeanList(List<QuartzJobConfigurationExcel> beanList, Qua
* @param payload the payload
* @return the modify quartz job configuration response
*/
CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);
CreateOrModifyQuartzJobConfigurationResponse modify(
@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);

/**
* Patch create or modify quartz job configuration response.
*
* @param id the id
* @param property
* @param payload the payload
* @return the create or modify quartz job configuration response
*/
CreateOrModifyQuartzJobConfigurationResponse patch(
@NotNull Long id,
@NotBlank String property,
@NotNull CreateOrModifyQuartzJobConfigurationPayload payload);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jmsoftware.maf.springcloudstarter.quartz.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.extra.validation.ValidationUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
Expand All @@ -24,6 +25,7 @@

import javax.annotation.PostConstruct;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
Expand All @@ -32,6 +34,7 @@

import static cn.hutool.core.text.CharSequenceUtil.format;
import static com.jmsoftware.maf.springcloudstarter.function.BooleanCheck.requireTrue;
import static java.util.Objects.requireNonNull;

/**
* Description: QuartzJobConfigurationServiceImpl
Expand Down Expand Up @@ -132,8 +135,10 @@ private void validateCronExpression(String cronExpression) throws Throwable {

@Override
@SneakyThrows
public CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload) {
public CreateOrModifyQuartzJobConfigurationResponse modify(
@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload
) {
this.validateCronExpression(payload.getCronExpression());
val quartzJobConfiguration = payload.asQuartzJobConfiguration();
quartzJobConfiguration.setId(id);
Expand All @@ -143,4 +148,28 @@ public CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id,
).orElseThrow(() -> new IllegalStateException("Failed to update quartz job configuration"));
return new CreateOrModifyQuartzJobConfigurationResponse(id);
}

@Override
@SneakyThrows
public CreateOrModifyQuartzJobConfigurationResponse patch(
@NotNull Long id,
@NotBlank String property,
@NotNull CreateOrModifyQuartzJobConfigurationPayload payload
) {
val value = ReflectUtil.getFieldValue(payload, property);
requireNonNull(value, format("Property's value({}) must not be null", property));
val validationResult = ValidationUtil.warpValidateProperty(payload, property);
requireTrue(
validationResult.isSuccess(),
valid -> log.warn("Quartz job configuration updated: {}", valid)
).orElseThrow(() -> new IllegalStateException(format("{} invalid", property)));
val quartzJobConfiguration = new QuartzJobConfiguration();
ReflectUtil.setFieldValue(quartzJobConfiguration, property, value);
quartzJobConfiguration.setId(id);
requireTrue(
this.updateById(quartzJobConfiguration),
updated -> log.warn("Quartz job configuration updated: {}", updated)
).orElseThrow(() -> new IllegalStateException(format("Failed to patch {}", property)));
return new CreateOrModifyQuartzJobConfigurationResponse(id);
}
}

0 comments on commit 099d109

Please sign in to comment.