//package org.genedb.web.mvc.model;
//
//import org.genedb.util.MD5Util;
//
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.ObjectOutput;
//import java.io.ObjectOutputStream;
//import java.util.List;
//import java.util.Map;
//
//import com.google.common.collect.Lists;
//import com.google.common.collect.Maps;
//import com.sleepycat.collections.StoredMap;
//
//public class BmfComparison {
//
// Map<Integer, String> transcriptMapNew = Maps.newHashMap();
// Map<Integer, String> contextmapMapNew = Maps.newHashMap();
// Map<String, String> imageMapNew = Maps.newHashMap();
//
//
// Map<Integer, String> transcriptMapOrig = Maps.newHashMap();
// Map<Integer, String> contextmapMapOrig = Maps.newHashMap();
// Map<String, String> imageMapOrig = Maps.newHashMap();
//
//
// public BmfComparison(String newDirName, String oldDirName) throws IOException {
//
// BerkeleyMapFactory bmfNew = new BerkeleyMapFactory();
// bmfNew.setRootDirectory(newDirName);
// bmfNew.setReadOnly(true);
// populateMaps(bmfNew, transcriptMapNew, contextmapMapNew, imageMapNew);
//
// BerkeleyMapFactory bmfOrig = new BerkeleyMapFactory();
// bmfOrig.setRootDirectory(oldDirName);
// bmfOrig.setReadOnly(true);
// populateMaps(bmfOrig, transcriptMapOrig, contextmapMapOrig, imageMapOrig);
// }
//
// private void populateMaps(BerkeleyMapFactory bmf,
// Map<Integer, String> transcriptMap,
// Map<Integer, String> contextmapMap,
// Map<String, String> imageMap) throws IOException {
//
// populateMapTranscriptDTO(transcriptMap, bmf.getDtoMap());
// populateMapString(contextmapMap, bmf.getContextMapMap());
// populateMapByteArray(imageMap, bmf.getImageMap());
// }
//
// private void populateMapTranscriptDTO(Map<Integer, String> map,
// StoredMap<Integer, TranscriptDTO> dtoMap) throws IOException {
//
// for (Map.Entry<Integer, TranscriptDTO> entry : dtoMap.entrySet()) {
// FeatureDTO dto = entry.getValue();
// ByteArrayOutputStream buffer = new ByteArrayOutputStream();
// ObjectOutput out = new ObjectOutputStream(buffer);
// out.writeObject(dto);
// out.close();
// String md5 = MD5Util.getMD5(buffer.toByteArray());
// map.put(entry.getKey(), md5);
// }
// }
//
// private void populateMapByteArray(Map<String, String> map, StoredMap<String, byte[]> bmfMap) {
// for (Map.Entry<String, byte[]> entry : bmfMap.entrySet()) {
// String md5 = MD5Util.getMD5(entry.getValue());
// map.put(entry.getKey(), md5);
// }
// }
//
//
// private void populateMapString(Map<Integer, String> map, StoredMap<Integer, String> bmfMap) {
// for (Map.Entry<Integer, String> entry : bmfMap.entrySet()) {
// String md5 = MD5Util.getMD5(entry.getValue());
// map.put(entry.getKey(), md5);
// }
// }
//
//
//
// private void compare() throws Exception {
//
// compareMaps("TranscriptDTOs", transcriptMapNew, transcriptMapOrig);
// compareMaps("Context Maps", contextmapMapNew, contextmapMapOrig);
// compareMaps("Protein Maps", imageMapNew, imageMapOrig);
// }
//
// private <T> void compareMaps(String label,
// Map<T, String> modified,
// Map<T, String> orig) {
//
// List<T> newIds = Lists.newArrayList();
// List<T> missingIds = Lists.newArrayList();
// List<T> changedIds = Lists.newArrayList();
// List<T> sameIds = Lists.newArrayList();
//
// for (T key : modified.keySet()) {
// if (!orig.containsKey(key)) {
// newIds.add(key);
// continue;
// }
// if (modified.get(key).equals(orig.get(key))) {
// sameIds.add(key);
// } else {
// changedIds.add(key);
// }
// orig.remove(key);
// }
//
// missingIds.addAll(orig.keySet());
//
// System.out.println("\n\n\n"+label);
// displayLabels("Newly added ids", newIds);
// displayLabels("Removed ids", missingIds);
// displayLabels("Changed ids", changedIds);
// displayLabels("Unchanged ids", sameIds);
// }
//
// private <T> void displayLabels(String string, List<T> ids) {
// System.out.println("\n\n"+string + " "+ids.size());
// for (T key : ids) {
// System.out.println(key);
// }
// }
//
// public static void main(String[] args) throws Exception {
// BmfComparison tdc = new BmfComparison(args[0], args[1]);
// tdc.compare();
// }
//
//
//}