Copyright header update, 2015 edition
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / views / uml2sd / util / SortAsyncForBackward.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.
23 *
24 * Compares two asyncMessages only taking into account the event occurrence when their
25 * appear.<br>
26 *
27 * Used to order the AsyncMessage list insuring that the previous node has both of his ends smaller than the current node
28 *
29 * @version 1.0
30 * @author sveyrier
31 *
32 */
33 public class SortAsyncForBackward implements Comparator<GraphNode>, Serializable {
34
35 // ------------------------------------------------------------------------
36 // Constants
37 // ------------------------------------------------------------------------
38 /**
39 * Serial version UID
40 */
41 private static final long serialVersionUID = 603959931263853359L;
42
43 // ------------------------------------------------------------------------
44 // Methods
45 // ------------------------------------------------------------------------
46
47 @Override
48 public int compare(GraphNode arg0, GraphNode arg1) {
49 if (arg0 instanceof AsyncMessage && arg1 instanceof AsyncMessage) {
50 AsyncMessage m1 = (AsyncMessage) arg0;
51 AsyncMessage m2 = (AsyncMessage) arg1;
52 int m1Max, m2Max;
53 // AsyncMessage has two ends which may have different event occurrences
54 // Search for the greater event occurrence for each messages
55 if (m1.getStartOccurrence() > m1.getEndOccurrence()) {
56 m1Max = m1.getStartOccurrence();
57 } else {
58 m1Max = m1.getEndOccurrence();
59 }
60 if (m2.getStartOccurrence() > m2.getEndOccurrence()) {
61 m2Max = m2.getStartOccurrence();
62 } else {
63 m2Max = m2.getEndOccurrence();
64 }
65
66 int m1Min, m2Min;
67 // Search for the smaller event occurrence for each messages
68 if (m1.getStartOccurrence() > m1.getEndOccurrence()) {
69 m1Min = m1.getEndOccurrence();
70 } else {
71 m1Min = m1.getStartOccurrence();
72 }
73 if (m2.getStartOccurrence() > m2.getEndOccurrence()) {
74 m2Min = m2.getEndOccurrence();
75 } else {
76 m2Min = m2.getStartOccurrence();
77 }
78
79 if (m1Max > m2Max) {
80 return 1;
81 } else if (m1Max == m2Max) {
82 if (m1Min == m2Min) {
83 return 0;
84 } else if (m1Min > m2Min) {
85 return -1;
86 } else {
87 return 1;
88 }
89 } else {
90 return -1;
91 }
92 }
93 return 0;
94 }
95
96 }
This page took 0.052257 seconds and 5 git commands to generate.