Skip to content
This repository has been archived by the owner on May 23, 2023. It is now read-only.

Commit

Permalink
hello 0.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Кузнецов Илья Николаевич authored and Кузнецов Илья Николаевич committed Feb 5, 2016
1 parent 45f29be commit d686e44
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 86 deletions.
90 changes: 47 additions & 43 deletions src/com/pinternals/ir/Launchpad.java
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ void parseKBA(InputStream zis) {

class AZ{
int num, mark; //, longTexts=0, swcv=0, sp=0;
String area, askdate=null, objid=null, langMaster=null;
String area, objid=null;//, askdate=null, langMaster=null;
com.sap.lpad.Properties mprop=null;

@Override
Expand Down Expand Up @@ -829,44 +829,45 @@ void areaList(NotesDB cdb) throws IOException, SQLException {
// NotesDB dba = NotesDB.openDBA(ap);
// deepAreaTest2(db, dba, tmd, online);
// }
static URL getByScheme(String lang, int num, int ver) throws MalformedURLException {
String s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
+ "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')", num, ver, lang);
URL u = new URL(s);
return u;
}
static URL getByScheme(EScheme escheme, String lang, int num, int ver, String ...add) throws MalformedURLException {
String s;
if (escheme==EScheme.KBA)
s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwskba"
+ "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')", num, ver, lang);
else
s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
+ "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')", num, ver, lang);
for (String x: add)
s += "/"+x;
// if (add!=null && add.length==1)
// s = s+"/"+add[0];
// + "?$expand=LongText,RefBy,RefTo,Languages", num, ver, lang);
//SoftCom -- плохо
// + "?$expand=LongText,SoftCom,RefBy,RefTo,Sp,Patch,Attach,CorrIns,SideSol,SideCau,Languages", num, ver, lang);
URL u = new URL(s);
return u;
}
static URL getByScheme2(EScheme escheme, String lang, int num, int ver, String ...add) throws MalformedURLException {
assert add!=null && add.length>0;
String s;
if (escheme==EScheme.KBA)
s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwskba"
+ "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')?$expand=", num, ver, lang);
else
s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
+ "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')?$expand=", num, ver, lang);
for (String x: add)
s += x+",";
URL u = new URL(s.substring(0, s.length()-1));
return u;
}

