package rocks.inspectit.shared.cs.communication.comparator; import java.util.Comparator; import java.util.List; import rocks.inspectit.shared.all.cmr.model.MethodIdent; import rocks.inspectit.shared.all.cmr.service.ICachedDataService; import rocks.inspectit.shared.all.communication.MethodSensorData; import rocks.inspectit.shared.all.util.ObjectUtils; /** * Comparators for {@link MethodSensorData}. * * @author Ivan Senic * */ public enum MethodSensorDataComparatorEnum implements IDataComparator<MethodSensorData>, Comparator<MethodIdent> { /** * Sort by package name. */ PACKAGE, /** * Sort by class name. */ CLASS, /** * Sort by method name. */ METHOD; /** * {@inheritDoc} */ @Override public int compare(MethodSensorData o1, MethodSensorData o2, ICachedDataService cachedDataService) { if (null == cachedDataService) { return 0; } MethodIdent methodIdent1 = cachedDataService.getMethodIdentForId(o1.getMethodIdent()); MethodIdent methodIdent2 = cachedDataService.getMethodIdentForId(o2.getMethodIdent()); if ((null != methodIdent1) && (null != methodIdent2)) { return compare(methodIdent1, methodIdent2); } else { return 0; } } /** * {@inheritDoc} */ @Override public int compare(MethodIdent methodIdent1, MethodIdent methodIdent2) { switch (this) { case PACKAGE: return ObjectUtils.compare(methodIdent1.getPackageName(), methodIdent2.getPackageName()); case CLASS: return ObjectUtils.compare(methodIdent1.getClassName(), methodIdent2.getClassName()); case METHOD: int result = ObjectUtils.compare(methodIdent1.getMethodName(), methodIdent2.getMethodName()); if (0 != result) { return result; } else { List<String> parameterList1 = methodIdent1.getParameters(); List<String> parameterList2 = methodIdent2.getParameters(); return ObjectUtils.compare(parameterList1, parameterList2); } default: return 0; } } }