9c45b39aaefd7c6b34a38f2ff8977787044b3b74
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / views / uml2sd / util / SortAsyncMessageComparator.java
1 /**********************************************************************
2 * Copyright (c) 2005, 2014 IBM Corporation, Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM - Initial API and implementation
10 * Bernd Hufmann - Updated for TMF
11 **********************************************************************/
12
13 package org.eclipse.tracecompass.tmf.ui.views.uml2sd.util;
14
15 import java.io.Serializable;
16 import java.util.Comparator;
17
18 import org.eclipse.tracecompass.tmf.ui.views.uml2sd.core.AsyncMessage;
19 import org.eclipse.tracecompass.tmf.ui.views.uml2sd.core.GraphNode;
20
21 /**
22 * Asynchronous message comparator Compare two AsyncMessages only taking into account the event occurrence when their
23 * appear.<br>
24 *
25 * Used to order the AsyncMessage list insuring that next node has one of his ends greater than the current node
26 *
27 * @version 1.0
28 * @author sveyrier
29 *
30 */
31 public class SortAsyncMessageComparator implements Comparator<GraphNode>, Serializable {
32
33 // ------------------------------------------------------------------------
34 // Constants
35 // ------------------------------------------------------------------------
36 /**
37 * Serial version UID
38 */
39 private static final long serialVersionUID = 1L;
40
41 // ------------------------------------------------------------------------
42 // Methods
43 // ------------------------------------------------------------------------
44
45 @Override
46 public int compare(GraphNode arg0, GraphNode arg1) {
47 if (arg0 instanceof AsyncMessage && arg1 instanceof AsyncMessage) {
48 AsyncMessage m1 = (AsyncMessage) arg0;
49 AsyncMessage m2 = (AsyncMessage) arg1;
50 int m1Min, m2Min;
51 // AsyncMessage has two ends which may have different event occurrences
52 // Search for the smaller event occurrence for each messages
53 if (m1.getStartOccurrence() > m1.getEndOccurrence()) {
54 m1Min = m1.getEndOccurrence();
55 } else {
56 m1Min = m1.getStartOccurrence();
57 }
58 if (m2.getStartOccurrence() > m2.getEndOccurrence()) {
59 m2Min = m2.getEndOccurrence();
60 } else {
61 m2Min = m2.getStartOccurrence();
62 }
63
64 int m1Max, m2Max;
65 // Search for the greater event occurrence for each messages
66 if (m1.getStartOccurrence() > m1.getEndOccurrence()) {
67 m1Max = m1.getStartOccurrence();
68 } else {
69 m1Max = m1.getEndOccurrence();
70 }
71 if (m2.getStartOccurrence() > m2.getEndOccurrence()) {
72 m2Max = m2.getStartOccurrence();
73 } else {
74 m2Max = m2.getEndOccurrence();
75 }
76
77 if (m1Min > m2Min) {
78 return 1;
79 } else if ((m1Min == m2Min)) {
80 if (m1Max == m2Max) {
81 return 0;
82 } else if (m1Max > m2Max) {
83 return -1;
84 } else {
85 return 1;
86 }
87 } else {
88 return -1;
89 }
90 }
91 return 0;
92 }
93
94 }
This page took 0.038973 seconds and 4 git commands to generate.