// static URL getByScheme(String lang, int num, int ver) throws MalformedURLException {
// String s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
// + "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')", num, ver, lang);
// URL u = new URL(s);
// return u;
// }
// private static URL getByScheme(EScheme escheme, String lang, int num, int ver, String ...add) throws MalformedURLException {
// String s;
// if (escheme==EScheme.KBA)
// s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwskba"
// + "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')", num, ver, lang);
// else
// s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
// + "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')", num, ver, lang);
// for (String x: add)
// s += "/"+x;
//// if (add!=null && add.length==1)
//// s = s+"/"+add[0];
//// + "?$expand=LongText,RefBy,RefTo,Languages", num, ver, lang);
// //SoftCom -- плохо
//// + "?$expand=LongText,SoftCom,RefBy,RefTo,Sp,Patch,Attach,CorrIns,SideSol,SideCau,Languages", num, ver, lang);
// URL u = new URL(s);
// return u;
// }
// private static URL getByScheme2(EScheme escheme, String lang, int num, int ver, String ...add) throws MalformedURLException {
// assert add!=null && add.length>0;
// String s;
// if (escheme==EScheme.KBA)
// s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwskba"
// + "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')?$expand=", num, ver, lang);
// else
// s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
// + "/TrunkSet(SapNotesNumber='%010d',Version='%d',Language='%s')?$expand=", num, ver, lang);
// for (String x: add)
// s += x+",";
// URL u = new URL(s.substring(0, s.length()-1));
// return u;
// }
static URL getBySchemeZip(String lang, int num, int ver, String value) throws MalformedURLException {
String s = String.format("https://launchpad.support.sap.com/services/odata/svt/snogwscorr"
+ "/Zip4SSet(SapNotesNumber='%010d',Version='%04d',Language='%s')%s", num, ver, lang, value);
Expand Down Expand Up @@ -980,7 +981,8 @@ boolean getNotes(NotesDB cdb, NotesDB dba, boolean debug) throws IOException, SQ
assert !cdb.isClosed() && !dba.isClosed();
System.out.println(dba.getNick());
Collection<String> areas = Area.nickToArea.get((dba.getNick()));
List<AZ> azs = cdb.getNotesCDB_byAreas(areas), ozs = dba.getNotesDBA();
List<AZ> azs = cdb.getNotesCDB_byAreas(areas);
List<AZ> ozs = dba.getNotesDBA();

// azs.sort(Comparator.comparing(o1->-o1.num));
boolean needmore = false, e;
Expand Down Expand Up @@ -1019,7 +1021,7 @@ boolean getNotes(NotesDB cdb, NotesDB dba, boolean debug) throws IOException, SQ
try {
n = Instant.now();
en = downloadEntry2(wc, x.num, "E", 0, x.mark, debug);
dba.putA01(en, n, true);
dba.putA01(en, n);
// needmore = true;
System.out.println(" ok");
} catch (NoteRetrException nre) {
Expand All @@ -1029,13 +1031,15 @@ else if (nre.internalerror)
System.out.println("\tInternal error: " + x.num);
else
System.out.println("\tUNKNOWN: " + x.num);
} finally {
dba.commit();
}
}
return needmore;
}
void importNote(NotesDB dba, InputStream is, boolean commit) throws IOException, SQLException {
void importNote(NotesDB dba, InputStream is) throws IOException, SQLException {
com.sap.lpad.Entry enbig = JAXB.unmarshal(is, com.sap.lpad.Entry.class);
dba.putA01(enbig, Instant.now(), commit);
dba.putA01(enbig, Instant.now());
}

private static com.sap.lpad.Entry downloadEntry2(WebClient wc, int num, String lang, int ver, int mark, boolean debug) throws IOException, NoteRetrException {
Expand Down
68 changes: 36 additions & 32 deletions src/com/pinternals/ir/NotesDB.java
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,19 @@ private static String ddl(String code) {
return ddlrb.getString(code);
}
private PreparedStatement sql(String code) throws SQLException {
assert code!=null;
assert code!=null && !dba;
return con.prepareStatement(sqlrb.getString(code), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
}
private PreparedStatement sqla(String code) throws SQLException {
assert code!=null;
return con.prepareStatement(sqlab.getString(code), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
assert code!=null && dba;
PreparedStatement ps = null;
try {
ps = con.prepareStatement(sqlab.getString(code), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
} catch (SQLException e) {
System.err.println(String.format("SQL Error for '%s'%n%s%n%s", code, sqlab.getString(code), e.getMessage()));
throw e;
}
return ps;
}
private PreparedStatement setPs(PreparedStatement ps, Object[] args) throws SQLException {
assert ps!=null && args!=null && args.length>0;
Expand Down Expand Up @@ -476,114 +483,121 @@ List<AZ> getNotesDBA() throws SQLException {
p.setComponentKey(rs.getString(9));
p.setComponentText(rs.getString(10));
p.setLanguage(rs.getString(11));
String langMaster = rs.getString(12), askdate = rs.getString(13);
// String langMaster = rs.getString(12), askdate = rs.getString(13);
Integer tp = types.get(p.getType());
Objects.requireNonNull(tp, String.format("'%s' not mapped to mark", p.getType()));
AZ az = new AZ(num, p.getComponentKey(), p.getSapNotesKey(), tp);
az.mprop = p;
az.langMaster = langMaster;
az.askdate = askdate;
// az.langMaster = langMaster;
// az.askdate = askdate;
azl.add(az);
}
return azl;
}

private Map<String,PreparedStatement> dbaPs = new HashMap<String,PreparedStatement>();
void putA01(com.sap.lpad.Entry en, Instant n, boolean commit) throws SQLException {
void putA01(com.sap.lpad.Entry en, Instant n) throws SQLException {
assert dba && !isClosed();
String pk[] = new String[]{"trunkins",
"longins", "softcomins", "corrinsins", "spins", "reftoins", "refbyins", "patchins", "attachins",
"sidecauins", "sidesolins", "productins", "langins", "facetins", "facetupd"};
if (dbaPs.size()==0) for (String s: pk) dbaPs.put(s, sqla(s));
com.sap.lpad.Properties q, p = en.getContent().getProperties();

if (commit) for (PreparedStatement ps: dbaPs.values()) ps.clearBatch();
List<Entry<String,Object[]>> todo = new ArrayList<Entry<String,Object[]>>();
Object o[];
Object[] facets = new Object[]{
Integer.parseInt(p.getSapNotesNumber()), p.getLanguage(), Integer.parseInt(p.getVersion()), n.toString(),
null, null, null, null, null, null, null, null, null, null, null, null
};


Map<String,Integer> fn = new HashMap<String,Integer>();
fn.put("Languages", 5);
fn.put("LongText", 6);
fn.put("SoftCom", 7);
fn.put("Sp", 8);
fn.put("Patch", 9);
fn.put("CorrIns", 10);
fn.put("RefTo", 11);
fn.put("RefBy", 12);
fn.put("SideSol", 13);
fn.put("SideCau", 14);
fn.put("Attach", 15);
fn.put("Product", 16);

// int a = fac[idxOneBased-1]==null ? 0 : (Integer)fac[idxOneBased-1];
// fac[idxOneBased-1] = new Integer(a+1);

for (com.sap.lpad.Link l: en.getLink()) {
if ("self".equals(l.getRel())) continue;
List<com.sap.lpad.Entry> ex = l.getInline().getFeed().getEntry();
assert ex!=null;
// facets.add(l.getTitle());
// System.out.println(l.getTitle());
int fx = fn.get(l.getTitle())-1;
facets[fx] = facets[fx]==null ? new Integer(0) : facets[fx];
for (com.sap.lpad.Entry eo: ex) {
q = eo.getContent().getProperties();
facets[fx] = new Integer( ((Integer)facets[fx]).intValue() + 1);
switch (l.getTitle()) {
case "Languages":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),q.getLangMaster()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("langins", o));
addFacet(5, facets);
break;
case "LongText":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),q.getLanguage(),Integer.parseInt(q.getVersion()),
q.getTypeKey(), q.getText()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("longins", o));
addFacet(6, facets);
break;
case "SoftCom":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
Integer.parseInt(q.getPakId()), Integer.parseInt(q.getAleiKey()),
q.getName(), q.getVerFrom(), q.getVerTo()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("softcomins", o));
addFacet(7, facets);
break;
case "Sp":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getName(), q.getSp(), q.getVersion()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("spins", o));
addFacet(8, facets);
break;
case "Patch":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getName(), q.getSp(), q.getVersion()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("patchins", o));
addFacet(9, facets);
break;
case "CorrIns":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
Integer.parseInt(q.getPakId()), q.getName(), Integer.parseInt(q.getCount()) };
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("corrinsins", o));
addFacet(10, facets);
break;
case "RefTo":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getRefNum(), q.getRefType(), q.getRefTitle(), q.getRefUrl(), q.getRefKey()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("reftoins", o));
addFacet(11, facets);
break;
case "RefBy":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getRefNum(), q.getRefType(), q.getRefTitle(), q.getRefUrl(), q.getRefKey()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("refbyins", o));
addFacet(12, facets);
break;
case "SideSol":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getRefNum(), q.getRefType(), q.getRefTitle(), q.getRefUrl(), q.getRefKey()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("sidesolins", o));
addFacet(13, facets);
break;
case "SideCau":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getRefNum(), q.getRefType(), q.getRefTitle(), q.getRefUrl(), q.getRefKey()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("sidecauins", o));
addFacet(14, facets);
break;
case "Attach":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getFileName(), q.getFileSize(), q.getFileLink(), q.getMimeType()};
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("attachins", o));
addFacet(15, facets);
break;
case "Product":
o = new Object[]{Integer.parseInt(q.getSapNotesNumber()),Integer.parseInt(q.getVersion()),
q.getProductKey(), q.getProductName(), q.getProductVersion() };
todo.add(new AbstractMap.SimpleEntry<String,Object[]>("productins", o));
addFacet(16, facets);
break;
default:
throw new RuntimeException("NIY " + l.getTitle() + " " + ex.size());
Expand All @@ -597,20 +611,10 @@ void putA01(com.sap.lpad.Entry en, Instant n, boolean commit) throws SQLExceptio
setPs(dbaPs.get("trunkins"), o).addBatch();
setPs(dbaPs.get("facetins"), facets).addBatch();
setPs(dbaPs.get("facetupd"), facets).addBatch();

