Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 355612
Collapse All | Expand All

(-)src/org/eclipse/rwt/internal/textsize/MeasurementOperator.java (-16 / +20 lines)
Lines 7-13 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *    Frank Appel - initial API and implementation
9
 *    Frank Appel - initial API and implementation
10
 *    EclipseSource - bug 348056: Eliminate compiler warnings
10
 *    EclipseSource - ongoing development
11
 ******************************************************************************/
11
 ******************************************************************************/
12
package org.eclipse.rwt.internal.textsize;
12
package org.eclipse.rwt.internal.textsize;
13
13
Lines 23-31 Link Here
23
import org.eclipse.swt.internal.SerializableCompatibility;
23
import org.eclipse.swt.internal.SerializableCompatibility;
24
24
25
class MeasurementOperator implements SerializableCompatibility {
25
class MeasurementOperator implements SerializableCompatibility {
26
  
26
27
  private final Set<Probe> probes;
27
  private final Set<Probe> probes;
28
  private final Set<MeasurementItem> items;
28
  private final Set<MeasurementItem> items;
29
  private boolean isStartupProbeMeasurementPerformed;
29
30
30
  static MeasurementOperator getInstance() {
31
  static MeasurementOperator getInstance() {
31
    return ( MeasurementOperator )SessionSingletonBase.getInstance( MeasurementOperator.class );
32
    return ( MeasurementOperator )SessionSingletonBase.getInstance( MeasurementOperator.class );
Lines 50-64 Link Here
50
    readMeasuredFontProbeSizes();
51
    readMeasuredFontProbeSizes();
51
    return readMeasuredTextSizes();
52
    return readMeasuredTextSizes();
52
  }
53
  }
53
  
54
54
  void handleStartupProbeMeasurementResults() {
55
  void handleStartupProbeMeasurementResults() {
55
    readMeasuredFontProbeSizes();
56
    if( !isStartupProbeMeasurementPerformed ) {
57
      readMeasuredFontProbeSizes();
58
      isStartupProbeMeasurementPerformed = true;
59
    }
56
  }
60
  }
57
  
61
58
  int getProbeCount() {
62
  int getProbeCount() {
59
    return probes.size();
63
    return probes.size();
60
  }
64
  }
61
  
65
62
  void addProbeToMeasure( FontData fontData ) {
66
  void addProbeToMeasure( FontData fontData ) {
63
    Probe probe = RWTFactory.getProbeStore().getProbe( fontData );
67
    Probe probe = RWTFactory.getProbeStore().getProbe( fontData );
64
    if( probe == null ) {
68
    if( probe == null ) {
Lines 66-101 Link Here
66
    }
70
    }
67
    probes.add( probe );
71
    probes.add( probe );
68
  }
72
  }
69
  
73
70
  Probe[] getProbes() {
74
  Probe[] getProbes() {
71
    return probes.toArray( new Probe[ probes.size() ] );
75
    return probes.toArray( new Probe[ probes.size() ] );
72
  }
76
  }
73
  
77
74
  void addItemToMeasure( MeasurementItem newItem ) {
78
  void addItemToMeasure( MeasurementItem newItem ) {
75
    if( !requestContainsMeasurementResult( newItem ) ) {
79
    if( !requestContainsMeasurementResult( newItem ) ) {
76
      items.add( newItem );
80
      items.add( newItem );
77
    }
81
    }
78
  }
82
  }
79
  
83
80
  int getItemCount() {
84
  int getItemCount() {
81
    return items.size();
85
    return items.size();
82
  }
86
  }
83
  
87
84
  MeasurementItem[] getItems() {
88
  MeasurementItem[] getItems() {
85
    return items.toArray( new MeasurementItem[ items.size() ] );
89
    return items.toArray( new MeasurementItem[ items.size() ] );
86
  }
90
  }
87
  
91
88
  //////////////////
92
  //////////////////
89
  // helping methods
93
  // helping methods
90
  
94
91
  private boolean hasProbesToMeasure() {
95
  private boolean hasProbesToMeasure() {
92
    return !probes.isEmpty();
96
    return !probes.isEmpty();
93
  }
97
  }
94
  
98
95
  private void writeFontProbingStatement() {
99
  private void writeFontProbingStatement() {
96
    TextSizeUtilFacade.writeFontProbing();
100
    TextSizeUtilFacade.writeFontProbing();
97
  }
101
  }
98
  
102
99
  private void readMeasuredFontProbeSizes() {
103
  private void readMeasuredFontProbeSizes() {
100
    HttpServletRequest request = ContextProvider.getRequest();
104
    HttpServletRequest request = ContextProvider.getRequest();
101
    Iterator probeList = probes.iterator();
105
    Iterator probeList = probes.iterator();
Lines 109-120 Link Here
109
      }
113
      }
110
    }
114
    }
