📄 worker.java
字号:
if (usrGrps.size() == 0) throw new Exception("No editor for metadata --> id:"+id); String owner = ((Element) privil.get(0)).getChildText("id"); //--- no, ok we can store it md.getChild("source").setText(newSiteId); Element xml = XmlSerializer.select(oldDbms, "Metadata", id); oldDbms.commit(); md.addContent(new Element("root") .setText(xml.getName())); md.addContent(new Element("isHarvested").setText("n")); md.addContent(new Element("data") .setText(Xml.getString(xml))); md.addContent(new Element("owner") .setText(owner)); md.addContent(new Element("groupOwner") .setText(groupOwner)); Lib.database.insert(newDbms, "Metadata", md, idMapper); //--- we can have even milions of records so it is convenient to commit //--- at each insert newDbms.commit(); mdIds.add(id); } System.out.println("Migrated metadata : "+ mdIds.size()); } //--------------------------------------------------------------------------- /** Migrates OperationAllowed */ private void migrateOperationAllowed(Dbms oldDbms, Dbms newDbms) throws SQLException { String query = "SELECT * FROM OperationAllowed WHERE operationId<>2 AND operationId<>4"; //--- copy metadata categories List operAll = oldDbms.select(query).getChildren(); oldDbms.commit(); for (Object oa : operAll) { Element opAll = (Element) oa; if (!mdIds.contains(opAll.getChildText("metadataid"))) continue; Lib.database.insert(newDbms, "OperationAllowed", opAll, relationMapper); //--- we can have even milions of records so it is convenient to commit //--- at each insert newDbms.commit(); } } //--------------------------------------------------------------------------- /** Migrates MetadataCateg */ private void migrateMetadataCateg(Dbms oldDbms, Dbms newDbms) throws SQLException { String query = "SELECT * FROM MetadataCateg"; //--- copy metadata categories List oldMdCat = oldDbms.select(query).getChildren(); oldDbms.commit(); for (Object o : oldMdCat) { Element mdCat = (Element) o; if (!mdIds.contains(mdCat.getChildText("metadataid"))) continue; Lib.database.insert(newDbms, "MetadataCateg", mdCat, relationMapper); //--- we can have even milions of records so it is convenient to commit //--- at each insert newDbms.commit(); } } //--------------------------------------------------------------------------- private void migrateSettings(Dbms newDbms) throws SQLException { String query = "UPDATE Settings SET value=? WHERE id=?"; //--- the following ids are taken from the Settings.ddf file newDbms.execute(query, source.getNetwork(), 31); newDbms.execute(query, source.getNetmask(), 32); newDbms.execute(query, source.getPublicHost(), 21); newDbms.execute(query, source.getPublicPort(), 22); newDbms.execute(query, source.getZ3950Port(), 42); newDbms.commit(); } //--------------------------------------------------------------------------- private void restoreLocalizedRecords(Dbms newDbms) throws Exception { DdfLoader r = new DdfLoader(); //--- fix groups LocalizFixer grp = new LocalizFixer(); r.setHandler(grp); r.load(App.path + "/gast/setup/db/Groups.ddf"); LocalizFixer grpDes = new LocalizFixer(); r.setHandler(grpDes); r.load(App.path + "/gast/setup/db/GroupsDes.ddf"); restoreLocalizedRecords(newDbms, "GroupsDes", grp, grpDes); //--- fix categories LocalizFixer cat = new LocalizFixer(); r.setHandler(cat); r.load(App.path + "/gast/setup/db/Categories.ddf"); LocalizFixer catDes = new LocalizFixer(); r.setHandler(catDes); r.load(App.path + "/gast/setup/db/CategoriesDes.ddf"); restoreLocalizedRecords(newDbms, "CategoriesDes", cat, catDes); } //--------------------------------------------------------------------------- private void restoreLocalizedRecords(Dbms dbms, String table, LocalizFixer base, LocalizFixer des) throws SQLException { String query = "SELECT * FROM "+ table; List records = dbms.select(query).getChildren(); for (Object r : records) { Element rec = (Element) r; String idDes = rec.getChildText("iddes"); String lang = rec.getChildText("langid"); String label = rec.getChildText("label"); String newId = getIdFromName(base, label); if (newId != null) { label = getLabelFromId(des, newId, lang); query = "UPDATE "+ table +" SET label=? WHERE idDes=? and langId=?"; dbms.execute(query, label, new Integer(idDes), lang); dbms.commit(); } } } //--------------------------------------------------------------------------- private int getIndex(LocalizFixer fl, String name) { for (int i=0; i<fl.fields.size(); i++) { ImportField field = fl.fields.get(i); if (field.name.toLowerCase().equals(name.toLowerCase())) return i; } return -1; } //--------------------------------------------------------------------------- private String getIdFromName(LocalizFixer lf, String name) { int idNDX = getIndex(lf, "id"); int nameNDX = getIndex(lf, "name"); for (List<String> row : lf.rows) if (row.get(nameNDX).equals(name)) return row.get(idNDX); return null; } //--------------------------------------------------------------------------- private String getLabelFromId(LocalizFixer lf, String id, String lang) { int idDesNDX = getIndex(lf, "iddes"); int langNDX = getIndex(lf, "langid"); int labelNDX = getIndex(lf, "label"); for (List<String> row : lf.rows) if (row.get(idDesNDX).equals(id) && row.get(langNDX).equals(lang)) return row.get(labelNDX); return null; } //--------------------------------------------------------------------------- //--- //--- Variables //--- //--------------------------------------------------------------------------- private String appPath; private GNSource source; private Set<String> mdIds = new HashSet<String>(); private ProgressDialog dlg; //--------------------------------------------------------------------------- private DatabaseLib.Mapper idMapper = new DatabaseLib.Mapper() { public Object map(String field, Object value) { if (field.equals("id")) return new Integer(value.toString()); return value; } }; //--------------------------------------------------------------------------- private DatabaseLib.Mapper groupsMapper = new DatabaseLib.Mapper() { public Object map(String field, Object value) { if (field.equals("id")) return new Integer(value.toString()); if (field.equals("referrer")) { String v = value.toString(); return (v.length() == 0) ? null : new Integer(v); } return value; } }; //--------------------------------------------------------------------------- private DatabaseLib.Mapper relationMapper = new DatabaseLib.Mapper() { public Object map(String field, Object value) { if (field.endsWith("id")) return new Integer(value.toString()); return value; } }; //--------------------------------------------------------------------------- private DatabaseLib.Mapper userMapper = new DatabaseLib.Mapper() { public Object map(String field, Object value) { if (field.equals("id")) return new Integer(value.toString()); if (field.equals("password")) return Util.scramble(value.toString()); return value; } };}//==============================================================================class LocalizFixer implements DdfLoader.Handler{ //--------------------------------------------------------------------------- //--- //--- Handler interface //--- //--------------------------------------------------------------------------- public void handleFields(List<ImportField> fields) throws Exception { this.fields = fields; } //--------------------------------------------------------------------------- public void handleRow(List<String> values) throws Exception { for (int i=0; i<values.size(); i++) values.set(i, Codec.decodeString(values.get(i))); rows.add(values); } //--------------------------------------------------------------------------- public void cleanUp() {} //--------------------------------------------------------------------------- //--- //--- Variables //--- //--------------------------------------------------------------------------- public List<ImportField> fields; public List<List<String>> rows = new ArrayList<List<String>>();}//==============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -