-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTaskOrderCalculationPolicy.java
More file actions
41 lines (33 loc) · 1.58 KB
/
TaskOrderCalculationPolicy.java
File metadata and controls
41 lines (33 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package clap.server.domain.policy.task;
import clap.server.common.annotation.architecture.Policy;
import clap.server.domain.model.task.Task;
import clap.server.exception.DomainException;
import clap.server.exception.code.TaskErrorCode;
import static clap.server.domain.policy.task.TaskPolicyConstants.DEFAULT_PROCESSOR_ORDER_GAP;
@Policy
public class TaskOrderCalculationPolicy {
public long calculateOrderForTop(Task prevTask, Task nextTask) {
Long prevTaskOrder = prevTask == null ? null : prevTask.getProcessorOrder();
if (prevTaskOrder == null) {
return nextTask.getProcessorOrder() - DEFAULT_PROCESSOR_ORDER_GAP;
} else return calculateNewProcessorOrder(prevTaskOrder, nextTask.getProcessorOrder());
}
public long calculateOrderForBottom(Task prevTask, Task nextTask) {
Long nextTaskOrder = nextTask == null ? null : nextTask.getProcessorOrder();
if (nextTaskOrder == null) {
return prevTask.getProcessorOrder() + DEFAULT_PROCESSOR_ORDER_GAP;
} else return calculateNewProcessorOrder(prevTask.getProcessorOrder(), nextTaskOrder);
}
public long calculateNewProcessorOrder(Long prevTaskOrder, Long nextTaskOrder) {
if (prevTaskOrder != null && nextTaskOrder != null) {
if (nextTaskOrder - prevTaskOrder < 2) {
throw new DomainException(TaskErrorCode.INVALID_TASK_ORDER);
}
return (prevTaskOrder + nextTaskOrder) / 2;
}
// 기본값 (예외적인 상황 방지)
else {
return DEFAULT_PROCESSOR_ORDER_GAP;
}
}
}