package com.bitmonlab.osiris.imports.map.managers.impl; import java.util.ArrayList; import java.util.List; import javax.xml.bind.Unmarshaller; import com.bitmonlab.osiris.imports.map.model.osm.Member; import com.bitmonlab.osiris.imports.map.model.osm.Relation; public class UnMarshallerListener extends Unmarshaller.Listener { //This method only allows two parameters!!! public void afterUnmarshal(Object target, Object parent) { if (target instanceof Relation){ //System.out.println(((Relation)target).getId()); outerBeforeInner((Relation) target); //Workaround for MongoDB 2.6.x } } private void outerBeforeInner(Relation relation){ List<Member> inners = new ArrayList<Member>(); List<Member> outers = new ArrayList<Member>(); if(relation.getMembers()!=null){ for(Member member : relation.getMembers()){ if(member.getRole().equals("inner")){ inners.add(member); }else if(member.getRole().equals("outer")){ outers.add(member); } } if(!outers.isEmpty() && !inners.isEmpty()){ relation.getMembers().removeAll(outers); relation.getMembers().removeAll(inners); relation.getMembers().addAll(relation.getMembers().size(), outers); relation.getMembers().addAll(relation.getMembers().size(), inners); } } } }