Ignore:
Timestamp:
2009-06-03T01:31:58+02:00 (16 years ago)
Author:
rcernoch
Message:

Reasoner and Conflict resolver now work. The current version is still unstable, but already usable.

Location:
applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/AddressElement.java

    r15461 r15558  
    1616 * @author Radomír Černoch radomir.cernoch@gmail.com
    1717 */
    18 public abstract class AddressElement {
     18public abstract class AddressElement implements Comparable<AddressElement> {
    1919
    2020    protected String name;
    2121    protected AddressElement parent = null;
    22 
    23     protected static final String KEY_ADDR_CP      = "addr:alternatenumber";
    24     protected static final String KEY_ADDR_CO      = "addr:housenumber";
    25     protected static final String KEY_ADDR_STREET  = "addr:street";
    26     protected static final String KEY_ADDR_CITY    = "addr:city";
    27     protected static final String KEY_ADDR_COUNTRY = "addr:country";
    28     protected static final String KEY_IS_IN        = "is_in";
    29     protected static final String KEY_NAME         = "name";
    3022
    3123    /**
     
    199191                elemValue.trim().toUpperCase())) ? 1 : -1;
    200192    }
    201    
     193
     194    public static int matchFieldAbbrev(String elemValue, String primValue) {
     195
     196        if (elemValue == null) return  0;
     197        if (primValue == null) return -1;
     198
     199        return StringUtils.matchAbbrev(primValue, elemValue) ? 1 : -1;
     200    }
     201
    202202   
    203203    protected int[] getFieldMatchList(OsmPrimitive primitive) {
     
    211211    }
    212212
    213     public boolean isMatchable(OsmPrimitive prim) {
    214         return false;
    215     }
    216 
    217    
    218213    public int getMatchQuality(OsmPrimitive primitive) {
    219214       
     
    278273        return result;
    279274    }
     275
     276    public int compareTo(AddressElement elem) {
     277
     278        ParentResolver r1 = new ParentResolver(this);
     279        ParentResolver r2 = new ParentResolver(elem);
     280
     281        int retVal = r1.compareTo(r2);
     282        if (retVal != 0) return retVal;
     283
     284        return getName().compareTo(((AddressElement) elem).getName());
     285    }
    280286}
  • applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/Database.java

    r15166 r15558  
    1414 */
    1515public class Database {
     16
     17    private Database() {}
     18    private static Database singleton = null;
     19    public  static Database getInstance() {
     20        if (singleton == null)
     21            singleton = new Database();
     22
     23        return singleton;
     24    }
    1625
    1726    /**
  • applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/House.java

    r15461 r15558  
    44import org.openstreetmap.josm.data.osm.OsmPrimitive;
    55import org.openstreetmap.josm.plugins.czechaddress.NotNullList;
     6import org.openstreetmap.josm.plugins.czechaddress.PrimUtils;
     7import org.openstreetmap.josm.plugins.czechaddress.StringUtils;
    68import org.openstreetmap.josm.plugins.czechaddress.proposal.Proposal;
    79
     
    139141               
    140142        // First field is the AlternateNubmer
    141         result[0] = matchField(this.cp, prim.get(KEY_ADDR_CP));
     143        result[0] = matchField(this.cp, prim.get(PrimUtils.KEY_ADDR_CP));
    142144       
    143145        // Second field is the Housenumber
    144146        if (parent instanceof Street)
    145             result[1] = Math.min( matchField(parent.getName(), prim.get(KEY_ADDR_STREET)),
    146                                   matchField(this.co,          prim.get(KEY_ADDR_CO)) );
     147            result[1] = Math.min(
     148                matchFieldAbbrev(parent.getName(), prim.get(PrimUtils.KEY_ADDR_STREET)),
     149                matchField(      this.co,          prim.get(PrimUtils.KEY_ADDR_CO)) );
    147150        return result;
    148151    }
     
    160163        ParentResolver pr = new ParentResolver(this);
    161164
    162         props.add(getStringFieldDiff(KEY_ADDR_CP, prim.get(KEY_ADDR_CP), getCP()));
    163         props.add(getStringFieldDiff(KEY_ADDR_CO, prim.get(KEY_ADDR_CO), getCO()));
    164 
    165         props.add(getStringFieldDiff(KEY_ADDR_COUNTRY,
    166                             prim.get(KEY_ADDR_COUNTRY), "CZ"));
     165        props.add(getStringFieldDiff(PrimUtils.KEY_ADDR_CP, prim.get(PrimUtils.KEY_ADDR_CP), getCP()));
     166        props.add(getStringFieldDiff(PrimUtils.KEY_ADDR_CO, prim.get(PrimUtils.KEY_ADDR_CO), getCO()));
     167
     168        props.add(getStringFieldDiff(PrimUtils.KEY_ADDR_COUNTRY,
     169                            prim.get(PrimUtils.KEY_ADDR_COUNTRY), "CZ"));
    167170
    168171        if (pr.parentStreet != null)
    169             props.add(getStringFieldDiff(KEY_ADDR_STREET,
    170                                 prim.get(KEY_ADDR_STREET),
     172            props.add(getStringFieldDiff(PrimUtils.KEY_ADDR_STREET,
     173                                prim.get(PrimUtils.KEY_ADDR_STREET),
    171174                                pr.parentStreet.getName()));
    172        
    173 /*        if (pr.parentViToCi != null) {
    174             String targetIsIn = "";
    175 
    176             if ((pr.parentSuburb != null) &&
    177                 !(pr.parentViToCi.getName().equals(pr.parentSuburb.getName())))
    178                 targetIsIn += pr.parentSuburb.getName() + ", ";
    179 
    180             targetIsIn += pr.parentViToCi.getName() + ", ";
    181 
    182             if (pr.parentRegion != null)
    183                 targetIsIn += pr.parentRegion.getNuts3Name() + " kraj, ";
    184 
    185             targetIsIn += "CZ";
    186 
    187             props.add(getStringFieldDiff(KEY_ADDR_CITY,
    188                                 prim.get(KEY_ADDR_CITY),
    189                                 pr.parentViToCi.getName()));
    190 */
    191        
    192        
     175
    193176        if (parent.parent != null) // For sure our parent is a ElemWithStreets
    194             props.add(getStringFieldDiff(KEY_IS_IN,
    195                                 prim.get(KEY_IS_IN),
     177            props.add(getStringFieldDiff(PrimUtils.KEY_IS_IN,
     178                                prim.get(PrimUtils.KEY_IS_IN),
    196179                                parent.parent.getIsIn()));
    197 /*        }*/
    198180
    199181        // If we have added any proposal so far, add the source info as well.
     
    204186    }
    205187
    206     public boolean isMatchable(OsmPrimitive prim) {
     188    public static boolean isMatchable(OsmPrimitive prim) {
    207189       
    208190        for (String key : prim.keySet()) {
     
    211193                return true;
    212194        }
    213 
    214195        return false;
    215196    }
     197
     198    @Override
     199    public int compareTo(AddressElement o) {
     200        // Most important criterion is the street
     201        int val = super.compareTo(o);
     202        if (val != 0) return val;
     203        if (!(o instanceof House)) return val;
     204
     205        House house = (House) o;
     206
     207        // Second most important is the "CO"
     208        if (co != null && house.co != null)
     209            val = co.compareTo(house.co);
     210        if (val != 0) return val;
     211
     212        // Third most important is the "CP"
     213        if (cp != null && house.cp != null)
     214            val = cp.compareTo(house.cp);
     215        return val;
     216    }
    216217}
  • applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/addressdatabase/ParentResolver.java

    r15166 r15558  
    1010 * @author Radomír Černoch, radomir.cernoch@gmail.com
    1111 */
    12 public class ParentResolver {
     12public class ParentResolver implements Comparable<ParentResolver> {
    1313
    1414    public Street parentStreet = null;
     
    3939        }
    4040    }
     41
     42    public int compareTo(ParentResolver o) {
     43        int val = 0;
     44
     45        if (parentRegion != null && o.parentRegion != null)
     46            val = parentRegion.compareTo(o.parentRegion);
     47        if (val != 0)
     48            return val;
     49
     50        if (parentViToCi != null && o.parentViToCi != null)
     51            val = parentViToCi.compareTo(o.parentViToCi);
     52        if (val != 0)
     53            return val;
     54
     55        if (parentSuburb != null && o.parentSuburb != null)
     56            val = parentSuburb.compareTo(o.parentSuburb);
     57        if (val != 0)
     58            return val;
     59
     60        if (parentStreet != null && o.parentStreet != null)
     61            val = parentStreet.compareTo(o.parentStreet);
     62        return val;
     63    }
    4164}
Note: See TracChangeset for help on using the changeset viewer.