private < T extends AbstractEdmEntityImpl, G extends MongoTermList<T>, H extends AbstractRepresentationMigration<T>> boolean migratePhaseThree( JacksonDBCollection<G, String> termListColl_source, JacksonDBCollection<G, String> termListColl_target, H representationMagrition, ContextualCategory contextualCategory, int skip) throws UnknownHostException { int counter = 0; int interval = 0; while (true) { try { DBCursor<G> curs = termListColl_source .find(new BasicDBObject("entityType", contextualCategory.getEntityClass())) .skip(skip); curs.addOption(com.mongodb.Bytes.QUERYOPTION_NOTIMEOUT); while (curs.hasNext()) { G termList = curs.next(); counter++; interval++; if (interval == 1000) { System.out.println( String.format("Phase 3 (%s): %d ", contextualCategory.getEntityClass(), counter)); interval = 0; } String originalUri = termList.getCodeUri(); String codeUri = lookupOriginalCodeUri(termList.getCodeUri()); termList.setCodeUri(codeUri); termList.setId(null); String parent = termList.getParent(); if (StringUtils.isNotBlank(parent)) { String parentCodeUri = lookupOriginalCodeUri(parent); if (parentCodeUri == null) { termList.setParent(null); } else { termList.setParent(parentCodeUri); } } T representation = termList.getRepresentation(); representationMagrition.migrateRepresentation(codeUri, originalUri, representation); termList.setOwlSameAs(((PlaceImpl) representation).getOwlSameAs()); try { termListColl_target.insert(termList); } catch (DuplicateKeyException me) { continue; } } curs.close(); break; } catch (Exception e) { e.printStackTrace(); initialiseConnections(); counter--; skip = counter; continue; } } return true; }