Skip to content

Commit e8e89ed

Browse files
committed
Stops: permit to add a new stop if the potential osm matches are not satisfactory
1 parent f1b5f8d commit e8e89ed

File tree

2 files changed

+52
-27
lines changed

2 files changed

+52
-27
lines changed

GO_Sync/src/main/java/edu/usf/cutr/go_sync/gui/ReportViewer.java

+43-23
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,9 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
558558
tagKeys.addAll(aTags.keySet());
559559
}
560560
}
561-
if(selectedOsmStop!=null) tagKeys.addAll(selectedOsmStop.keySet());
561+
if (selectedOsmStop != null && !selectedOsmStop.getStopID().equals("New")) {
562+
tagKeys.addAll(selectedOsmStop.keySet());
563+
}
562564

563565
// set new size to the table
564566
stopTableModel = new TagReportTableModel(tagKeys.size()+2);
@@ -573,13 +575,16 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
573575
Stop finalSt = finalStops.get(selectedNewStop.getStopID());
574576
ArrayList<Boolean> finalCB = finalCheckboxes.get(selectedNewStop.getStopID());
575577

576-
if(selectedOsmStop!=null) {
578+
if (selectedOsmStop != null && !selectedOsmStop.getStopID().equals("New")) {
577579
stopTableModel.setRowValueAt(new Object[] {"lat", agencyStop.getLat(), finalCB.get(0), selectedOsmStop.getLat(), finalCB.get(1), finalSt.getLat()}, 0);
578580
stopTableModel.setRowValueAt(new Object[] {"lon", agencyStop.getLon(), finalCB.get(2), selectedOsmStop.getLon(), finalCB.get(3), finalSt.getLon()}, 1);
579581
} else {
580582
stopTableModel.setRowValueAt(new Object[] {"lat", agencyStop.getLat(), finalCB.get(0), "",finalCB.get(1), finalSt.getLat()}, 0);
581583
stopTableModel.setRowValueAt(new Object[] {"lon", agencyStop.getLon(), finalCB.get(2), "", finalCB.get(3), finalSt.getLon()}, 1);
582584
}
585+
586+
//tableIndex in index+2 because of lat and lon
587+
int tableIndex = 2;
583588
for(int i=0; i<tkeys.size(); i++){
584589
String k = tkeys.get(i);
585590
boolean osmCB = false, gtfsCB = false;
@@ -590,7 +595,9 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
590595
newValue = selectedNewStop.getTag(k);
591596
gtfsValue = (String)aTags.get(k);
592597
}
593-
if(selectedOsmStop!=null) osmValue = selectedOsmStop.getTag(k);
598+
if (selectedOsmStop != null && !selectedOsmStop.getStopID().equals("New")) {
599+
osmValue = selectedOsmStop.getTag(k);
600+
}
594601
//don't wipe extra tags for UPLOAD_CONFLICT, use GTFS values for missing tags for MODIFY;
595602
if (!(osmValue == null || osmValue.isEmpty()) &&
596603
(gtfsValue == null || gtfsValue.isEmpty()))
@@ -603,10 +610,11 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
603610
gtfsCB = true;
604611
newValue = gtfsValue;
605612
}
606-
//add tag to table, index+2 because of lat and lon
607-
if (finalStopsAccepted.containsKey(selectedNewStop.getStopID()) && selectedOsmStop!=null
608-
&& finalStopsAccepted.get(selectedNewStop.getStopID()).getOsmId().equals(selectedOsmStop.getOsmId())) {
609-
stopTableModel.setRowValueAt(new Object[]{k, gtfsValue, finalCB.get((i + 2) * 2), osmValue, finalCB.get((i + 2) * 2 + 1), finalSt.getTag(k)}, i + 2);
613+
// add tag to table
614+
if (finalStopsAccepted.containsKey(selectedNewStop.getStopID())
615+
&& selectedOsmStop != null
616+
&& finalStopsAccepted.get(selectedNewStop.getStopID()).getOsmId() != null && finalStopsAccepted.get(selectedNewStop.getStopID()).getOsmId().equals(selectedOsmStop.getOsmId())) {
617+
stopTableModel.setRowValueAt(new Object[]{k, gtfsValue, finalCB.get((tableIndex) * 2), osmValue, finalCB.get((tableIndex) * 2 + 1), finalSt.getTag(k)}, tableIndex);
610618
// if(selectedOsmStop!=null) osmValue = (String)selectedOsmStop.getTag(k);
611619
//
612620
// /* default to GTFS checked
@@ -626,17 +634,18 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
626634
// }
627635
// //add tag to table, index+2 because of lat and lon
628636
// if(selectedNewStop.getReportCategory().equals("UPLOAD_CONFLICT")) {
629-
// stopTableModel.setRowValueAt(new Object[] {k, gtfsValue, gtfsCheckValue, osmValue, osmCheckValue, newValue}, i+2);
637+
// stopTableModel.setRowValueAt(new Object[] {k, gtfsValue, gtfsCheckValue, osmValue, osmCheckValue, newValue}, tableIndex);
630638
//>>>>>>> 1a58b026a52d1271696dac9c53450d65f773cf06
631639
} else {
632-
stopTableModel.setRowValueAt(new Object[]{k, gtfsValue, gtfsCB, osmValue, osmCB, newValue}, i + 2);
640+
stopTableModel.setRowValueAt(new Object[]{k, gtfsValue, gtfsCB, osmValue, osmCB, newValue}, tableIndex);
633641
}
634642
/*
635643
if(selectedNewStop.getReportCategory().equals("UPLOAD_CONFLICT")) {
636-
stopTableModel.setRowValueAt(new Object[] {k, gtfsValue, true, osmValue, false, newValue}, i+2);
644+
stopTableModel.setRowValueAt(new Object[] {k, gtfsValue, true, osmValue, false, newValue}, tableIndex);
637645
} else {
638-
stopTableModel.setRowValueAt(new Object[] {k, gtfsValue, finalCB.get((i+2)*2), osmValue, finalCB.get((i+2)*2+1), finalSt.getTag(k)}, i+2);
646+
stopTableModel.setRowValueAt(new Object[] {k, gtfsValue, finalCB.get((tableIndex)*2), osmValue, finalCB.get((tableIndex)*2+1), finalSt.getTag(k)}, tableIndex);
639647
}*/
648+
tableIndex++;
640649
}
641650

