Tabelle

Allgemein

Profil

Source #242 » MarkdownSqlSource.java

a2 adm, 07.07.2022 11:03

 
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;
}



}
(4-4/5)