/**
* Copyright 2011-2017 Asakusa Framework Team.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.asakusafw.trace.model;
import java.text.MessageFormat;
import com.google.gson.annotations.SerializedName;
/**
* Represents a point where tracing is enabled.
* @since 0.5.1
*/
public class Tracepoint {
@SerializedName("operator_class")
private String operatorClassName;
@SerializedName("method")
private String operatorMethodName;
@SerializedName("kind")
private PortKind portKind;
@SerializedName("name")
private String portName;
Tracepoint() {
return;
}
/**
* Creates a new instance.
* @param operatorClassName the operator class name
* @param operatorMethodName the operator method name
* @param portKind the operator port kind
* @param portName the operator port name
* @throws IllegalArgumentException if some parameters were {@code null}
*/
public Tracepoint(
String operatorClassName, String operatorMethodName,
PortKind portKind, String portName) {
this.operatorClassName = operatorClassName;
this.operatorMethodName = operatorMethodName;
this.portKind = portKind;
this.portName = portName;
}
/**
* Returns the target operator class name.
* @return the operator class name
*/
public String getOperatorClassName() {
return operatorClassName;
}
/**
* Returns the target operator method name.
* @return the operator method name
*/
public String getOperatorMethodName() {
return operatorMethodName;
}
/**
* Returns the target port kind.
* @return the port kind
*/
public PortKind getPortKind() {
return portKind;
}
/**
* Returns the target port name.
* @return the port name
*/
public String getPortName() {
return portName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((operatorClassName == null) ? 0 : operatorClassName.hashCode());
result = prime * result + ((operatorMethodName == null) ? 0 : operatorMethodName.hashCode());
result = prime * result + ((portKind == null) ? 0 : portKind.hashCode());
result = prime * result + ((portName == null) ? 0 : portName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Tracepoint other = (Tracepoint) obj;
if (operatorClassName == null) {
if (other.operatorClassName != null) {
return false;
}
} else if (!operatorClassName.equals(other.operatorClassName)) {
return false;
}
if (operatorMethodName == null) {
if (other.operatorMethodName != null) {
return false;
}
} else if (!operatorMethodName.equals(other.operatorMethodName)) {
return false;
}
if (portKind != other.portKind) {
return false;
}
if (portName == null) {
if (other.portName != null) {
return false;
}
} else if (!portName.equals(other.portName)) {
return false;
}
return true;
}
@Override
public String toString() {
return MessageFormat.format(
"{0}#{1}-{2}({3})", //$NON-NLS-1$
operatorClassName,
operatorMethodName,
portKind,
portName);
}
/**
* Represents input/output port kind.
* @since 0.5.1
*/
public enum PortKind {
/**
* Input port.
*/
INPUT,
/**
* Output port.
*/
OUTPUT,
;
@Override
public String toString() {
return name().toLowerCase();
}
}
}