blob: c2af3e6093c8297f25d49d800f71b28f3f8508ec [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;
19import org.onosproject.event.Event;
20
21import java.util.Objects;
22
jaegonkime0f45b52018-10-09 20:23:26 +090023import static org.onosproject.workflow.api.CheckCondition.check;
24
jaegonkim6a7b5242018-09-12 23:09:42 +090025/**
26 * Class for event task.
27 */
28public final class EventTask extends HandlerTask {
29
30 /**
31 * Event triggering event task.
32 */
33 private final Event event;
34
35 /**
36 * Event hint value for finding target event.
37 */
38 private final String eventHint;
39
40 /**
41 * Constructor of event task.
42 * @param builder builder of event task
43 */
44 private EventTask(Builder builder) {
45 super(builder);
46 this.event = builder.event;
47 this.eventHint = builder.eventHint;
48 }
49
50 /**
51 * Gets event of event task.
52 * @return event triggering event task
53 */
54 public Event event() {
55 return event;
56 }
57
58 /**
59 * Gets event type (class name of event) of event task.
60 * @return event type
61 */
62 public String eventType() {
63 return event.getClass().getName();
64 }
65
66 /**
67 * Gets event hint of event task.
68 * @return event hint string
69 */
70 public String eventHint() {
71 return eventHint;
72 }
73
74 @Override
75 public int hashCode() {
76 return Objects.hash(this.toString());
77 }
78
79 @Override
80 public boolean equals(Object obj) {
81 if (obj == this) {
82 return true;
83 }
84 if (!(obj instanceof EventTask)) {
85 return false;
86 }
87 return Objects.equals(this.event(), ((EventTask) obj).event())
88 && Objects.equals(this.eventType(), ((EventTask) obj).eventType())
89 && Objects.equals(this.eventHint(), ((EventTask) obj).eventHint());
90 }
91
92 @Override
93 public String toString() {
94 return MoreObjects.toStringHelper(getClass())
95 .add("context", context())
jaegonkime0f45b52018-10-09 20:23:26 +090096 .add("programCounter", programCounter())
jaegonkim6a7b5242018-09-12 23:09:42 +090097 .add("event", event())
98 .add("eventHint", eventHint())
99 .toString();
100 }
101
102 /**
103 * Gets a instance of builder.
104 * @return instance of builder
105 */
106 public static Builder builder() {
107 return new Builder();
108 }
109
110 /**
111 * Builder of EventTask.
112 */
113 public static class Builder extends HandlerTask.Builder {
114
115 /**
116 * Event triggering event task.
117 */
118 private Event event;
119
120 /**
121 * Event hint value for finding target event.
122 */
123 private String eventHint;
124
125 /**
126 * Sets event.
127 * @param event event triggering event task
128 * @return Builder of EventTask
129 */
130 public Builder event(Event event) {
131 this.event = event;
132 return this;
133 }
134
135 /**
136 * Sets event hint.
137 * @param eventHint event hint value for finding target event
138 * @return Builder of EventTask
139 */
140 public Builder eventHint(String eventHint) {
141 this.eventHint = eventHint;
142 return this;
143 }
144
145 @Override
146 public Builder context(WorkflowContext context) {
147 super.context(context);
148 return this;
149 }
150
151 @Override
jaegonkime0f45b52018-10-09 20:23:26 +0900152 public Builder programCounter(ProgramCounter programCounter) {
153 super.programCounter(programCounter);
jaegonkim6a7b5242018-09-12 23:09:42 +0900154 return this;
155 }
156
157 /**
158 * Builds EventTask.
159 * @return instance of EventTask
jaegonkime0f45b52018-10-09 20:23:26 +0900160 * @throws WorkflowException workflow exception
jaegonkim6a7b5242018-09-12 23:09:42 +0900161 */
jaegonkime0f45b52018-10-09 20:23:26 +0900162 public EventTask build() throws WorkflowException {
163 check(event != null, "event is invalid");
164 check(eventHint != null, "eventHint is invalid");
jaegonkim6a7b5242018-09-12 23:09:42 +0900165 return new EventTask(this);
166 }
167 }
168}