111
  }
115
  }
112
  
116
113
  private void createProbeResult( Probe probe, String value ) {
117
  private void createProbeResult( Probe probe, String value ) {
114
    Point size = getSize( value );
118
    Point size = getSize( value );
115
    ProbeResultStore.getInstance().createProbeResult( probe, size );
119
    ProbeResultStore.getInstance().createProbeResult( probe, size );
116
  }
120
  }
117
  
121
118
  private void addStartupProbesToBuffer() {
122
  private void addStartupProbesToBuffer() {
119
    Probe[] probeList = RWTFactory.getProbeStore().getProbes();
123
    Probe[] probeList = RWTFactory.getProbeStore().getProbes();
120
    probes.addAll( Arrays.asList( probeList ) );
124
    probes.addAll( Arrays.asList( probeList ) );
(-)src/org/eclipse/rwt/internal/textsize/MeasurementOperator_Test.java (-25 / +38 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *    Frank Appel - initial API and implementation
9
 *    Frank Appel - initial API and implementation
10
 *    EclipseSource - ongoing development
10
 ******************************************************************************/
11
 ******************************************************************************/
11
package org.eclipse.rwt.internal.textsize;
12
package org.eclipse.rwt.internal.textsize;
12
13
Lines 33-41 Link Here
33
  public void testHandleMeasurementRequest() {
34
  public void testHandleMeasurementRequest() {
34
    requestProbingOfFont1();
35
    requestProbingOfFont1();
35
    requestMeasurementOfItem1();
36
    requestMeasurementOfItem1();
36
    
37
37
    operator.handleMeasurementRequests();
38
    operator.handleMeasurementRequests();
38
    
39
39
    assertEquals( 1, operator.getProbeCount() );
40
    assertEquals( 1, operator.getProbeCount() );
40
    assertEquals( 1, operator.getItemCount() );
41
    assertEquals( 1, operator.getItemCount() );
41
  }
42
  }
Lines 46-71 Link Here
46
    operator.handleMeasurementRequests();
47
    operator.handleMeasurementRequests();
47
    requestProbingOfFont2();
48
    requestProbingOfFont2();
48
    requestMeasurementOfItem2();
49
    requestMeasurementOfItem2();
49
    
50
50
    operator.handleMeasurementRequests();
51
    operator.handleMeasurementRequests();
51
52
52
    assertEquals( 2, operator.getProbeCount() );
53
    assertEquals( 2, operator.getProbeCount() );
53
    assertEquals( 2, operator.getItemCount() );
54
    assertEquals( 2, operator.getItemCount() );
54
  }
55
  }
55
  
56
56
  public void testSubsequentCallsToHandleMeasurementRequestAreIdempotent() {
57
  public void testSubsequentCallsToHandleMeasurementRequestAreIdempotent() {
57
    requestProbingOfFont1();
58
    requestProbingOfFont1();
58
    requestMeasurementOfItem1();
59
    requestMeasurementOfItem1();
59
    operator.handleMeasurementRequests();
60
    operator.handleMeasurementRequests();
60
    requestProbingOfFont1();
61
    requestProbingOfFont1();
61
    requestMeasurementOfItem1();
62
    requestMeasurementOfItem1();
62
    
63
63
    operator.handleMeasurementRequests();
64
    operator.handleMeasurementRequests();
64
    
65
65
    assertEquals( 1, operator.getProbeCount() );
66
    assertEquals( 1, operator.getProbeCount() );
66
    assertEquals( 1, operator.getItemCount() );
67
    assertEquals( 1, operator.getItemCount() );
67
  }
68
  }
68
  
69
69
  public void testHandleMeasurementResults() {
70
  public void testHandleMeasurementResults() {
70
    requestProbingOfFont1();
71
    requestProbingOfFont1();
71
    requestMeasurementOfItem1();
72
    requestMeasurementOfItem1();
Lines 83-116 Link Here
83
    requestProbingOfFont1();
84
    requestProbingOfFont1();
84
    fakeRequestParamWithMeasurementResultOfItem( MEASUREMENT_ITEM_1 );
85
    fakeRequestParamWithMeasurementResultOfItem( MEASUREMENT_ITEM_1 );
85
    requestMeasurementOfItem1();
86
    requestMeasurementOfItem1();
86
    
87
87
    operator.handleMeasurementRequests();
88
    operator.handleMeasurementRequests();
88
89
89
    assertEquals( 0, operator.getItemCount() );
90
    assertEquals( 0, operator.getItemCount() );
90
  }
91
  }
91
  
92
92
  public void testInitStartupProbes() {
93
  public void testInitStartupProbes() {
93
    createProbeOfFont1();
94
    createProbeOfFont1();
94
    
95
95
    MeasurementOperator measurementOperator = new MeasurementOperator();
96
    MeasurementOperator measurementOperator = new MeasurementOperator();
96
    
97
97
    assertEquals( 1, measurementOperator.getProbeCount() );
98
    assertEquals( 1, measurementOperator.getProbeCount() );
98
  }
99
  }
99
  
100
100
  public void testHandleStartupProbeMeasurementResults() {
101
  public void testHandleStartupProbeMeasurementResults() {
101
    createProbeOfFont1();
102
    createProbeOfFont1();
102
    fakeRequestParamWithMeasurementResultOfProbe( FONT_DATA_1 );
103
    fakeRequestParamWithMeasurementResultOfProbe( FONT_DATA_1 );
103
    MeasurementOperator measurementOperator = new MeasurementOperator();
104
    MeasurementOperator measurementOperator = new MeasurementOperator();
104
    
105
105
    measurementOperator.handleStartupProbeMeasurementResults();
106
    measurementOperator.handleStartupProbeMeasurementResults();
106
    
107
107
    assertEquals( 0, measurementOperator.getProbeCount() );
108
    assertEquals( 0, measurementOperator.getProbeCount() );
108
  }
109
  }
109
110
111
  public void testHandleStartupProbeMeasurementResultsExecutedOnce() {
112
    requestProbing( FONT_DATA_1 );
113
    fakeRequestParamWithMeasurementResultOfProbe( FONT_DATA_1 );
114
    operator.handleStartupProbeMeasurementResults();
115
    requestProbing( FONT_DATA_2 );
116
    fakeRequestParamWithMeasurementResultOfProbe( FONT_DATA_2 );
117
118
    operator.handleStartupProbeMeasurementResults();
119
120
    assertEquals( 1, operator.getProbeCount() );
121
  }
122
110
  public void testAddItemToMeasure() {
123
  public void testAddItemToMeasure() {
111
    initializeSessionWithDisplay();
124
    initializeSessionWithDisplay();
112
    MeasurementItem item = createItem();
125
    MeasurementItem item = createItem();
113
    
126
114
    operator.addItemToMeasure( item );
127
    operator.addItemToMeasure( item );
115
128
116
    checkMeasurementItemBuffering( item );
129
    checkMeasurementItemBuffering( item );
Lines 118-141 Link Here
118
131
119
  public void testAddItemToMeasureIsIdempotent() {
132
  public void testAddItemToMeasureIsIdempotent() {
120
    MeasurementItem item = createItem();
133
    MeasurementItem item = createItem();
121
    
134
122
    operator.addItemToMeasure( item );
135
    operator.addItemToMeasure( item );
123
    operator.addItemToMeasure( item );
136
    operator.addItemToMeasure( item );
124
137
125
    checkMeasurementItemBuffering( item );
138
    checkMeasurementItemBuffering( item );
126
  }
139
  }
127
    
140
128
  public void testGetItemsToMeasureWithEmptyResult() {
141
  public void testGetItemsToMeasureWithEmptyResult() {
129
    MeasurementItem[] items = MeasurementOperator.getInstance().getItems();
142
    MeasurementItem[] items = MeasurementOperator.getInstance().getItems();
130
    
143
131
    assertEquals( 0, items.length );
144
    assertEquals( 0, items.length );
132
  }
145
  }
133
  
146
134
  protected void setUp() throws Exception {
147
  protected void setUp() throws Exception {
135
    Fixture.setUp();
148
    Fixture.setUp();
136
    operator = MeasurementOperator.getInstance();
149
    operator = MeasurementOperator.getInstance();
137
  }
150
  }
138
  
151
139
  protected void tearDown() throws Exception {
152
  protected void tearDown() throws Exception {
140
    Fixture.tearDown();
153
    Fixture.tearDown();
141
  }
154
  }
Lines 160-166 Link Here
160
  private void requestMeasurementOfItem1() {
173
  private void requestMeasurementOfItem1() {
161
    MeasurementOperator.getInstance().addItemToMeasure( MEASUREMENT_ITEM_1 );
174
    MeasurementOperator.getInstance().addItemToMeasure( MEASUREMENT_ITEM_1 );
162
  }
175
  }
163
  
176
164
  private void requestMeasurementOfItem2() {
177
  private void requestMeasurementOfItem2() {
165
    MeasurementOperator.getInstance().addItemToMeasure( MEASUREMENT_ITEM_2 );
178
    MeasurementOperator.getInstance().addItemToMeasure( MEASUREMENT_ITEM_2 );
166
  }
179
  }
Lines 172-183 Link Here
172
  private void requestProbingOfFont2() {
185
  private void requestProbingOfFont2() {
173
    requestProbing( FONT_DATA_2 );
186
    requestProbing( FONT_DATA_2 );
174
  }
187
  }
175
  
188
176
  private void requestProbing( FontData fontData1 ) {
189
  private void requestProbing( FontData fontData1 ) {
177
    Fixture.fakeNewRequest();
190
    Fixture.fakeNewRequest();
178
    operator.addProbeToMeasure( fontData1 );
191
    operator.addProbeToMeasure( fontData1 );
179
  }
192
  }
180
  
193
181
  private MeasurementItem createItem() {
194
  private MeasurementItem createItem() {
182
    FontData fontData = new FontData( "arial", 13, SWT.BOLD );
195
    FontData fontData = new FontData( "arial", 13, SWT.BOLD );
183
    String textToMeasure = "textToMeasure";
196
    String textToMeasure = "textToMeasure";
Lines 188-198 Link Here
188
  private MeasurementItem createItem( FontData fontData, String textToMeasure, int wrapWidth ) {
201
  private MeasurementItem createItem( FontData fontData, String textToMeasure, int wrapWidth ) {
189
    return new MeasurementItem( textToMeasure, fontData, wrapWidth );
202
    return new MeasurementItem( textToMeasure, fontData, wrapWidth );
190
  }
203
  }
191
  
204
192
  private Display initializeSessionWithDisplay() {
205
  private Display initializeSessionWithDisplay() {
193
    return new Display();
206
    return new Display();
194
  }
207
  }
195
  
208
196
  private void checkMeasurementItemBuffering( MeasurementItem item ) {
209
  private void checkMeasurementItemBuffering( MeasurementItem item ) {
197
    assertEquals( 1, MeasurementOperator.getInstance().getItems().length );
210
    assertEquals( 1, MeasurementOperator.getInstance().getItems().length );
198
    assertSame( item, MeasurementOperator.getInstance().getItems() [ 0 ] );
211
    assertSame( item, MeasurementOperator.getInstance().getItems() [ 0 ] );

Return to bug 355612