relaxed synchronization where possible; wait for RaceDefinition via RaceHandle before adding wind tracker

This commit is contained in:
Axel Uhl committed 2011-07-08 00:21:15 +02:00
1 parent a70085804a
commit e6a85dc3e6
7 files changed
+66 -45

No files matched your search

@@ -1,5 +1,6 @@
package com.sap.sailing.gwt.ui.client;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
@@ -12,6 +13,8 @@ import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.CellTree;
import com.google.gwt.user.cellview.client.ColumnSortEvent.Handler;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.ColumnSortList;
import com.google.gwt.user.cellview.client.ColumnSortList.ColumnSortInfo;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
@@ -38,12 +41,48 @@ public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectio
private final StringConstants stringConstants;
private final WindSettingPanel windSettingPanel;
private Pair<EventDAO, RaceDAO> selectedEventAndRace;
private ColumnSortList columnSortList;
private final TextColumn<WindDAO> timeColumn;
private final TextColumn<WindDAO> speedInKnotsColumn;
private final TextColumn<WindDAO> windDirectionInDegColumn;
private final TextColumn<WindDAO> dampenedSpeedInKnotsColumn;
private final TextColumn<WindDAO> dampenedWindDirectionInDegColumn;
public WindPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter, EventRefresher eventRefresher) {
this.sailingService = sailingService;
this.errorReporter = errorReporter;
this.eventRefresher = eventRefresher;
stringConstants = GWT.create(StringConstants.class);
timeColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return new Date(object.timepoint).toString();
}
};
speedInKnotsColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.trueWindSpeedInKnots;
}
};
windDirectionInDegColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.trueWindFromDeg;
}
};
dampenedSpeedInKnotsColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.dampenedTrueWindSpeedInKnots;
}
};
dampenedWindDirectionInDegColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.dampenedTrueWindFromDeg;
}
};
grid = new Grid(2, 2); // first row: event/race selection; second row: wind display
Button btnRefresh = new Button(stringConstants.refresh());
btnRefresh.addClickHandler(new ClickHandler() {
@@ -127,36 +166,6 @@ public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectio
Label windSourceLabel = new Label("Wind Source: "+e.getKey()+
", Dampening Interval: "+e.getValue().dampeningIntervalInMilliseconds+"ms");
windDisplay.add(windSourceLabel);
TextColumn<WindDAO> timeColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return new Date(object.timepoint).toString();
}
};
TextColumn<WindDAO> speedInKnotsColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.trueWindSpeedInKnots;
}
};
TextColumn<WindDAO> windDirectionInDegColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.trueWindFromDeg;
}
};
TextColumn<WindDAO> dampenedSpeedInKnotsColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.dampenedTrueWindSpeedInKnots;
}
};
TextColumn<WindDAO> dampenedWindDirectionInDegColumn = new TextColumn<WindDAO>() {
@Override
public String getValue(WindDAO object) {
return ""+object.dampenedTrueWindFromDeg;
}
};
timeColumn.setSortable(true);
speedInKnotsColumn.setSortable(true);
windDirectionInDegColumn.setSortable(true);
@@ -173,6 +182,20 @@ public class WindPanel extends FormPanel implements EventDisplayer, RaceSelectio
Handler columnSortHandler = getWindTableColumnSortHandler(windList.getList(), timeColumn,
speedInKnotsColumn, windDirectionInDegColumn, dampenedSpeedInKnotsColumn, dampenedWindDirectionInDegColumn);
windTable.addColumnSortHandler(columnSortHandler);
List<ColumnSortInfo> sortedColumnList = new ArrayList<ColumnSortInfo>();
if (columnSortList != null) {
for (int i=0; i<columnSortList.size(); i++) {
sortedColumnList.add(columnSortList.get(i));
}
}
columnSortList = windTable.getColumnSortList();
if (sortedColumnList.isEmpty()) {
columnSortList.push(timeColumn);
} else {
for (ColumnSortInfo sortInfo : sortedColumnList) {
columnSortList.push(sortInfo);
}
}
windDisplay.add(windTable);
}
}
@@ -37,6 +37,7 @@ import com.sap.sailing.domain.tracking.WindSource;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.domain.tracking.impl.WindImpl;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.RaceHandle;
import com.sap.sailing.domain.tractracadapter.RaceRecord;
import com.sap.sailing.domain.tractracadapter.TracTracConfiguration;
import com.sap.sailing.gwt.ui.client.SailingService;
@@ -142,10 +143,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
@Override
public void track(RaceRecordDAO rr, String liveURI, String storedURI, boolean trackWind, boolean correctWindByDeclination) throws Exception {
service.addRace(new URL(rr.paramURL), new URI(liveURI), new URI(storedURI),
RaceHandle raceHandle = service.addRace(new URL(rr.paramURL), new URI(liveURI), new URI(storedURI),
MongoWindStoreFactory.INSTANCE.getMongoWindStore(MongoObjectFactory.INSTANCE));
if (trackWind) {
startTrackingWind(rr.eventName, rr.name, correctWindByDeclination);
startTrackingWind(raceHandle.getEvent().getName(), raceHandle.getRace().getName(), correctWindByDeclination);
}
}
@@ -1,3 +1,2 @@
# Module com_sap_sailing_gwt_ui
# RPC service class, partial path of RPC policy file
com.sap.sailing.gwt.ui.client.GreetingService, 82043305890EB51D0A982181ECFF233C.gwt.rpc
@@ -1,4 +1,4 @@
function com_sap_sailing_gwt_ui_AdminConsole(){var O='',vb='" for "gwt:onLoadErrorFn"',tb='" for "gwt:onPropertyErrorFn"',hb='"><\/script>',Y='#',Vb='.cache.html',$='/',Ob='010702A923E05DAE0BB5E1D7AA91D80B',Pb='0996074620D573CD0D52304C35421478',Qb='0CBDEBA4B152D61DAE45610D05C725AE',Rb='33F2BBF2DD4AE48276EB06B1EC10844A',Ub=':',nb='::',bc='<script defer="defer">com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone(\'com.sap.sailing.gwt.ui.AdminConsole\')<\/script>',gb='<script id="',qb='=',Z='?',sb='Bad handler "',Sb='C23EFD2E5020664B38F48F2E3866F3C3',ac='DOMContentLoaded',Tb='F365AB9592BF61D671C64678F97DC7B2',ib='SCRIPT',fb='__gwt_marker_com.sap.sailing.gwt.ui.AdminConsole',jb='base',bb='baseUrl',S='begin',R='bootstrap',ab='clear.cache.gif',P='com.sap.sailing.gwt.ui.AdminConsole',db='com.sap.sailing.gwt.ui.AdminConsole.nocache.js',mb='com.sap.sailing.gwt.ui.AdminConsole::',pb='content',X='end',Ib='gecko',Jb='gecko1_8',T='gwt.codesvr=',U='gwt.hosted=',V='gwt.hybrid',Wb='gwt/clean/clean.css',ub='gwt:onLoadErrorFn',rb='gwt:onPropertyErrorFn',ob='gwt:property',_b='head',Mb='hosted.html?com_sap_sailing_gwt_ui_AdminConsole',$b='href',Hb='ie6',Gb='ie8',Fb='ie9',wb='iframe',_='img',xb="javascript:''",Xb='link',Lb='loadExternalRefs',kb='meta',zb='moduleRequested',W='moduleStartup',Eb='msie',lb='name',Bb='opera',yb='position:absolute;width:0;height:0;border:none',Yb='rel',Db='safari',cb='script',Nb='selectingPermutation',Q='startup',Zb='stylesheet',eb='undefined',Kb='unknown',Ab='user.agent',Cb='webkit';var l=window,m=document,n=l.__gwtStatsEvent?function(a){return l.__gwtStatsEvent(a)}:null,o=l.__gwtStatsSessionId?l.__gwtStatsSessionId:null,p,q,r,s=O,t={},u=[],v=[],w=[],x=0,y,z;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:S});if(!l.__gwt_stylesLoaded){l.__gwt_stylesLoaded={}}if(!l.__gwt_scriptsLoaded){l.__gwt_scriptsLoaded={}}function A(){var b=false;try{var c=l.location.search;return (c.indexOf(T)!=-1||(c.indexOf(U)!=-1||l.external&&l.external.gwtOnLoad))&&c.indexOf(V)==-1}catch(a){}A=function(){return b};return b}
function com_sap_sailing_gwt_ui_AdminConsole(){var O='',vb='" for "gwt:onLoadErrorFn"',tb='" for "gwt:onPropertyErrorFn"',hb='"><\/script>',Y='#',Vb='.cache.html',$='/',Ob='3450CBE28C900A1F1F3C41490EEA9FE1',Pb='69A359FC08EFC59F3EE1689B0EEE3147',Qb='75A69EDF01940358DF24D68C33CC41F3',Ub=':',nb='::',bc='<script defer="defer">com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone(\'com.sap.sailing.gwt.ui.AdminConsole\')<\/script>',gb='<script id="',qb='=',Z='?',Rb='B313A9893A077CEA8EF511AEAB3083F5',sb='Bad handler "',Sb='D159311F8309EA24FD6E49DFD76AB1CF',Tb='DED9A1B71EE20AD6A8CB1703E06CB94E',ac='DOMContentLoaded',ib='SCRIPT',fb='__gwt_marker_com.sap.sailing.gwt.ui.AdminConsole',jb='base',bb='baseUrl',S='begin',R='bootstrap',ab='clear.cache.gif',P='com.sap.sailing.gwt.ui.AdminConsole',db='com.sap.sailing.gwt.ui.AdminConsole.nocache.js',mb='com.sap.sailing.gwt.ui.AdminConsole::',pb='content',X='end',Ib='gecko',Jb='gecko1_8',T='gwt.codesvr=',U='gwt.hosted=',V='gwt.hybrid',Wb='gwt/clean/clean.css',ub='gwt:onLoadErrorFn',rb='gwt:onPropertyErrorFn',ob='gwt:property',_b='head',Mb='hosted.html?com_sap_sailing_gwt_ui_AdminConsole',$b='href',Hb='ie6',Gb='ie8',Fb='ie9',wb='iframe',_='img',xb="javascript:''",Xb='link',Lb='loadExternalRefs',kb='meta',zb='moduleRequested',W='moduleStartup',Eb='msie',lb='name',Bb='opera',yb='position:absolute;width:0;height:0;border:none',Yb='rel',Db='safari',cb='script',Nb='selectingPermutation',Q='startup',Zb='stylesheet',eb='undefined',Kb='unknown',Ab='user.agent',Cb='webkit';var l=window,m=document,n=l.__gwtStatsEvent?function(a){return l.__gwtStatsEvent(a)}:null,o=l.__gwtStatsSessionId?l.__gwtStatsSessionId:null,p,q,r,s=O,t={},u=[],v=[],w=[],x=0,y,z;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:S});if(!l.__gwt_stylesLoaded){l.__gwt_stylesLoaded={}}if(!l.__gwt_scriptsLoaded){l.__gwt_scriptsLoaded={}}function A(){var b=false;try{var c=l.location.search;return (c.indexOf(T)!=-1||(c.indexOf(U)!=-1||l.external&&l.external.gwtOnLoad))&&c.indexOf(V)==-1}catch(a){}A=function(){return b};return b}
function B(){if(p&&q){var b=m.getElementById(P);var c=b.contentWindow;if(A()){c.__gwt_getProperty=function(a){return G(a)}}com_sap_sailing_gwt_ui_AdminConsole=null;c.gwtOnLoad(y,P,s,x);n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:W,millis:(new Date).getTime(),type:X})}}
function C(){function e(a){var b=a.lastIndexOf(Y);if(b==-1){b=a.length}var c=a.indexOf(Z);if(c==-1){c=a.length}var d=a.lastIndexOf($,Math.min(c,b));return d>=0?a.substring(0,d+1):O}
function f(a){if(a.match(/^\w+:\/\//)){}else{var b=m.createElement(_);b.src=a+ab;a=e(b.src)}return a}
@@ -12,6 +12,6 @@ function E(a){var b=t[a];return b==null?null:b}
function F(a,b){var c=w;for(var d=0,e=a.length-1;d<e;++d){c=c[a[d]]||(c[a[d]]=[])}c[a[e]]=b}
function G(a){var b=v[a](),c=u[a];if(b in c){return b}var d=[];for(var e in c){d[c[e]]=e}if(z){z(a,d,b)}throw null}
var H;function I(){if(!H){H=true;var a=m.createElement(wb);a.src=xb;a.id=P;a.style.cssText=yb;a.tabIndex=-1;m.body.appendChild(a);n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:W,millis:(new Date).getTime(),type:zb});a.contentWindow.location.replace(s+K)}}
v[Ab]=function(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Bb)!=-1}())return Bb;if(function(){return b.indexOf(Cb)!=-1}())return Db;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=9}())return Fb;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=8}())return Gb;if(function(){var a=/msie ([0-9]+)\.([0-9]+)/.exec(b);if(a&&a.length==3)return c(a)>=6000}())return Hb;if(function(){return b.indexOf(Ib)!=-1}())return Jb;return Kb};u[Ab]={gecko1_8:0,ie6:1,ie8:2,ie9:3,opera:4,safari:5};com_sap_sailing_gwt_ui_AdminConsole.onScriptLoad=function(){if(H){q=true;B()}};com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone=function(){p=true;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:Lb,millis:(new Date).getTime(),type:X});B()};D();C();var J;var K;if(A()){if(l.external&&(l.external.initModule&&l.external.initModule(P))){l.location.reload();return}K=Mb;J=O}n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:Nb});if(!A()){try{F([Jb],Ob);F([Fb],Pb);F([Bb],Qb);F([Db],Rb);F([Gb],Sb);F([Hb],Tb);J=w[G(Ab)];var L=J.indexOf(Ub);if(L!=-1){x=Number(J.substring(L+1));J=J.substring(0,L)}K=J+Vb}catch(a){return}}var M;function N(){if(!r){r=true;if(!__gwt_stylesLoaded[Wb]){var a=m.createElement(Xb);__gwt_stylesLoaded[Wb]=a;a.setAttribute(Yb,Zb);a.setAttribute($b,s+Wb);m.getElementsByTagName(_b)[0].appendChild(a)}B();if(m.removeEventListener){m.removeEventListener(ac,N,false)}if(M){clearInterval(M)}}}
v[Ab]=function(){var b=navigator.userAgent.toLowerCase();var c=function(a){return parseInt(a[1])*1000+parseInt(a[2])};if(function(){return b.indexOf(Bb)!=-1}())return Bb;if(function(){return b.indexOf(Cb)!=-1}())return Db;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=9}())return Fb;if(function(){return b.indexOf(Eb)!=-1&&m.documentMode>=8}())return Gb;if(function(){var a=/msie ([0-9]+)\.([0-9]+)/.exec(b);if(a&&a.length==3)return c(a)>=6000}())return Hb;if(function(){return b.indexOf(Ib)!=-1}())return Jb;return Kb};u[Ab]={gecko1_8:0,ie6:1,ie8:2,ie9:3,opera:4,safari:5};com_sap_sailing_gwt_ui_AdminConsole.onScriptLoad=function(){if(H){q=true;B()}};com_sap_sailing_gwt_ui_AdminConsole.onInjectionDone=function(){p=true;n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:Lb,millis:(new Date).getTime(),type:X});B()};D();C();var J;var K;if(A()){if(l.external&&(l.external.initModule&&l.external.initModule(P))){l.location.reload();return}K=Mb;J=O}n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:Nb});if(!A()){try{F([Bb],Ob);F([Fb],Pb);F([Gb],Qb);F([Hb],Rb);F([Jb],Sb);F([Db],Tb);J=w[G(Ab)];var L=J.indexOf(Ub);if(L!=-1){x=Number(J.substring(L+1));J=J.substring(0,L)}K=J+Vb}catch(a){return}}var M;function N(){if(!r){r=true;if(!__gwt_stylesLoaded[Wb]){var a=m.createElement(Xb);__gwt_stylesLoaded[Wb]=a;a.setAttribute(Yb,Zb);a.setAttribute($b,s+Wb);m.getElementsByTagName(_b)[0].appendChild(a)}B();if(m.removeEventListener){m.removeEventListener(ac,N,false)}if(M){clearInterval(M)}}}
if(m.addEventListener){m.addEventListener(ac,function(){I();N()},false)}var M=setInterval(function(){if(/loaded|complete/.test(m.readyState)){I();N()}},50);n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:R,millis:(new Date).getTime(),type:X});n&&n({moduleName:P,sessionId:o,subSystem:Q,evtGroup:Lb,millis:(new Date).getTime(),type:S});m.write(bc)}
com_sap_sailing_gwt_ui_AdminConsole();