package engine; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import common.CalculationType; import processing.BLLCalculator; import processing.ThreeLTCalculator; import file.BookmarkReader; public class ThreeLayersCollectiveEngine implements EngineInterface { private BookmarkReader reader = null; private ThreeLTCalculator calculator = null; public void loadFile(String path, String filename) throws Exception { BookmarkReader reader = EngineUtils.getSortedBookmarkReader(path, filename); ThreeLTCalculator calculator = new ThreeLTCalculator(reader, reader.getBookmarks().size(), 5, 5, true, false, false, CalculationType.NONE); resetStructures(reader, calculator); } @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; } if (filterOwnEntities == null) { filterOwnEntities = true; } List<Integer> filterTags = EngineUtils.getFilterTags(filterOwnEntities, this.reader, user, resource); List<Integer> topicIDs = new ArrayList<>(); if (topics != null) { for (String t : topics) { List<String> categories = this.reader.getCategories(); int tID = categories.indexOf(t.toLowerCase()); if (tID != -1) { topicIDs.add(tID); } } } Map<Integer, Double> tagIDs = null; if (algorithm == null || algorithm == Algorithm.THREELcoll) { tagIDs = this.calculator.getCollectiveRankedTagList(topicIDs, System.currentTimeMillis() / 1000.0, count.intValue(), false, false); } else { int userID = this.reader.getUsers().indexOf(user); if (user != null && userID != -1) { tagIDs = this.calculator.getRankedTagList(userID, -1, topicIDs, System.currentTimeMillis() / 1000.0, count.intValue(), false, false, true); } else { return new LinkedHashMap<String, Double>(); } } // map to strings Map<String, Double> tagStrings = new LinkedHashMap<String, Double>(); for (Map.Entry<Integer, Double> entry : tagIDs.entrySet()) { if (tagStrings.size() < count.intValue()) { if (!filterTags.contains(entry.getKey())) { tagStrings.put(this.reader.getTags().get(entry.getKey()), entry.getValue()); } } else { break; } } return tagStrings; } private synchronized void resetStructures(BookmarkReader reader, ThreeLTCalculator calculator) { this.reader = reader; this.calculator = calculator; } }