blob: 2ee2672a01b50f77457d6ed08c83519075b96bfb [file] [log] [blame]
jaegonkim6a7b5242018-09-12 23:09:42 +09001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.workflow.api;
17
18import com.google.common.base.MoreObjects;
19
nitinanandf3f94c62019-02-08 10:36:39 +053020import java.util.HashSet;
jaegonkim6a7b5242018-09-12 23:09:42 +090021import java.util.Objects;
nitinanandf3f94c62019-02-08 10:36:39 +053022import java.util.Set;
jaegonkim6a7b5242018-09-12 23:09:42 +090023
jaegonkime0f45b52018-10-09 20:23:26 +090024import static org.onosproject.workflow.api.CheckCondition.check;
25
jaegonkim6a7b5242018-09-12 23:09:42 +090026/**
27 * Class for event timeout task.
28 */
29public final class EventTimeoutTask extends HandlerTask {
30
31 /**
32 * Event type (Class name of event).
33 */
34 private final String eventType;
35
36 /**
nitinanandf3f94c62019-02-08 10:36:39 +053037 * Set of Event hint value for finding target event.
jaegonkim6a7b5242018-09-12 23:09:42 +090038 */
nitinanandf3f94c62019-02-08 10:36:39 +053039 private final Set<String> eventHintSet = new HashSet<>();
jaegonkim6a7b5242018-09-12 23:09:42 +090040
41 /**
42 * Constructor of EventTimeoutTask.
43 * @param builder builder of EventTimeoutTask
44 */
45 private EventTimeoutTask(Builder builder) {
46 super(builder);
47 this.eventType = builder.eventType;
nitinanandf3f94c62019-02-08 10:36:39 +053048 this.eventHintSet.addAll(builder.eventHintSet);
jaegonkim6a7b5242018-09-12 23:09:42 +090049 }
50
51 /**
52 * Gets event type (Class name of event).
53 * @return event type
54 */
55 public String eventType() {
56 return eventType;
57 }
58
59 /**
nitinanandf3f94c62019-02-08 10:36:39 +053060 * Gets set of event hint value for finding target event.
61 * @return event hint set
jaegonkim6a7b5242018-09-12 23:09:42 +090062 */
nitinanandf3f94c62019-02-08 10:36:39 +053063 public Set<String> eventHintSet() {
64 return eventHintSet;
jaegonkim6a7b5242018-09-12 23:09:42 +090065 }
66
67 @Override
68 public int hashCode() {
69 return Objects.hash(this.toString());
70 }
71
72 @Override
73 public boolean equals(Object obj) {
74 if (obj == this) {
75 return true;
76 }
77 if (!(obj instanceof EventTask)) {
78 return false;
79 }
80 return Objects.equals(this.eventType(), ((EventTask) obj).eventType())
nitinanandf3f94c62019-02-08 10:36:39 +053081 && Objects.equals(this.eventHintSet(), ((EventTask) obj).eventHint());
jaegonkim6a7b5242018-09-12 23:09:42 +090082 }
83
84 @Override
85 public String toString() {
86 return MoreObjects.toStringHelper(getClass())
87 .add("context", context())
jaegonkime0f45b52018-10-09 20:23:26 +090088 .add("programCounter", programCounter())
jaegonkim6a7b5242018-09-12 23:09:42 +090089 .add("eventType", eventType())
nitinanandf3f94c62019-02-08 10:36:39 +053090 .add("eventHint", eventHintSet())
jaegonkim6a7b5242018-09-12 23:09:42 +090091 .toString();
92 }
93
94 /**
95 * Gets a instance of builder.
96 * @return instance of builder
97 */
98 public static Builder builder() {
99 return new Builder();
100 }
101
102 /**
103 * Builder of EventTimeoutTask.
104 */
105 public static class Builder extends HandlerTask.Builder {
106 /**
107 * Event type (Class name of event).
108 */
109 private String eventType;
110
111 /**
nitinanandf3f94c62019-02-08 10:36:39 +0530112 * Set of Event hint value for finding target event.
jaegonkim6a7b5242018-09-12 23:09:42 +0900113 */
nitinanandf3f94c62019-02-08 10:36:39 +0530114 private Set<String> eventHintSet;
jaegonkim6a7b5242018-09-12 23:09:42 +0900115
116 /**
117 * Sets Event type (Class name of event).
118 * @param eventType event type
119 * @return builder of EventTimeoutTask
120 */
121 public Builder eventType(String eventType) {
122 this.eventType = eventType;
123 return this;
124 }
125
126 /**
127 * Sets event hint string for finding target event.
nitinanandf3f94c62019-02-08 10:36:39 +0530128 * @param eventHintSet Set of event hint string
jaegonkim6a7b5242018-09-12 23:09:42 +0900129 * @return builder of EventTimeoutTask
130 */
nitinanandf3f94c62019-02-08 10:36:39 +0530131 public Builder eventHintSet(Set<String> eventHintSet) {
132 this.eventHintSet = eventHintSet;
jaegonkim6a7b5242018-09-12 23:09:42 +0900133 return this;
134 }
135
136 @Override
137 public Builder context(WorkflowContext context) {
138 super.context(context);
139 return this;
140 }
141
142 @Override
jaegonkime0f45b52018-10-09 20:23:26 +0900143 public Builder programCounter(ProgramCounter programCounter) {
144 super.programCounter(programCounter);
jaegonkim6a7b5242018-09-12 23:09:42 +0900145 return this;
146 }
147
148 /**
149 * Builds EventTimeoutTask.
150 * @return instance of EventTimeoutTask
jaegonkime0f45b52018-10-09 20:23:26 +0900151 * @throws WorkflowException workflow exception
jaegonkim6a7b5242018-09-12 23:09:42 +0900152 */
jaegonkime0f45b52018-10-09 20:23:26 +0900153 public EventTimeoutTask build() throws WorkflowException {
154 check(eventType != null, "eventType is invalid");
nitinanandf3f94c62019-02-08 10:36:39 +0530155 check(eventHintSet != null, "eventHintSet is invalid");
jaegonkim6a7b5242018-09-12 23:09:42 +0900156 return new EventTimeoutTask(this);
157 }
158 }
159}