- Fixing a mjaor issue when importing master data from a legacy server (--> with MadiaTrack.assignedRace being de-serialized as null)

- Minor refactorings and clean ups
This commit is contained in:
Jens Rommel committed 2014-09-27 14:00:14 +02:00
1 parent e92c74ea49
commit 025fb7b2eb
6 files changed
+47 -25

No files matched your search

@@ -95,12 +95,12 @@ public class MediaTrack implements Serializable {
public MediaTrack(String title, String url, TimePoint startTime, Duration duration, MimeType mimeType,
Set<RegattaAndRaceIdentifier> assignedRaces) {
this();
this.title = title;
this.url = url;
this.startTime = startTime;
this.duration = duration;
this.mimeType = mimeType;
this.assignedRaces = new HashSet<RegattaAndRaceIdentifier>();
if (assignedRaces != null) {
this.assignedRaces.addAll(assignedRaces);
}
@@ -205,16 +205,18 @@ public class MediaDBImpl implements MediaDB {
}
@Override
public void updateRace(String dbId, Set<RegattaAndRaceIdentifier> regattasAndRaces) {
public void updateRace(String dbId, Set<RegattaAndRaceIdentifier> assignedRaces) {
BasicDBObject updateQuery = new BasicDBObject();
updateQuery.append(DbNames.Fields._id.name(), new ObjectId(dbId));
BasicDBList objectList = new BasicDBList();
for (RegattaAndRaceIdentifier regattaAndRace : regattasAndRaces) {
BasicDBObject object = new BasicDBObject();
object.put(DbNames.Fields.REGATTA_NAME.name(), regattaAndRace.getRegattaName());
object.put(DbNames.Fields.RACE_NAME.name(), regattaAndRace.getRaceName());
objectList.add(object);
if (assignedRaces != null) {
for (RegattaAndRaceIdentifier assignedRace : assignedRaces) {
BasicDBObject object = new BasicDBObject();
object.put(DbNames.Fields.REGATTA_NAME.name(), assignedRace.getRegattaName());
object.put(DbNames.Fields.RACE_NAME.name(), assignedRace.getRaceName());
objectList.add(object);
}
}
BasicDBObject updateCommand = new BasicDBObject();
updateCommand.append("$set", new BasicDBObject(DbNames.Fields.ASSIGNED_RACES.name(), objectList));
@@ -174,19 +174,16 @@ public class MediaMultiSelectionControl extends AbstractMediaSelectionControl im
private ToggleButton createConnectButton(final MediaTrack videoTrack) {
final ToggleButton connectButton = new ToggleButton();
connectButton.setValue(videoTrack.assignedRaces
.contains(((MediaPlayerManagerComponent) mediaPlayerManager).getRaceIdentifier()));
.contains(mediaPlayerManager.getCurrentRace()));
connectButton.setTitle("Connect video to this race");
connectButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> changeEvent) {
if (connectButton.isDown()) {
connectVideoToRace(videoTrack);
setEnableOfVideoTrack(connectButton, true);
connectVideoToRace(videoTrack, connectButton);
} else {
disconnectVideoFromRace(videoTrack);
setEnableOfVideoTrack(connectButton, false);
mediaPlayerManager.closeFloatingVideo(videoTrack);
disconnectVideoFromRace(videoTrack, connectButton);
}
}
});
@@ -205,31 +202,36 @@ public class MediaMultiSelectionControl extends AbstractMediaSelectionControl im
}
}
private void disconnectVideoFromRace(final MediaTrack videoTrack) {
videoTrack.assignedRaces.remove(((MediaPlayerManagerComponent)mediaPlayerManager).getRaceIdentifier());
((MediaPlayerManagerComponent)mediaPlayerManager).getMediaService().updateRace(videoTrack, new AsyncCallback<Void>() {
private void disconnectVideoFromRace(final MediaTrack videoTrack, final ToggleButton connectButton) {
videoTrack.assignedRaces.remove(mediaPlayerManager.getCurrentRace());
mediaPlayerManager.getMediaService().updateRace(videoTrack, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
mediaPlayerManager.getErrorReporter().reportError(t.toString());
}
@Override
public void onSuccess(Void allMediaTracks) {
setEnableOfVideoTrack(connectButton, false);
mediaPlayerManager.closeFloatingVideo(videoTrack);
}
});
}
private void connectVideoToRace(final MediaTrack videoTrack) {
videoTrack.assignedRaces.add(((MediaPlayerManagerComponent)mediaPlayerManager).getRaceIdentifier());
((MediaPlayerManagerComponent)mediaPlayerManager).getMediaService().updateRace(videoTrack, new AsyncCallback<Void>() {
private void connectVideoToRace(final MediaTrack videoTrack, final ToggleButton connectButton) {
videoTrack.assignedRaces.add(mediaPlayerManager.getCurrentRace());
mediaPlayerManager.getMediaService().updateRace(videoTrack, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable t) {
mediaPlayerManager.getErrorReporter().reportError(t.toString());
}
@Override
public void onSuccess(Void allMediaTracks) {
setEnableOfVideoTrack(connectButton, true);
}
});
}
@@ -4,7 +4,10 @@ import java.util.Collection;
import java.util.List;
import java.util.Set;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
public interface MediaPlayerManager {
@@ -57,5 +60,11 @@ public interface MediaPlayerManager {
UserAgentDetails getUserAgent();
RegattaAndRaceIdentifier getCurrentRace();
MediaServiceAsync getMediaService();
ErrorReporter getErrorReporter();
}
@@ -91,8 +91,8 @@ public class MediaPlayerManagerComponent implements Component<Void>, PlayStateLi
this.raceTimer.addPlayStateListener(this);
this.raceTimer.addTimeListener(this);
this.mediaService = mediaService;
mediaService.getMediaTracksForRace(this.getRaceIdentifier(), getAssignedMediaCallback());
mediaService.getMediaTracksInTimeRange(this.getRaceIdentifier(), getOverlappingMediaCallback());
mediaService.getMediaTracksForRace(this.getCurrentRace(), getAssignedMediaCallback());
mediaService.getMediaTracksInTimeRange(this.getCurrentRace(), getOverlappingMediaCallback());
this.stringMessages = stringMessages;
this.errorReporter = errorReporter;
this.userAgent = userAgent;
@@ -510,7 +510,7 @@ public class MediaPlayerManagerComponent implements Component<Void>, PlayStateLi
}
private TimePoint getRaceStartTime() {
Date startOfRace = raceTimesInfoProvider.getRaceTimesInfo(getRaceIdentifier()).startOfRace;
Date startOfRace = raceTimesInfoProvider.getRaceTimesInfo(getCurrentRace()).startOfRace;
if (startOfRace != null) {
return new MillisecondsTimePoint(startOfRace);
} else {
@@ -609,7 +609,7 @@ public class MediaPlayerManagerComponent implements Component<Void>, PlayStateLi
TimePoint raceStartTime = getRaceStartTime();
TimePoint defaultStartTime = raceStartTime;
NewMediaDialog dialog = new NewMediaDialog(defaultStartTime, MediaPlayerManagerComponent.this.stringMessages,
this.getRaceIdentifier(), new DialogCallback<MediaTrack>() {
this.getCurrentRace(), new DialogCallback<MediaTrack>() {
@Override
public void cancel() {
@@ -779,12 +779,19 @@ public class MediaPlayerManagerComponent implements Component<Void>, PlayStateLi
return userAgent;
}
public RegattaAndRaceIdentifier getRaceIdentifier() {
@Override
public RegattaAndRaceIdentifier getCurrentRace() {
return raceIdentifier;
}
@Override
public MediaServiceAsync getMediaService() {
return mediaService;
}
@Override
public ErrorReporter getErrorReporter() {
return errorReporter;
}
}
@@ -225,7 +225,9 @@ class MediaLibrary {
if (mediaTrack != null) {
updateMapByRace_Remove(mediaTrack); //Cannot use updateCache_Update method, because race is changed
mediaTrack.assignedRaces.clear();
mediaTrack.assignedRaces.addAll(changedMediaTrack.assignedRaces);
if (changedMediaTrack.assignedRaces != null) { //safety check for imports from legacy installations which have no assignedRaces field
mediaTrack.assignedRaces.addAll(changedMediaTrack.assignedRaces);
}
updateMapByRace_Add(mediaTrack);
}
} finally {