package de.westnordost.streetcomplete.data.osm.persist; import java.util.ArrayList; import java.util.Collection; import javax.inject.Inject; import de.westnordost.osmapi.map.data.Element; import de.westnordost.osmapi.map.data.Node; import de.westnordost.osmapi.map.data.Relation; import de.westnordost.osmapi.map.data.Way; public class MergedElementDao { private NodeDao nodeDao; private WayDao wayDao; private RelationDao relationDao; @Inject public MergedElementDao(NodeDao nodeDao, WayDao wayDao, RelationDao relationDao) { this.nodeDao = nodeDao; this.wayDao = wayDao; this.relationDao = relationDao; } public void putAll(Collection<Element> elements) { Collection<Node> nodes = new ArrayList<>(); Collection<Way> ways = new ArrayList<>(); Collection<Relation> relations = new ArrayList<>(); for(Element element : elements) { switch(element.getType()) { case NODE: nodes.add((Node) element); break; case WAY: ways.add((Way) element); break; case RELATION: relations.add((Relation) element); break; } } if(!nodes.isEmpty()) nodeDao.putAll(nodes); if(!ways.isEmpty()) wayDao.putAll(ways); if(!relations.isEmpty()) relationDao.putAll(relations); } public void put(Element element) { switch(element.getType()) { case NODE: nodeDao.put((Node) element); break; case WAY: wayDao.put((Way) element); break; case RELATION: relationDao.put((Relation) element); break; } } public void delete(Element.Type type, long id) { switch(type) { case NODE: nodeDao.delete(id); break; case WAY: wayDao.delete(id); break; case RELATION: relationDao.delete(id); break; } } public Element get(Element.Type type, long id) { switch(type) { case NODE: return nodeDao.get(id); case WAY: return wayDao.get(id); case RELATION: return relationDao.get(id); } return null; } public void deleteUnreferenced() { nodeDao.deleteUnreferenced(); wayDao.deleteUnreferenced(); relationDao.deleteUnreferenced(); } }