|
package com.jobst_software.markdown2any;
|
|
|
|
|
|
|
|
import com.jobst_software.gjc2sx.Initable;
|
|
import com.jobst_software.gjc2sx.Disposable;
|
|
import com.jobst_software.gjc2sx.HasROClientProperties;
|
|
|
|
import com.jobst_software.gjc2sx.helpers.Ut;
|
|
|
|
import com.jobst_software.js.db.JsDatabase;
|
|
import com.jobst_software.js.helpers.JsUtil;
|
|
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.util.Vector;
|
|
|
|
|
|
|
|
public class MarkdownSqlSource implements Initable, Disposable {
|
|
|
|
public static class SqlRow implements HasROClientProperties {
|
|
protected ResultSet rset;
|
|
public SqlRow( ResultSet rset) {
|
|
this.rset = rset;
|
|
}
|
|
|
|
@Override
|
|
public Object getClientProperty( Object key) {
|
|
try {
|
|
return rset.getObject( (String)key);
|
|
}
|
|
catch( Exception exc) {
|
|
throw new RuntimeException( exc);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
// refs
|
|
//
|
|
protected MarkdownDocument doc;
|
|
protected String[] main_args;
|
|
|
|
// mems
|
|
//
|
|
protected JsDatabase db;
|
|
|
|
|
|
public MarkdownSqlSource( MarkdownDocument doc, String[] main_args) throws Exception
|
|
{
|
|
this.doc = doc;
|
|
this.main_args = main_args;
|
|
|
|
db = JsUtil.getDefaultDatabase();
|
|
}
|
|
|
|
@Override
|
|
public void init() throws Exception {
|
|
String sql = getIssuesSql();
|
|
ResultSet rset = executeQuery( sql, null);
|
|
while( rset.next() ) {
|
|
Vector<String> headers = new Vector<String>();
|
|
adjustHeaders( headers, rset.getObject( AbstractMarkdownReader.PROJECT_ID));
|
|
|
|
Object tracker_id = rset.getObject( AbstractMarkdownReader.TRACKER_ID);
|
|
String tracker_name = lookup("name", "select name from " + getTablename( AbstractMarkdownReader.TRACKERS_TAB_NO) + " where id = ?", tracker_id);
|
|
doc.add( headers, tracker_name, new SqlRow( rset));
|
|
}
|
|
|
|
rset.close();
|
|
rset = null;
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public void dispose() throws Exception {
|
|
db.destroy();
|
|
db = null;
|
|
|
|
doc = null;
|
|
}
|
|
|
|
|
|
|
|
protected ResultSet executeQuery( String sql, Object id) throws Exception {
|
|
PreparedStatement stmt = db.getConnection().prepareStatement( sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
|
|
|
|
if( id != null ) {
|
|
stmt.setObject( 1, id);
|
|
}
|
|
|
|
return stmt.executeQuery();
|
|
}
|
|
|
|
|
|
protected String lookup( String fdName, String sql, Object id) throws Exception {
|
|
String res = null;
|
|
ResultSet rset = executeQuery( sql, id);
|
|
if( rset.next() ) {
|
|
res = rset.getString( fdName);
|
|
}
|
|
|
|
rset.close();
|
|
rset = null;
|
|
|
|
return res;
|
|
}
|
|
|
|
|
|
|
|
public String getTablename( int main_arg_table_no) {
|
|
String[] tabnames = Ut.scanArray( main_args[ AbstractMarkdownReader.PROJECTS_TRACKERS_ISSUES_ARG_NO + 1], ",", true);
|
|
return Ut.encode( tabnames[ main_arg_table_no], null).replace("\u0020", ".");
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getIssuesSql() {
|
|
String issues_where = main_args[ AbstractMarkdownReader.ISSUES_WHERE_ARG_NO + 1];
|
|
|
|
return "SELECT " + Ut.formatArray( MarkdownDocument.MarkdownIssue.FD_NAMES, ",") + ","
|
|
+ " " + AbstractMarkdownReader.PROJECT_ID + "," + AbstractMarkdownReader.TRACKER_ID
|
|
+ " FROM " + getTablename(AbstractMarkdownReader.ISSUES_TAB_NO)
|
|
+ " WHERE " + issues_where; // z.B. tracker_id in (38,39,40,41) and status_id = 51 and project_id <> 12 /* IT */ "
|
|
}
|
|
|
|
|
|
|
|
public String getProjectsSql() {
|
|
return "select " + AbstractMarkdownReader.NAME + "," + AbstractMarkdownReader.PARENT_ID
|
|
+ " FROM " + getTablename(AbstractMarkdownReader.PROJECTS_TAB_NO) + " WHERE id = ?";
|
|
}
|
|
|
|
|
|
|
|
protected void adjustHeaders( Vector<String> headers, Object project_id) throws Exception {
|
|
if( project_id != null ) {
|
|
String project_sql = getProjectsSql();
|
|
ResultSet project_rset = executeQuery( project_sql, project_id);
|
|
if( project_rset.next() ) {
|
|
headers.add( 0, project_rset.getString( AbstractMarkdownReader.NAME));
|
|
adjustHeaders( headers, project_rset.getObject( AbstractMarkdownReader.PARENT_ID));
|
|
}
|
|
|
|
project_rset.close();
|
|
project_rset = null;
|
|
}
|
|
}
|
|
|
|
|
|
public String getAttachmentsSql() {
|
|
return "select id, disk_directory, disk_filename FROM " + getTablename(AbstractMarkdownReader.ATTACHMENTS_TAB_NO) + " WHERE id = ?";
|
|
}
|
|
|
|
|
|
/**
|
|
* /attachments/download/49
|
|
* [0] [1] [2]
|
|
*/
|
|
public String adjustImgHref( String imgHref) throws Exception {
|
|
if( imgHref != null && !"".equals(imgHref) ) {
|
|
String[] attachments_download_id = Ut.scanArray( imgHref, "/", true);
|
|
String attachment_id_asText = attachments_download_id[ attachments_download_id.length - 1];
|
|
if( !"".equals(attachment_id_asText) ) {
|
|
String resource_path = main_args[ AbstractMarkdownReader.RESOURCE_PATH_ARG_NO + 1];
|
|
if( !"-".equals(resource_path) ) {
|
|
String sql = getAttachmentsSql();
|
|
ResultSet rset = executeQuery( sql, attachment_id_asText);
|
|
if( rset.next() ) {
|
|
imgHref = concat( concat( resource_path, rset.getString("disk_directory"), System.getProperty("file.separator")),
|
|
rset.getString("disk_filename"), System.getProperty("file.separator"));
|
|
}
|
|
|
|
rset.close();
|
|
rset = null;
|
|
}
|
|
}
|
|
}
|
|
return imgHref;
|
|
}
|
|
|
|
|
|
public String adjustLinkHref( String linkHref) throws Exception {
|
|
String resource_url = main_args[ AbstractMarkdownReader.RESOURCE_URL_ARG_NO + 1];
|
|
if( !"-".equals(resource_url) ) {
|
|
linkHref = concat( resource_url, linkHref, "/");
|
|
}
|
|
return linkHref;
|
|
}
|
|
|
|
|
|
public String concat( String t1, String t2, String del) {
|
|
return ""
|
|
+ t1
|
|
+ ( !Ut.makeString(t1).endsWith(del) && !Ut.makeString(t2).startsWith(del) ? del : "" )
|
|
+ t2;
|
|
}
|
|
|
|
|
|
|
|
}
|