public static LanguageSet getLanguageSet(byte[] truncated) { Set<Language> languages = new HashSet<Language>(); boolean extra = false; for (byte b : truncated) { if (extra) { languages.add(Language.getById(b+128+255)); extra = false; } else if (b == -128) { extra = true; } else { languages.add(Language.getById(b + 128)); } } return new LanguageSet(languages); }
public static LocalId fromLong(long packed) { long languageId = packed >>> 32; long id = packed & MAX_PACKED_ID; return new LocalId(Language.getById((int)languageId), (int)id); }
public static LocalId fromInt(int packed) { int languageId = packed >>> 26; if (languageId < 0 || languageId > MAX_PACKED_ID) throw new IllegalArgumentException("illegal languageId: " + languageId + " in " + packed); int id = packed & MAX_PACKED_ID; return new LocalId(Language.getById(languageId), id); }
/** * Build a UniversalPage from a database record representation. * Classes that extend class this should override this method. * * @param result a list of database records * @return a UniversalPage representation of the given database record * @throws DaoException if the record is not a Page */ protected UniversalPage buildUniversalPage(List<Record> result) throws DaoException { if (result == null || result.isEmpty()) { return null; } Multimap<Language, LocalId> localPages = HashMultimap.create(result.size(), result.size()); NameSpace nameSpace = NameSpace.getNameSpaceByArbitraryId(result.get(0).getValue(Tables.LOCAL_PAGE.NAME_SPACE)); for(Record record : result) { Language language = Language.getById(record.getValue(Tables.UNIVERSAL_PAGE.LANG_ID)); int pageId = record.getValue(Tables.UNIVERSAL_PAGE.PAGE_ID); localPages.put(language, new LocalId(language, pageId)); } return new UniversalPage( result.get(0).getValue(Tables.UNIVERSAL_PAGE.UNIV_ID), result.get(0).getValue(Tables.UNIVERSAL_PAGE.ALGORITHM_ID), nameSpace, localPages ); }
private UniversalLink buildUniversalLink(Collection<Record> records) throws DaoException { if (records == null || records.isEmpty()) { return null; } Multimap<Language, LocalLink> map = HashMultimap.create(records.size(), records.size()); for (Record record : records) { Language language = Language.getById(record.getValue(Tables.UNIVERSAL_LINK.LANG_ID)); LocalLink temp = localLinkDao.getLink( language, record.getValue(Tables.UNIVERSAL_LINK.LOCAL_SOURCE_ID), record.getValue(Tables.UNIVERSAL_LINK.LOCAL_DEST_ID) ); map.put(language, temp); } Record temp = records.iterator().next(); return new UniversalLink( temp.getValue(Tables.UNIVERSAL_LINK.UNIV_SOURCE_ID), temp.getValue(Tables.UNIVERSAL_LINK.UNIV_DEST_ID), temp.getValue(Tables.UNIVERSAL_LINK.ALGORITHM_ID), map ); }
private LocalCategoryMember buildLocalCategoryMember(Record r) { return new LocalCategoryMember( r.getValue(Tables.CATEGORY_MEMBERS.CATEGORY_ID), r.getValue(Tables.CATEGORY_MEMBERS.ARTICLE_ID), Language.getById(r.getValue(Tables.CATEGORY_MEMBERS.LANG_ID)) ); }
Language lang = Language.getById(record.value2()); DateTime date = new DateTime(record.value1()); if (!loaded.containsKey(lang)) {
private Redirect buildRedirect(Record r) { if (r == null){ return null; } return new Redirect( Language.getById(r.getValue(Tables.REDIRECT.LANG_ID)), r.getValue(Tables.REDIRECT.SRC_PAGE_ID), r.getValue(Tables.REDIRECT.DEST_PAGE_ID) ); }
Language lang = Language.getById(record.value2()); DateTime date = new DateTime(record.value1()); if (!loaded.containsKey(lang)) {
private List<Integer> getPackedIds(DaoFilter filter) { if (filter.getSourceIds() != null && filter.getDestIds() != null) { throw new IllegalArgumentException(); } Collection<Integer> ids = (filter.getSourceIds() != null) ? filter.getSourceIds() : filter.getDestIds(); if (ids == null) { throw new IllegalArgumentException(); } List<Integer> packed = new ArrayList<Integer>(); for (int langId : filter.getLangIds()) { for (int id : ids) { LocalId lid = new LocalId(Language.getById(langId), id); if (!lid.canPackInInt()) { return null; } packed.add(lid.toInt()); } } return packed; }
private RawPage buildRawPage(Record record){ Timestamp timestamp = record.getValue(Tables.RAW_PAGE.LASTEDIT); return new RawPage(record.getValue(Tables.RAW_PAGE.PAGE_ID), record.getValue(Tables.RAW_PAGE.REVISION_ID), record.getValue(Tables.RAW_PAGE.TITLE), record.getValue(Tables.RAW_PAGE.BODY), new Date(timestamp.getTime()), Language.getById(record.getValue(Tables.RAW_PAGE.LANG_ID)), NameSpace.getNameSpaceByArbitraryId(record.getValue(Tables.RAW_PAGE.NAME_SPACE)), record.getValue(Tables.RAW_PAGE.IS_REDIRECT), record.getValue(Tables.RAW_PAGE.IS_DISAMBIG), record.getValue(Tables.RAW_PAGE.REDIRECT_TITLE) ); }
protected PageView buildPageView(Record record) throws DaoException { if (record == null) { return null; } LocalId id = new LocalId( Language.getById(record.getValue(Tables.PAGEVIEW.LANG_ID)), record.getValue(Tables.PAGEVIEW.PAGE_ID) ); return new PageView( id, record.getValue(Tables.PAGEVIEW.TSTAMP), record.getValue(Tables.PAGEVIEW.NUM_VIEWS) ); }
protected PageView buildPageView(Record record) throws DaoException { if (record == null) { return null; } LocalId id = new LocalId( Language.getById(record.getValue(Tables.PAGEVIEW.LANG_ID)), record.getValue(Tables.PAGEVIEW.PAGE_ID) ); return new PageView( id, record.getValue(Tables.PAGEVIEW.TSTAMP), record.getValue(Tables.PAGEVIEW.NUM_VIEWS) ); }
@Override public LanguageSet getLoadedLanguages(Class component) throws DaoException { sync(component); DSLContext context = getJooq(); try { if (!tableExists(context)) { return new LanguageSet(); } Set<Language> langs = new HashSet<Language>(); Result<Record1<Short>> records = context.select(Tables.META_INFO.LANG_ID) .from(Tables.META_INFO) .where(Tables.META_INFO.COMPONENT.eq(component.getSimpleName())) .and(Tables.META_INFO.LANG_ID.isNotNull()) .fetch(); for (Record1<Short> record : records) { langs.add(Language.getById(record.value1())); } return new LanguageSet(langs); } catch (Exception e) { throw new DaoException("Error when getting loaded languages, check if the database exists / has been initialized\n" + e.toString()); } finally { freeJooq(context); } }
@Override public void call(Record record) throws Exception { long hash = Title.longHashCode( record.getValue(Tables.LOCAL_PAGE.LANG_ID), record.getValue(Tables.LOCAL_PAGE.TITLE), record.getValue(Tables.LOCAL_PAGE.NAME_SPACE)); if (redirectSqlDao != null && record.getValue(Tables.LOCAL_PAGE.IS_REDIRECT)){ numRedirects.incrementAndGet(); Integer dest = redirectSqlDao.resolveRedirect( Language.getById(record.getValue(Tables.LOCAL_PAGE.LANG_ID)), record.getValue(Tables.LOCAL_PAGE.PAGE_ID)); if (dest != null) { numResolved.incrementAndGet(); synchronized (map) { map.put(hash, dest); } } } else { synchronized (map) { map.put(hash, record.getValue(Tables.LOCAL_PAGE.PAGE_ID)); } } if (map.size() % 500000 == 0) { LOG.info("built title cache entry " + map.size() + " of " + n); } } }, Integer.MAX_VALUE);
private LocalLink buildLocalLink(Record record, boolean outlink){ if (record == null){ return null; } return new LocalLink( Language.getById(record.getValue(Tables.LOCAL_LINK.LANG_ID)), record.getValue(Tables.LOCAL_LINK.ANCHOR_TEXT), record.getValue(Tables.LOCAL_LINK.SOURCE_ID), record.getValue(Tables.LOCAL_LINK.DEST_ID), outlink, record.getValue(Tables.LOCAL_LINK.LOCATION), record.getValue(Tables.LOCAL_LINK.IS_PARSEABLE), LocalLink.LocationType.values()[record.getValue(Tables.LOCAL_LINK.LOCATION_TYPE)] ); }
@Override public Set<LocalId> getToDest(LocalId dest) throws DaoException { DSLContext context = getJooq(); try { Result<Record> result = context.select().from(Tables.ILL) .where(Tables.ILL.DEST_LANG_ID.equal(dest.getLanguage().getId())) .and(Tables.ILL.DEST_ID.equal(dest.getId())) .fetch(); if (result == null){ return null; } Set<LocalId> ills = new HashSet<LocalId>(); for (Record record : result) { ills.add(new LocalId( Language.getById(record.getValue(Tables.ILL.SOURCE_LANG_ID)), record.getValue(Tables.ILL.SOURCE_ID))); } return ills; } finally { freeJooq(context); } }
@Override public Set<LocalId> getFromSource(LocalId src) throws DaoException { DSLContext context = getJooq(); try { Result<Record> result = context.select().from(Tables.ILL) .where(Tables.ILL.SOURCE_LANG_ID.equal(src.getLanguage().getId())) .and(Tables.ILL.SOURCE_ID.equal(src.getId())) .fetch(); if (result == null){ return null; } Set<LocalId> ills = new HashSet<LocalId>(); for (Record record : result) { ills.add(new LocalId( Language.getById(record.getValue(Tables.ILL.DEST_LANG_ID)), record.getValue(Tables.ILL.DEST_ID))); } return ills; } finally { freeJooq(context); } }
protected LocalPage buildLocalPage(Record record, DaoFilter daoFilter) throws DaoException { if (record == null) { return null; } Language lang = Language.getById(record.getValue(Tables.LOCAL_PAGE.LANG_ID)); if (redirectSqlDao != null // either null or false // If true, we don't want to resolve redirects because they're all redirects && (daoFilter.isRedirect() == null || !daoFilter.isRedirect()) && record.getValue(Tables.LOCAL_PAGE.IS_REDIRECT)) { LocalPage page = getById(lang, redirectSqlDao.resolveRedirect( lang, record.getValue(Tables.LOCAL_PAGE.PAGE_ID))); if (daoFilter.isValidLocalPage(page)) { return page; } } Title title = new Title( record.getValue(Tables.LOCAL_PAGE.TITLE), true, LanguageInfo.getByLanguage(lang)); NameSpace nameSpace = NameSpace.getNameSpaceByArbitraryId(record.getValue(Tables.LOCAL_PAGE.NAME_SPACE)); return new LocalPage( lang, record.getValue(Tables.LOCAL_PAGE.PAGE_ID), title, nameSpace, record.getValue(Tables.LOCAL_PAGE.IS_REDIRECT), record.getValue(Tables.LOCAL_PAGE.IS_DISAMBIG) ); }