// o = new Object[]{n.toString(), Integer.parseInt(p.getSapNotesNumber()), p.getLanguage()};
// setPs(dbaPs.get("trunkupd"), o).addBatch();

for (Entry<String,Object[]> e: todo)
setPs(dbaPs.get(e.getKey()), e.getValue()).addBatch();
for (String s: pk) dbaPs.get(s).executeBatch();
if (commit) commit();
}
static private void addFacet(int idxOneBased, Object[] fac) {
assert idxOneBased>=5 && idxOneBased<=16;
assert fac!=null && fac.length==16;
int a = fac[idxOneBased-1]==null ? 0 : (Integer)fac[idxOneBased-1];
fac[idxOneBased-1] = new Integer(a+1);
}
// area-db into notes.db
void fromDBAtoCDB(NotesDB dba) throws SQLException {
Expand Down
10 changes: 5 additions & 5 deletions src/com/pinternals/ir/NotesRetriever.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
public class NotesRetriever {
// private static Logger log = Logger.getLogger(NotesRetriever.class.toString());
public static final Charset utf8 = Charset.forName("UTF-8");
public static final String version = "v0.0.2-beta";
public static final String version = "v0.0.2";

public static void main(String[] argv) throws Exception {
Options opts = new Options();
Expand Down Expand Up @@ -68,7 +68,7 @@ public static void main(String[] argv) throws Exception {
+ "SUPP.CACHE handle into db\n"
+ "\n"
+ "Launchpad.support.sap.com commands are:\n"
+ "LPAD.SYNC mutual sync <area>.db with notes.db\n"
// + "LPAD.SYNC mutual sync <area>.db with notes.db\n"
+ "LPAD.GETNOTES [nick] ... {online} ask unknown application areas\n"
+ "LPAD.IMPORT [nick] ... import from <nick>/facets into nick.db\n"
// + "LPAD.DEEP {online} ask for notes content\n"
Expand Down Expand Up @@ -132,8 +132,8 @@ public static void main(String[] argv) throws Exception {
boolean b = false;
try {
switch (cm) {
case "LPAD.SYNC":
throw new RuntimeException("Deprecated");
// case "LPAD.SYNC":
// throw new RuntimeException("Deprecated");
// l = new Launchpad(cache, null, null, null);
// l.areaList(db);
// for (NotesDB dba: l.dbas) db.sync(dba);
Expand Down Expand Up @@ -199,7 +199,7 @@ public static void main(String[] argv) throws Exception {
int i = 0;
while (it.hasNext()) {
p = it.next();
l.importNote(dba, Files.newInputStream(p), false);
l.importNote(dba, Files.newInputStream(p));
if (++i>999) {
System.out.println(i + " commited");
dba.commit();
Expand Down
12 changes: 6 additions & 6 deletions src/com/pinternals/ir/sqla.properties
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
00open1 = PRAGMA foreign_keys = ON;

#a01get = select NotesNumber,Version,NotesKey,Title,Type,Priority,Category,ReleasedOn,ComponentKey,ComponentText,Language,askdate from Trunk;
trunkget = select a.NotesNumber,a.NotesKey,a.Title,a.Type,a.Version,\
a.Priority,a.Category,a.ReleasedOn,a.ComponentKey,a.ComponentText,a.Language\
from Trunk as a;
trunkget = select NotesNumber,NotesKey,Title,Type,Version, \
Priority,Category,ReleasedOn,ComponentKey,ComponentText,Language \
from Trunk;
# , (select count(*) from LongText t where t.NotesNumber=a.NotesNumber and t.Language=a.Language and t.Version=a.Version) as longtexts \
# , (select count(*) from SoftComp sw where sw.NotesNumber=a.NotesNumber and sw.Version=a.Version) as swcv \
# , (select count(*) from Sp sp where sp.NotesNumber=a.NotesNumber and sp.Version=a.Version) as sp \

trunkins = insert or ignore into Trunk\
(NotesNumber,NotesKey,Title,Type,Version,Priority,Category,ReleasedOn,ComponentKey,ComponentText,Language)\
(NotesNumber,NotesKey,Title,Type,Version,Priority,Category,ReleasedOn,ComponentKey,ComponentText,Language) \
values (?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11);
#trunkupd = update Trunk set askdate=?1 where NotesNumber=?2 and Language=?3;
longins = insert or ignore into LongText\
longins = insert or ignore into LongText \
(NotesNumber,Language,Version,TypeKey,Text) values (?1,?2,?3,?4,?5);
softcomins = insert or ignore into SoftComp(NotesNumber,Version,PakId,AleiKey,Name,VerFrom,VerTo) values (?,?,?,?,?,?,?);
corrinsins = insert or ignore into CorrIns(NotesNumber,Version,PakId,Name,Count) values (?,?,?,?,?);
Expand All @@ -25,7 +25,7 @@ sidecauins = insert or ignore into SideCau(NotesNumber,Version,RefNum,RefType,Re
sidesolins = insert or ignore into SideSol(NotesNumber,Version,RefNum,RefType,RefTitle,RefUrl,RefKey) values (?,?,?,?,?,?,?);
productins = insert or ignore into Product(NotesNumber,Version,ProductKey,ProductName,ProductVersion) values (?,?,?,?,?);
langins = insert or ignore into Languages(NotesNumber,LangMaster) values (?,?);

#
facetins = insert or ignore into Facets(NotesNumber,Language,Version,askdate,\
Languages,LongText,SoftComp,Sp,Patch,CorrIns,RefTo,RefBy,SideSol,SideCau,Attach,Product) \
values (?1,?2,?3,?4,\
Expand Down

0 comments on commit d686e44

Please sign in to comment.