package rocks.inspectit.shared.cs.ci.business.valuesource;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlSeeAlso;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonTypeInfo;
import rocks.inspectit.shared.all.cmr.service.ICachedDataService;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HostValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpParameterValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpServerPortValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpQueryStringValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpRequestMethodValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpSchemeValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpServerNameValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpUriValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.HttpUrlValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.MethodParameterValueSource;
import rocks.inspectit.shared.cs.ci.business.valuesource.impl.MethodSignatureValueSource;
/**
* Abstract class for sources of string values within an invocation sequence.
*
* @author Alexander Wert
*
*/
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({ HttpUrlValueSource.class, HttpParameterValueSource.class, MethodSignatureValueSource.class, MethodParameterValueSource.class, HostValueSource.class, HttpRequestMethodValueSource.class,
HttpServerPortValueSource.class, HttpQueryStringValueSource.class, HttpSchemeValueSource.class, HttpServerNameValueSource.class, HttpUriValueSource.class })
public abstract class StringValueSource {
/**
* Retrieves the string values for the given {@link InvocationSequenceData} instance according
* to the specific string values source type.
*
* @param invocSequence
* {@link InvocationSequenceData} to retrieve the string values from
* @param cachedDataService
* {@link ICachedDataService} used to retrieve additional information
* @return Returns the string values for the given {@link InvocationSequenceData} instance.
* Returns an empty array if no strings can be retrieved.
*/
public abstract String[] getStringValues(InvocationSequenceData invocSequence, ICachedDataService cachedDataService);
/**
* Indicates whether the value source has a set of options to be compared to.
*
* @return true, if there is a fix set of options to select from.
*/
public boolean hasOptions() {
return false;
}
/**
* Returns an array of options to select from.
*
* @return Returns an array of options to select from.
*/
@JsonIgnore
public String[] getOptions() {
return new String[0];
}
}