// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.fixAddresses.gui;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.util.ArrayList;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import org.openstreetmap.josm.plugins.fixAddresses.IOSMEntity;
import org.openstreetmap.josm.plugins.fixAddresses.OSMAddress;
import org.openstreetmap.josm.plugins.fixAddresses.OSMStreet;
public class AddressEditModel {
private List<OSMStreet> streets;
private List<OSMAddress> unresolvedAddresses;
private List<OSMAddress> incompleteAddresses = new ArrayList<>();
private DefaultMutableTreeNode streetRoot;
private DefaultMutableTreeNode unresolvedRoot;
private DefaultMutableTreeNode incompleteRoot;
public AddressEditModel(List<OSMStreet> streets,
List<OSMAddress> unresolvedAddresses) {
super();
this.streets = streets;
this.unresolvedAddresses = unresolvedAddresses;
}
public TreeNode getStreetsTree() {
if (streets == null) return new DefaultMutableTreeNode(tr("(No data)"));
if (streetRoot == null) {
streetRoot = new DefaultMutableTreeNode();
for (OSMStreet sNode : streets) {
DefaultMutableTreeNode treeStreetNode = new DefaultMutableTreeNode(sNode);
DefaultMutableTreeNode segmentsNode = new DefaultMutableTreeNode(tr("Segments"));
treeStreetNode.add(segmentsNode);
// Add street segment(s)
for (IOSMEntity child : sNode.getChildren()) {
segmentsNode.add(new DefaultMutableTreeNode(child));
}
if (sNode.hasAddresses()) {
// Add address nodes
DefaultMutableTreeNode addressNode = new DefaultMutableTreeNode(tr("Addresses"));
treeStreetNode.add(addressNode);
for (OSMAddress addr : sNode.getAddresses()) {
addressNode.add(new DefaultMutableTreeNode(addr));
if (!addr.isComplete()) {
incompleteAddresses.add(addr);
}
}
}
streetRoot.add(treeStreetNode);
}
}
return streetRoot;
}
/**
* Gets the tree node containing all unresolved addresses.
* @return tree node containing all unresolved addresses
*/
public TreeNode getUnresolvedAddressesTree() {
if (unresolvedAddresses == null) return new DefaultMutableTreeNode(tr("(No data)"));
if (unresolvedRoot == null) {
unresolvedRoot = new DefaultMutableTreeNode();
for (OSMAddress addr : unresolvedAddresses) {
// Add address nodes
unresolvedRoot.add(new DefaultMutableTreeNode(addr));
}
}
return unresolvedRoot;
}
/**
* Gets the tree node containing all incomplete addresses.
* @return tree node containing all incomplete addresses
*/
public TreeNode getIncompleteAddressesTree() {
if (incompleteAddresses == null) return new DefaultMutableTreeNode(tr("(No data)"));
if (incompleteRoot == null) {
incompleteRoot = new DefaultMutableTreeNode();
for (OSMAddress addr : incompleteAddresses) {
// Add address nodes
incompleteRoot.add(new DefaultMutableTreeNode(addr));
}
}
return incompleteRoot;
}
}