642651
//set the column width with checkbox to minimum size
@@ -661,10 +670,10 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
661670
dataTable.getModel().addTableModelListener(this);
662671

663672
if(selectedNewStop.getReportCategory().equals("UPLOAD_NO_CONFLICT") && !finalStopsAccepted.containsKey(selectedNewStop.getStopID()))
664-
updateButtonTableStop("Accept", true, "Add", true);
673+
updateButtonTableStop("Accept", true, "Add", true);
665674
else
666675
updateButtonTableStop("Accept", true, "Save Change", false);
667-
if (selectedOsmStop!= null && usedOSMstops.containsKey(selectedOsmStop.getOsmId() )
676+
if (selectedOsmStop != null && !selectedOsmStop.getStopID().equals("New") && usedOSMstops.containsKey(selectedOsmStop.getOsmId())
668677
&& !usedOSMstops.get(selectedOsmStop.getOsmId()).getStopID().equals(agencyStop))
669678
// && !finalStopsAccepted.get(selectedNewStop.getStopID()).getOsmId().equals(selectedOsmStop.getOsmId())) // TODO allow changing osm matches
670679
updateButtonTableStop("Already Matched", false, "Already Matched", false);
@@ -673,7 +682,7 @@ private void updateStopTable(Stop selectedNewStop, Stop selectedOsmStop){
673682
// set last edited information
674683
String lastEditedUser = "N/A";
675684
String lastEditedDate = "N/A";
676-
if(selectedOsmStop!=null) {
685+
if (selectedOsmStop != null && !selectedOsmStop.getStopID().equals("New") && usedOSMstops.containsKey(selectedOsmStop.getOsmId())) {
677686
if(selectedOsmStop.getLastEditedOsmUser()!=null && !selectedOsmStop.getLastEditedOsmUser().equals(""))
678687
lastEditedUser = selectedOsmStop.getLastEditedOsmUser();
679688
if(selectedOsmStop.getLastEditedOsmDate()!=null && !selectedOsmStop.getLastEditedOsmDate().equals(""))
@@ -721,7 +730,13 @@ private void updateBusStop(Stop st){
721730
tableStopButton.setVisible(true);
722731
}
723732
*/
724-
osmStops = new Stop[osmEquiv.size()];
733+
if (st.getReportCategory().equals("UPLOAD_CONFLICT")) {
734+
// Add an entry that can be selected to create a new stop instead of using an existing OSM stop
735+
osmStops = new Stop[osmEquiv.size() + 1];
736+
} else {
737+
osmStops = new Stop[osmEquiv.size()];
738+
}
739+
725740
for(int i=0; i<osmEquiv.size(); i++){
726741
osmStops[i] = osmEquiv.get(i);
727742
tempStopsGeo.add(new GeoPosition(Double.parseDouble(osmStops[i].getLat()), Double.parseDouble(osmStops[i].getLon())));
@@ -739,6 +754,9 @@ private void updateBusStop(Stop st){
739754
} else {
740755
updateStopTable(st, null);
741756
}
757+
if (st.getReportCategory().equals("UPLOAD_CONFLICT")) {
758+
osmStops[osmStops.length - 1] = new Stop("New", "", "", "", ""); // Set a null stop, which will be interpreted as "create a new stop, don't use an existing one"
759+
}
742760
} else {
743761
updateStopTable(st, null);
744762
}
@@ -902,7 +920,7 @@ public void paint(Graphics2D g, JXMapViewer map, int w, int h) {
902920

903921
private void addSelectedStopsOverlay(Stop gtfsStop, Stop osmStop){
904922
boolean isOverlapped=false;
905-
if(gtfsStop!=null && osmStop!=null){
923+
if (gtfsStop != null && osmStop != null && !osmStop.getStopID().equals("New")) {
906924
if(OsmDistance.distVincenty(gtfsStop.getLat(), gtfsStop.getLon(), osmStop.getLat(), osmStop.getLon())<10){
907925
isOverlapped=true;
908926
}
@@ -937,7 +955,7 @@ public void paint(Graphics2D g, JXMapViewer map, int w, int h) {
937955
selectedGtfsOverlayPainter = null;
938956
}*/
939957

940-
if(osmStop!=null){
958+
if (osmStop != null && !osmStop.getStopID().equals("New")) {
941959
final Stop tempStop = new Stop(osmStop);
942960
selectedOsmOverlayPainter = new Painter<JXMapViewer>() {
943961
public void paint(Graphics2D g, JXMapViewer map, int w, int h) {
@@ -1259,12 +1277,13 @@ private void generateStopsToUpload(Hashtable<String, Stop> stops){
12591277
for(int i=0; i<stopIds.size(); i++){
12601278
Stop s = stops.get(stopIds.get(i));
12611279
String category = s.getReportCategory();
1262-
if(category.equals("UPLOAD_NO_CONFLICT")){
1280+
if (s.getOsmId() == null) {
1281+
upload.add(s);
1282+
} else if (category.equals("UPLOAD_NO_CONFLICT")) {
12631283
upload.add(s);
12641284
}
12651285
else if(category.equals("UPLOAD_CONFLICT") && acceptedOnlyCheckbox.isSelected()){
12661286
modify.add(s);
1267-
12681287
}
12691288
else if(category.equals("UPLOAD_CONFLICT")){
12701289
// upload the new stop
@@ -2650,7 +2669,7 @@ private void tableStopButtonActionPerformed(java.awt.event.ActionEvent evt) {//G
26502669

26512670
// Save to final Stops
26522671
Stop st = saveAcceptedDataToFinalStops(selectedGtfs);
2653-
if (selectedOSMStop!= null) {
2672+
if (selectedOSMStop != null && !selectedOSMStop.getStopID().equals("New")) {
26542673
st.setOsmId(selectedOSMStop.getOsmId());
26552674
usedOSMstops.put(selectedOSMStop.getOsmId(),st); //TODO do this properly
26562675
//broken
@@ -2665,7 +2684,8 @@ private void tableStopButtonActionPerformed(java.awt.event.ActionEvent evt) {//G
26652684
if(tableStopButtonText.contains("Accept") || tableStopButtonText.contains("Add"))
26662685
{
26672686
if ( !selectedGtfsStop.getReportCategory().equals("MODIFY")
2668-
&& !selectedGtfsStop.getReportCategory().equals("UPLOAD_NO_CONFLICT") )
2687+
&& !selectedGtfsStop.getReportCategory().equals("UPLOAD_NO_CONFLICT")
2688+
&& selectedOSMStop!= null && !selectedOSMStop.getStopID().equals("New"))
26692689
{
26702690

26712691
selectedGtfsStop.setOsmId(selectedOSMStop.getOsmId());
@@ -2698,7 +2718,7 @@ private void tableStopButtonActionPerformed(java.awt.event.ActionEvent evt) {//G
26982718
Stop st = saveAcceptedDataToFinalStops(selectedGtfs);
26992719
Stop selectedOsmStop = (Stop) osmStopsComboBox.getSelectedItem();
27002720
// set osmId and version number
2701-
if (selectedOsmStop != null) {
2721+
if (selectedOsmStop != null && !selectedOsmStop.getStopID().equals("New")) {
27022722
if (st.getOsmId() == null) {
27032723
st.setOsmId(selectedOsmStop.getOsmId());
27042724
}
@@ -2744,7 +2764,7 @@ private void tableStopButtonActionPerformed(java.awt.event.ActionEvent evt) {//G
27442764
if(selectedNewStop.getReportCategory().equals("UPLOAD_NO_CONFLICT") && !finalStopsAccepted.containsKey(selectedNewStop.getStopID()))
27452765
updateButtonTableStop("Accept", true, "Add", true);
27462766
} else */if(selectedNewStop.getReportCategory().equals("UPLOAD_NO_CONFLICT") && !finalStopsAccepted.containsKey(selectedNewStop.getStopID()))
2747-
updateButtonTableStop("Accept", true, "Add", true);
2767+
updateButtonTableStop("Accept", true, "Add", true);
27482768
else
27492769
{
27502770
updateButtonTableStop("Accept", true, "Save Change", false);

GO_Sync/src/main/java/edu/usf/cutr/go_sync/object/Stop.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -135,17 +135,22 @@ else if ((this.getOperatorName().equals("none")) && (o.getOperatorName().equals(
135135

136136
public int compareTo(Object o){
137137
Stop s = (Stop) o;
138-
double distance = OsmDistance.distVincenty(this.getLat(), this.getLon(),
139-
s.getLat(), s.getLon());
140138
if (!(this.getStopID().equals("none")) && !(this.getStopID().equals("missing"))
141139
&& (!(s.getStopID().equals("none"))) && (!(s.getStopID().equals("missing")))
140+
&& (!(this.getStopID().equals("New"))) && (!(s.getStopID().equals("New")))
142141
&& (!this.getOperatorName().equals("none")) && (!s.getOperatorName().equals("none"))
143142
&& (!this.getOperatorName().equals("missing")) && (!s.getOperatorName().equals("missing"))) {
144143
if ((s.getStopID().equals(this.getStopID())) && (this.compareOperatorName(s))) {
145144
return 0;
146145
}
147-
}
148-
else {
146+
} else if (this.getStopID().equals("New") || s.getStopID().equals("New")) {
147+
if ((s.getStopID().equals(this.getStopID()))) {
148+
return 0;
149+
}
150+
return 1;
151+
} else {
152+
double distance = OsmDistance.distVincenty(this.getLat(), this.getLon(),
153+
s.getLat(), s.getLon());
149154
if (distance < ERROR_TO_ZERO) {
150155
return 0;
151156
}

0 commit comments

Comments
 (0)