# formatting + naming

This commit is contained in:
Lukas Niemeier
2013-03-03 19:12:48 +01:00
parent ef71fe0455
commit afc7e6c352
3 changed files with 239 additions and 305 deletions
@@ -9,31 +9,31 @@ import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.racecommittee.app.domain.state.RaceLogChangedListener;
public class RaceLogChangedVisitor implements RaceLogEventVisitor {
private RaceLogChangedListener listener;
public RaceLogChangedVisitor(RaceLogChangedListener listener) {
this.listener = listener;
}
private RaceLogChangedListener listener;
public void visit(RaceLogFlagEvent event) {
listener.eventAdded(event);
}
public RaceLogChangedVisitor(RaceLogChangedListener listener) {
this.listener = listener;
}
public void visit(RaceLogPassChangeEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogFlagEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogRaceStatusEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogPassChangeEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogStartTimeEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogRaceStatusEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogCourseAreaChangedEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogStartTimeEvent event) {
listener.eventAdded(event);
}
public void visit(RaceLogCourseAreaChangedEvent event) {
listener.eventAdded(event);
}
}
@@ -79,7 +79,6 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
}
public void setStartTime(TimePoint eventTime, TimePoint newStartTime) {
RaceLogRaceStatus status = getStatus();
if (status != RaceLogRaceStatus.UNSCHEDULED) {
abortRace(eventTime.minus(1));
@@ -35,305 +35,240 @@ import com.sap.sailing.racecommittee.app.ui.comparators.SeriesComparator;
public class ManagedRaceListFragment extends ListFragment implements JuryFlagClickedListener, RaceStateChangedListener {
private Serializable selectedRaceId;
private HashMap<Serializable, ManagedRace> managedRacesById;
private RaceListAdapter adapter;
private ArrayList<RaceListDataType> raceDataTypeList;
public ManagedRaceListFragment() {
this.selectedRaceId = null;
this.managedRacesById = new HashMap<Serializable, ManagedRace>();
this.raceDataTypeList = new ArrayList<RaceListDataType>();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// pass the localized string to the data elements...
RaceListDataTypeElement.initializeTemplates(this);
private Serializable selectedRaceId;
private HashMap<Serializable, ManagedRace> managedRacesById;
private RaceListAdapter adapter;
private ArrayList<RaceListDataType> raceDataTypeList;
adapter = new RaceListAdapter(
getActivity(),
R.layout.welter_two_row_no_image,
raceDataTypeList,
this);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
setListAdapter(adapter);
adapter.getFilter().filter("");
}
@Override
public void onStart() {
super.onStart();
unregisterAllRaces();
registerAllRaces();
}
@Override
public void onStop() {
unregisterAllRaces();
super.onStop();
}
public ManagedRaceListFragment() {
this.selectedRaceId = null;
this.managedRacesById = new HashMap<Serializable, ManagedRace>();
this.raceDataTypeList = new ArrayList<RaceListDataType>();
}
private void registerAllRaces() {
for (ManagedRace managedRace : managedRacesById.values()) {
managedRace.getState().registerListener(this);
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// pass the localized string to the data elements...
RaceListDataTypeElement.initializeTemplates(this);
private void unregisterAllRaces() {
for (ManagedRace managedRace : managedRacesById.values()) {
managedRace.getState().unregisterListener(this);
}
}
adapter = new RaceListAdapter(getActivity(), R.layout.welter_two_row_no_image, raceDataTypeList, this);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
setListAdapter(adapter);
adapter.getFilter().filter("");
}
public void setupOn(Collection<ManagedRace> listOfManagedRaces) {
unregisterAllRaces();
managedRacesById.clear();
for (ManagedRace managedRace : listOfManagedRaces) {
managedRacesById.put(managedRace.getId(), managedRace);
}
registerAllRaces();
@Override
public void onStart() {
super.onStart();
unregisterAllRaces();
registerAllRaces();
}
// initialize view
initListElements(false);
if (adapter != null) {
adapter.getFilter().filter("");
adapter.notifyDataSetChanged();
}
}
@Override
public void onStop() {
unregisterAllRaces();
super.onStop();
}
public void onRaceStateChanged(RaceState state) {
notifyDataChanged();
}
private BoatClass getBoatClassForRace(ManagedRace managedRace) {
if (managedRace.getRaceGroup().getBoatClass() == null) {
return new BoatClassImpl(managedRace.getRaceGroup().getName(), false);
}
return managedRace.getRaceGroup().getBoatClass();
}
private void initListElements(boolean clearFirst) {
HashMap<Serializable, RaceLogRaceStatus> savedStates = new HashMap<Serializable, RaceLogRaceStatus>();
if (clearFirst) {
// we have to save the previous states of the elements
for (RaceListDataType r : raceDataTypeList) {
if (r instanceof RaceListDataTypeElement) {
RaceListDataTypeElement el = (RaceListDataTypeElement) r;
savedStates.put(el.getRace().getId(), el.getPreviousRaceStatus());
}
}
raceDataTypeList.clear();
}
TreeMap<BoatClassSeriesDataFleet, List<ManagedRace>> raceListHashMap =
new TreeMap<BoatClassSeriesDataFleet, List<ManagedRace>>(new SeriesComparator());
if (managedRacesById != null) {
// Group Managed Races by boat class and group
for (ManagedRace m : managedRacesById.values()) {
BoatClassSeriesDataFleet ser = new BoatClassSeriesDataFleet(
getBoatClassForRace(m),
m.getSeries(),
m.getFleet());
private void registerAllRaces() {
for (ManagedRace managedRace : managedRacesById.values()) {
managedRace.getState().registerListener(this);
}
}
if (raceListHashMap.containsKey(ser)) {
raceListHashMap.get(ser).add(m);
} else {
List<ManagedRace> lmr = new LinkedList<ManagedRace>();
lmr.add(m);
raceListHashMap.put(ser, lmr);
}
private void unregisterAllRaces() {
for (ManagedRace managedRace : managedRacesById.values()) {
managedRace.getState().unregisterListener(this);
}
}
}
public void setupOn(Collection<ManagedRace> listOfManagedRaces) {
unregisterAllRaces();
managedRacesById.clear();
for (ManagedRace managedRace : listOfManagedRaces) {
managedRacesById.put(managedRace.getId(), managedRace);
}
registerAllRaces();
for (BoatClassSeriesDataFleet key : raceListHashMap.navigableKeySet()) {
List<ManagedRace> mrl = raceListHashMap.get(key);
Collections.sort(mrl, new NamedRaceComparator());
// initialize view
initListElements(false);
raceDataTypeList.add(new RaceListDataTypeTitle(key));
if (adapter != null) {
adapter.getFilter().filter("");
adapter.notifyDataSetChanged();
}
}
for (ManagedRace mr : mrl) {
RaceListDataTypeElement dataElement = new RaceListDataTypeElement(mr);
if (savedStates.containsKey(mr.getId())) {
dataElement.setPreviousRaceStatus(savedStates.get(mr.getId()));
}
raceDataTypeList.add(dataElement);
}
}
}
}
@Override
public void onListItemClick(ListView listView, View view, int position, long id) {
super.onListItemClick(listView, view, position, id);
RaceListDataType selectedItem = adapter.getItem(position);
if (selectedItem instanceof RaceListDataTypeElement) {
RaceListDataTypeElement selectedElement = (RaceListDataTypeElement) selectedItem;
selectedElement.setUpdateIndicator(false);
((ImageView) view.findViewById(R.id.Welter_Cell_UpdateLabel)).setVisibility(View.GONE);
ManagedRace selectedRace = selectedElement.getRace();
this.selectedRaceId = selectedRace.getId();
ExLog.i(
ExLog.RACE_SELECTED_ELEMENT,
selectedRace.getId() + " " + selectedRace.getStatus(),
getActivity());
((RacingActivity) getActivity()).onRaceItemClicked(selectedRace);
} else if (selectedItem instanceof RaceListDataTypeTitle) {
RaceListDataTypeTitle selectedTitle = (RaceListDataTypeTitle) selectedItem;
ExLog.i(
ExLog.RACE_SELECTED_TITLE,
selectedTitle.toString(),
getActivity());
}
}
public void notifyDataChanged() {
List<RaceListDataType> list = adapter.getItems();
for (int i = 0; i < list.size(); ++i) {
if (list.get(i) instanceof RaceListDataTypeElement) {
RaceListDataTypeElement listElement = (RaceListDataTypeElement) list.get(i);
ManagedRace mr = this.managedRacesById.get(listElement.getRace().getId());
if (mr != null) {
if (!listElement.getPreviousRaceStatus().name().equals(mr.getStatus().name())) {
listElement.setRace(mr);
if (!listElement.getRace().getId().equals(this.selectedRaceId)) {
listElement.setUpdateIndicator(true);
}
/// TODO: StaticVibrator.vibrate(1000);
}
}
}
}
if (adapter != null) {
adapter.getFilter().filter("");
adapter.notifyDataSetChanged();
}
}
public void onRaceStateChanged(RaceState state) {
notifyDataChanged();
}
public void onJuryFlagClicked(BoatClassSeriesDataFleet clicked) {
/// TODO: implement.
}
/*
public void notifyDataChanged() {
List<RaceListDataType> list = adapter.getItems();
for (int i = 0; i < list.size(); ++i) {
if (list.get(i) instanceof RaceListDataTypeElement) {
RaceListDataTypeElement listElement = (RaceListDataTypeElement) list.get(i);
ManagedRace mr = managedRacesMap.get(listElement.getRace().getId());
if (mr != null) {
if (!listElement.getPreviousRaceStatus().name().equals(mr.getStatus().name())) {
listElement.setRace(mr);
if (!listElement.getRace().getId().equals(selectedRaceId)) {
listElement.setUpdateIndicator(true);
}
StaticVibrator.vibrate(1000);
}
}
}
}
if (adapter != null) {
adapter.getFilter().filter("");
adapter.notifyDataSetChanged();
}
}
private BoatClass getBoatClassForRace(ManagedRace managedRace) {
if (managedRace.getRaceGroup().getBoatClass() == null) {
return new BoatClassImpl(managedRace.getRaceGroup().getName(), false);
}
return managedRace.getRaceGroup().getBoatClass();
}
public void onJuryFlagClicked(final Group group) {
TimePickerDialog dialog = createJuryDialog(group);
dialog.setIcon(R.drawable.ic_dialog_alert_holo_light);
dialog.setTitle(getString(R.string.protest_dialog_title));
dialog.show();
}
private void initListElements(boolean clearFirst) {
private TimePickerDialog createJuryDialog(final Group group) {
// TODO: remove this hack!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
boolean hasFinishTime = false;
Date latestFinish = new Date(0);
for (Race race : group.getRaces()) {
FlagRacingEvent latestFinishEvent = new FlagRacingEvent(false, Flags.NONE, new Date(0), 0);
for (RacingEvent event : race.getEventLog()) {
if (event instanceof FlagRacingEvent) {
FlagRacingEvent flagEvent = (FlagRacingEvent) event;
if (flagEvent.getUpperFlag().equals(Flags.BLUE) && !flagEvent.isDisplayed()) {
if (latestFinishEvent.getTimeStamp().before(flagEvent.getTimeStamp())) {
latestFinishEvent = flagEvent;
}
}
}
}
if (latestFinish.before(latestFinishEvent.getTimeStamp())) {
latestFinish = latestFinishEvent.getTimeStamp();
hasFinishTime = true;
}
}
final Calendar presetJuryTime = Calendar.getInstance();
if (hasFinishTime) {
presetJuryTime.setTime(latestFinish);
} else {
Calendar now = Calendar.getInstance();
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
presetJuryTime.setTime(now.getTime());
}
// we always add one minute to round the time
// so jury event is after finish event
presetJuryTime.add(Calendar.MINUTE, 1);
TimePickerDialog dialog = new TimePickerDialog(getActivity(), new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Date protestStartDateTime = getStartOfProtestTime(hourOfDay, minute);
displayJuryFlag(group, new Date(), protestStartDateTime);
}
}, presetJuryTime.get(Calendar.HOUR_OF_DAY), presetJuryTime.get(Calendar.MINUTE), true);
return dialog;
}
private Date getStartOfProtestTime(int hourOfDay, int minute) {
Calendar now = Calendar.getInstance();
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
Date pickedDate = (Date)now.getTime().clone();
pickedDate.setHours(hourOfDay);
pickedDate.setMinutes(minute);
HashMap<Serializable, RaceLogRaceStatus> savedStates = new HashMap<Serializable, RaceLogRaceStatus>();
if (clearFirst) {
// we have to save the previous states of the elements
for (RaceListDataType r : raceDataTypeList) {
if (r instanceof RaceListDataTypeElement) {
RaceListDataTypeElement el = (RaceListDataTypeElement) r;
savedStates.put(el.getRace().getId(), el.getPreviousRaceStatus());
}
}
raceDataTypeList.clear();
}
return pickedDate;
}
TreeMap<BoatClassSeriesDataFleet, List<ManagedRace>> raceListHashMap = new TreeMap<BoatClassSeriesDataFleet, List<ManagedRace>>(
new SeriesComparator());
if (managedRacesById != null) {
private void displayJuryFlag(Group group, Date eventTime, Date protestTime) {
for (ManagedRace race : managedRacesMap.values()) {
if (!race.getGroup().equals(group)) {
continue;
}
if (race.getStatus().equals(SimpleRaceStatus.FINISHED)) {
race.displayJuryFlag(eventTime, protestTime);
}
}
Toast.makeText(getActivity(), String.format(getString(R.string.protest_flag_set), group.getName()), Toast.LENGTH_LONG).show();
}*/
// Group Managed Races by boat class and group
for (ManagedRace m : managedRacesById.values()) {
BoatClassSeriesDataFleet ser = new BoatClassSeriesDataFleet(getBoatClassForRace(m), m.getSeries(),
m.getFleet());
if (raceListHashMap.containsKey(ser)) {
raceListHashMap.get(ser).add(m);
} else {
List<ManagedRace> lmr = new LinkedList<ManagedRace>();
lmr.add(m);
raceListHashMap.put(ser, lmr);
}
}
for (BoatClassSeriesDataFleet key : raceListHashMap.navigableKeySet()) {
List<ManagedRace> mrl = raceListHashMap.get(key);
Collections.sort(mrl, new NamedRaceComparator());
raceDataTypeList.add(new RaceListDataTypeTitle(key));
for (ManagedRace mr : mrl) {
RaceListDataTypeElement dataElement = new RaceListDataTypeElement(mr);
if (savedStates.containsKey(mr.getId())) {
dataElement.setPreviousRaceStatus(savedStates.get(mr.getId()));
}
raceDataTypeList.add(dataElement);
}
}
}
}
@Override
public void onListItemClick(ListView listView, View view, int position, long id) {
super.onListItemClick(listView, view, position, id);
RaceListDataType selectedItem = adapter.getItem(position);
if (selectedItem instanceof RaceListDataTypeElement) {
RaceListDataTypeElement selectedElement = (RaceListDataTypeElement) selectedItem;
selectedElement.setUpdateIndicator(false);
((ImageView) view.findViewById(R.id.Welter_Cell_UpdateLabel)).setVisibility(View.GONE);
ManagedRace selectedRace = selectedElement.getRace();
this.selectedRaceId = selectedRace.getId();
ExLog.i(ExLog.RACE_SELECTED_ELEMENT, selectedRace.getId() + " " + selectedRace.getStatus(), getActivity());
((RacingActivity) getActivity()).onRaceItemClicked(selectedRace);
} else if (selectedItem instanceof RaceListDataTypeTitle) {
RaceListDataTypeTitle selectedTitle = (RaceListDataTypeTitle) selectedItem;
ExLog.i(ExLog.RACE_SELECTED_TITLE, selectedTitle.toString(), getActivity());
}
}
public void notifyDataChanged() {
List<RaceListDataType> list = adapter.getItems();
for (int i = 0; i < list.size(); ++i) {
if (list.get(i) instanceof RaceListDataTypeElement) {
RaceListDataTypeElement listElement = (RaceListDataTypeElement) list.get(i);
ManagedRace mr = this.managedRacesById.get(listElement.getRace().getId());
if (mr != null) {
if (!listElement.getPreviousRaceStatus().name().equals(mr.getStatus().name())) {
listElement.setRace(mr);
if (!listElement.getRace().getId().equals(this.selectedRaceId)) {
listElement.setUpdateIndicator(true);
}
// / TODO: StaticVibrator.vibrate(1000);
}
}
}
}
if (adapter != null) {
adapter.getFilter().filter("");
adapter.notifyDataSetChanged();
}
}
public void onJuryFlagClicked(BoatClassSeriesDataFleet clicked) {
// / TODO: implement.
}
/*
*
* public void notifyDataChanged() { List<RaceListDataType> list = adapter.getItems(); for (int i = 0; i <
* list.size(); ++i) { if (list.get(i) instanceof RaceListDataTypeElement) { RaceListDataTypeElement listElement =
* (RaceListDataTypeElement) list.get(i); ManagedRace mr = managedRacesMap.get(listElement.getRace().getId()); if
* (mr != null) { if (!listElement.getPreviousRaceStatus().name().equals(mr.getStatus().name())) {
* listElement.setRace(mr);
*
* if (!listElement.getRace().getId().equals(selectedRaceId)) { listElement.setUpdateIndicator(true); }
* StaticVibrator.vibrate(1000); }
*
* } } } if (adapter != null) { adapter.getFilter().filter(""); adapter.notifyDataSetChanged(); } }
*
*
* public void onJuryFlagClicked(final Group group) {
*
* TimePickerDialog dialog = createJuryDialog(group); dialog.setIcon(R.drawable.ic_dialog_alert_holo_light);
* dialog.setTitle(getString(R.string.protest_dialog_title)); dialog.show(); }
*
* private TimePickerDialog createJuryDialog(final Group group) {
*
* // TODO: remove this hack!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! boolean hasFinishTime =
* false; Date latestFinish = new Date(0); for (Race race : group.getRaces()) { FlagRacingEvent latestFinishEvent =
* new FlagRacingEvent(false, Flags.NONE, new Date(0), 0); for (RacingEvent event : race.getEventLog()) { if (event
* instanceof FlagRacingEvent) { FlagRacingEvent flagEvent = (FlagRacingEvent) event; if
* (flagEvent.getUpperFlag().equals(Flags.BLUE) && !flagEvent.isDisplayed()) { if
* (latestFinishEvent.getTimeStamp().before(flagEvent.getTimeStamp())) { latestFinishEvent = flagEvent; } } } } if
* (latestFinish.before(latestFinishEvent.getTimeStamp())) { latestFinish = latestFinishEvent.getTimeStamp();
* hasFinishTime = true; } }
*
* final Calendar presetJuryTime = Calendar.getInstance();
*
* if (hasFinishTime) { presetJuryTime.setTime(latestFinish); } else { Calendar now = Calendar.getInstance();
* now.set(Calendar.SECOND, 0); now.set(Calendar.MILLISECOND, 0); presetJuryTime.setTime(now.getTime()); } // we
* always add one minute to round the time // so jury event is after finish event
* presetJuryTime.add(Calendar.MINUTE, 1);
*
* TimePickerDialog dialog = new TimePickerDialog(getActivity(), new OnTimeSetListener() {
*
* public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Date protestStartDateTime =
* getStartOfProtestTime(hourOfDay, minute); displayJuryFlag(group, new Date(), protestStartDateTime); }
*
* }, presetJuryTime.get(Calendar.HOUR_OF_DAY), presetJuryTime.get(Calendar.MINUTE), true); return dialog; }
*
* private Date getStartOfProtestTime(int hourOfDay, int minute) { Calendar now = Calendar.getInstance();
* now.set(Calendar.SECOND, 0); now.set(Calendar.MILLISECOND, 0);
*
* Date pickedDate = (Date)now.getTime().clone(); pickedDate.setHours(hourOfDay); pickedDate.setMinutes(minute);
*
* return pickedDate; }
*
* private void displayJuryFlag(Group group, Date eventTime, Date protestTime) { for (ManagedRace race :
* managedRacesMap.values()) { if (!race.getGroup().equals(group)) { continue; } if
* (race.getStatus().equals(SimpleRaceStatus.FINISHED)) { race.displayJuryFlag(eventTime, protestTime); } }
* Toast.makeText(getActivity(), String.format(getString(R.string.protest_flag_set), group.getName()),
* Toast.LENGTH_LONG).show(); }
*/
}