package engine; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import processing.BLLCalculator; import file.BookmarkReader; public class BaseLevelLearningCollectiveEngine implements EngineInterface { private BookmarkReader reader = null; private final Map<String, Double> collectiveTags = new LinkedHashMap<String, Double>(); public void loadFile(String path, String filename) throws Exception { BookmarkReader reader = EngineUtils.getSortedBookmarkReader(path, filename); Map<Integer, Double> collectiveTags = BLLCalculator.getCollectiveArtifactMap(reader, reader.getBookmarks(), null, false, new ArrayList<Long>(), new ArrayList<Double>(), 0.5, true); // map to strings Map<String, Double> collectiveTagNames = new LinkedHashMap<String, Double>(); for (Map.Entry<Integer, Double> tag : collectiveTags.entrySet()) { collectiveTagNames.put(reader.getTags().get(tag.getKey()), tag.getValue()); } resetStructures(reader, collectiveTagNames); } @Override public synchronized Map<String, Double> getEntitiesWithLikelihood(String user, String resource, List<String> topics, Integer count, Boolean filterOwnEntities, Algorithm algorithm, EntityType type) { if (count == null || count.doubleValue() < 1) { count = 10; } Map<String, Double> tagMap = new LinkedHashMap<String, Double>(); if (algorithm == null || algorithm == Algorithm.BLLcoll) { tagMap = this.collectiveTags; } else { int userID = this.reader.getUsers().indexOf(user); if (user != null && userID != -1) { Map<Integer, Double> userTags = BLLCalculator.getSortedArtifactMapForUser(userID, this.reader, this.reader.getBookmarks(), null, false, new ArrayList<Long>(), new ArrayList<Double>(), 0.5, true); for (Map.Entry<Integer, Double> tag : userTags.entrySet()) { tagMap.put(this.reader.getTags().get(tag.getKey()), tag.getValue()); } } } Map<String, Double> returnMap = new LinkedHashMap<String, Double>(); for (Map.Entry<String, Double> entry : tagMap.entrySet()) { if (returnMap.size() < count.intValue()) { returnMap.put(entry.getKey(), entry.getValue()); } else { break; } } return returnMap; } private synchronized void resetStructures(BookmarkReader reader, Map<String, Double> collectiveTags) { this.reader = reader; this.collectiveTags.clear(); this.collectiveTags.putAll(collectiveTags); } }