package de.tum.in.i22.uc.cm.datatypes.basic;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import de.tum.in.i22.uc.cm.datatypes.interfaces.IEvent;
import de.tum.in.i22.uc.cm.settings.Settings;
public class EventBasic implements IEvent {
public static final String PEP_PARAMETER_KEY = Settings.getInstance().getPep();
public static final String ALLOW_IMPLIES_ACTUAL_PARAMETER_KEY = Settings.getInstance().getAllowImpliesActualParameterKey();
private static final String PREFIX_SEPARATOR = Settings.getInstance().getPrefixSeparator();
private String _name = null;
private String _pep = null;
private boolean _allowImpliesActual = false;
private boolean _isActual = false;
private final Map<String, String> _parameters = new HashMap<>();
private long _timestamp;
public EventBasic(String name, Map<String, String> map) {
_name = name;
if (map != null) {
_parameters.putAll(map);
_pep = _parameters.get(PEP_PARAMETER_KEY);
// If the event has a AIA parameter, use it
String AIA=_parameters.get(ALLOW_IMPLIES_ACTUAL_PARAMETER_KEY);
if (AIA!=null) _allowImpliesActual = Boolean.valueOf(AIA);
//otherwise, fallback to Setting default value
else _allowImpliesActual = Boolean.valueOf(Settings.getInstance().getAllowImpliesActual());
}
}
public EventBasic(String name, Map<String, String> map, boolean isActual) {
this(name, map);
_isActual = isActual;
}
public EventBasic(String name, Map<String, String> map, boolean isActual, long timeStamp) {
this(name, map, isActual);
_timestamp=timeStamp;
}
@Override
public long getTimestamp() {
return _timestamp;
}
@Override
public String getName() {
return _name;
}
@Override
public String getPep() {
return _pep;
}
@Override
public boolean isActual() {
return _isActual;
}
@Override
public Map<String, String> getParameters() {
return Collections.unmodifiableMap(_parameters);
}
@Override
public String toString() {
return com.google.common.base.Objects.toStringHelper(this)
.add("_name", _name)
.add("_pep", _pep)
.add("_isActual", _isActual)
.add("_parameters", _parameters)
.add("_timestamp", _timestamp)
.add(ALLOW_IMPLIES_ACTUAL_PARAMETER_KEY, _allowImpliesActual)
.toString();
}
@Override
public boolean equals(Object obj) {
boolean isEqual = false;
if (obj != null && this.getClass() == obj.getClass()) {
EventBasic o = (EventBasic)obj;
//TODO check if timestamp should be checked
isEqual = Objects.equals(_name, o._name)
&& Objects.equals(_isActual, o._isActual)
&& Objects.equals(_parameters, o._parameters);
}
return isEqual;
}
@Override
public int hashCode() {
return Objects.hash(_name, _isActual, _parameters);
}
public String niceString() {
return _name + (_isActual ? "[Actual]" : "[Desired]") +_parameters;
}
@Override
public boolean allowImpliesActual() {
return _allowImpliesActual;
}
}