Date: Fri, 29 Mar 2024 05:22:08 +0800 (CST) Message-ID: <305959503.239591.1711660928625@smartbi-wiki-7-5457b896d6-jhmkq> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_239590_953611913.1711660928625" ------=_Part_239590_953611913.1711660928625 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
=E6=AD=A4=E6=96=87=E6= =A1=A3=E8=AF=B4=E6=98=8E=E5=A6=82=E4=BD=95=E5=9C=A8Smartbi=E4=B8=AD=E5=AE= =9E=E7=8E=B0=E8=87=AA=E5=AE=9A=E4=B9=89JavaeBean=E7=A4=BA=E4=BE=8B=E3=80=82=
=E3=80=80=E3=80=80 =E5=9C=A8=E9=A1=B9=E7=9B=AE=E7=9A=84=E4=BD=BF=E7=
=94=A8=E8=BF=87=E7=A8=8B=E4=B8=AD=EF=BC=8C=E6=9C=89=E4=B8=80=E4=BA=9B=E6=95=
=B0=E6=8D=AE=E4=B8=8D=E8=83=BD=E7=9B=B4=E6=8E=A5=E4=BB=8E=E5=85=B3=E7=B3=BB=
=E6=88=96=E8=80=85=E5=A4=9A=E7=BB=B4=E6=95=B0=E6=8D=AE=E6=BA=90=E4=B8=AD=E8=
=8E=B7=E5=8F=96=EF=BC=8C=E5=8F=AF=E8=83=BD=E9=9C=80=E8=A6=81=E4=BB=8E=E5=8F=
=A6=E5=A4=96=E4=B8=80=E4=BA=9B=E9=80=94=E5=BE=84=E8=8E=B7=E5=8F=96=E5=8F=88=
=E6=88=96=E8=80=85=E9=9C=80=E8=A6=81=E4=B8=80=E4=BA=9B=E7=89=B9=E6=AE=8A=E7=
=9A=84=E5=A4=84=E7=90=86=E3=80=82
=E3=80=80=E3=80=80 Smartbi=E4=B8=AD=E7=
=9A=84=E5=9F=BA=E4=BA=8E=E5=85=B3=E7=B3=BB=E6=95=B0=E6=8D=AE=E6=BA=90=E7=9A=
=84=E6=95=B0=E6=8D=AE=E9=9B=86=E3=80=81=E5=A4=9A=E7=BB=B4=E6=95=B0=E6=8D=AE=
=E9=9B=86=E5=92=8C=E5=A4=9A=E7=BB=B4=E5=88=86=E6=9E=90=E9=83=BD=E6=97=A0=E6=
=B3=95=E5=AE=8C=E6=88=90=E6=AD=A4=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=9B=A0=E6=AD=
=A4=E6=8F=90=E4=BE=9B=E4=BA=86Java=E6=9F=A5=E8=AF=A2=E4=BA=8C=E6=AC=A1=E5=
=BC=80=E5=8F=91=E6=8E=A5=E5=8F=A3=E5=85=81=E8=AE=B8=E9=A1=B9=E7=9B=AE=E8=BF=
=9B=E8=A1=8C=E5=AE=9A=E5=88=B6=E5=BC=80=E5=8F=91=E3=80=82 =E4=B8=BA=E4=BA=
=86=E5=BA=94=E5=AF=B9=E8=BF=99=E7=A7=8D=E9=9C=80=E6=B1=82=EF=BC=8CSmartbi=
=E6=8F=90=E4=BE=9B=E4=BA=86=E4=B8=80=E4=B8=AA=E5=8F=AF=E4=BB=A5=E6=A0=B9=E6=
=8D=AE=E9=9C=80=E8=A6=81=E6=89=A9=E5=85=85=E7=9A=84Java=E6=9F=A5=E8=AF=A2=
=E6=96=B9=E5=BC=8F=EF=BC=8C=E5=8F=AF=E4=BB=A5=E6=A0=B9=E6=8D=AE=E5=AE=9E=E9=
=99=85=E6=83=85=E5=86=B5=E5=BC=80=E5=8F=91=E6=9D=A5=E6=BB=A1=E8=B6=B3=E6=82=
=A8=E7=9A=84=E9=9C=80=E6=B1=82=E3=80=82
=E3=80=80=E3=80=80=E6=9C=AC=
=E6=96=B9=E6=A1=88=E6=98=AF=E5=9C=A8Smartbi=E4=B8=AD=E6=B7=BB=E5=8A=A0=E8=
=87=AA=E5=AE=9A=E4=B9=89=E7=9A=84Java=E6=9F=A5=E8=AF=A2=E7=B1=BB=EF=BC=8C=
=E5=B9=B6=E4=BD=BFSmartbi=E6=AD=A3=E7=A1=AE=E7=9A=84=E5=B1=95=E7=A4=BA=E6=
=95=B0=E6=8D=AE=E7=9A=84=E8=BF=87=E7=A8=8B=E3=80=82 =E4=B8=8B=E9=9D=A2=E8=
=AE=B2=E8=A7=A3=E4=B8=80=E4=B8=8B=E5=85=B7=E4=BD=93=E7=9A=84=E5=AE=9E=E7=8E=
=B0=E6=AD=A5=E9=AA=A4=EF=BC=9A
=E5=9C=A8MyJavaQueryProj=E9=A1=B9=E7=9B=AE=E4=B8=
=AD=E6=96=B0=E5=BB=BA=E4=B8=80=E4=B8=AA=E7=B1=BBcom.proj.MyJavaQuery=
=EF=BC=8C=E5=B9=B6=E5=AE=9E=E7=8E=B0=E6=8E=A5=E5=8F=A3IJavaQueryData
.ISimpleDa=
ta
(=E8=AF=A5=E6=8E=A5=E5=8F=A3=E5=A3=B0=E6=
=98=8E=E8=BF=94=E5=9B=9E=E8=AF=A5=E7=B1=BB=E8=BF=94=E5=9B=9E=E7=9A=84=E6=95=
=B0=E6=8D=AE=E9=87=8F=E6=AF=94=E8=BE=83=E5=B0=91=EF=BC=8CSmartbi=E4=BC=9A=
=E8=87=AA=E5=8A=A8=E8=AF=BB=E5=8F=96=E6=89=80=E6=9C=89=E6=95=B0=E6=8D=AE=E5=
=B9=B6=E6=94=AF=E6=8C=81=E8=AE=A1=E7=AE=97=E5=AD=97=E6=AE=B5=E3=80=81=E6=8E=
=92=E5=BA=8F=E3=80=81=E8=81=9A=E5=90=88=E3=80=81=E6=9D=A1=E4=BB=B6=E7=9A=84=
=E5=8A=9F=E8=83=BD)
=E8=BF=99=E9=87=8C=E6=98=AF=E4=B8=80=E4=B8=AACSV=E6=96=87=E4=BB= =B6=E6=9F=A5=E8=AF=A2=E7=9A=84=E4=BE=8B=E5=AD=90=E6=BA=90=E7=A0=81=E3=80=82=
package = com.proj; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import smartbi.freequery.metadata.IJavaQueryData; import smartbi.freequery.metadata.JavaQueryConfig; import smartbi.freequery.metadata.JavaQueryOutputField; import smartbi.freequery.metadata.JavaQueryParameter; import smartbi.freequery.querydata.CellData; import smartbi.freequery.querydata.GridData; import smartbi.net.sf.json.JSONObject; import smartbi.util.StringUtil; import smartbi.util.ValueType; public class MyJavaQuery implements IJavaQueryData.ISimpleData { =09private Map<String, JavaQueryConfig> configs =3D new LinkedHashMap= <String, JavaQueryConfig>(); =09private BufferedReader reader; =09private List<JavaQueryOutputField> outputFields; =09private int currentLine; =09public MyJavaQuery() { =09=09// =E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=90=8D=E7=A7=B0=E4=B8=BAFil= eName=E7=9A=84=E9=85=8D=E7=BD=AE=E9=A1=B9 =09=09addConfig("FileName", "=E6=96=87=E4=BB=B6=E5=90=8D", "=E7=BB=99=E5=AE= =9A=E4=B8=80=E4=B8=AA=E6=96=87=E4=BB=B6=E5=90=8D", "test.csv", true); =09=09addConfig("Encoding", "=E7=BC=96=E7=A0=81", "=E7=BC=96=E7=A0=81=E6=96= =B9=E5=BC=8F", "GBK", true); =09} =09/** =09 * =E8=8E=B7=E5=8F=96Java=E6=9F=A5=E8=AF=A2=E9=9C=80=E8=A6=81=E7=9A=84= =E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF =09 */ =09public List<JavaQueryConfig> getConfigs() { =09=09return new ArrayList<JavaQueryConfig>(configs.values()); =09} =09/** =09 * =E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA=E9=85=8D=E7=BD=AE=E9=A1=B9 =09 *=20 =09 * @param name =09 * =E5=90=8D=E7=A7=B0 =09 * @param alias =09 * =E5=88=AB=E5=90=8D =09 * @param desc =09 * =E6=8F=8F=E8=BF=B0 =09 * @param defaultValue =09 * =E9=BB=98=E8=AE=A4=E5=80=BC =09 * @param notNull =09 * =E6=98=AF=E5=90=A6=E5=85=81=E8=AE=B8=E4=B8=BA=E7=A9=BA =09 */ =09private void addConfig(String name, String alias, String desc, =09=09=09String defaultValue, boolean notNull) { =09=09JavaQueryConfig p =3D new JavaQueryConfig(); =09=09p.setName(name); =09=09p.setAlias(alias); =09=09p.setDesc(desc); =09=09p.setValue(defaultValue); =09=09p.setNotNull(notNull); =09=09configs.put(name, p); =09} =09/** =09 * =E4=BB=8E=E4=BF=9D=E5=AD=98=E7=9A=84=E5=AD=97=E7=AC=A6=E4=B8=B2=E4=B8= =AD=E6=81=A2=E5=A4=8D=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF =09 *=20 =09 * @param configStr =09 * =E9=85=8D=E7=BD=AE=E5=AD=97=E7=AC=A6=E4=B8=B2 =09 */ =09public void loadConfigs(String configStr) { =09=09if (StringUtil.isNullOrEmpty(configStr)) =09=09=09return; =09=09JSONObject obj =3D JSONObject.fromString(configStr); =09=09configs.get("FileName").setValue( =09=09=09=09obj.has("FileName") ? obj.getString("FileName") : null); =09=09configs.get("Encoding").setValue( =09=09=09=09obj.has("Encoding") ? obj.getString("Encoding") : null); =09} =09/** =09 * =E4=BF=9D=E5=AD=98=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF =09 *=20 =09 * @return =E8=BF=94=E5=9B=9E=E9=85=8D=E7=BD=AE=E5=AD=97=E7=AC=A6=E4=B8= =B2 =09 */ =09public String saveConfigs() { =09=09JSONObject json =3D new JSONObject(); =09=09for (JavaQueryConfig config : configs.values()) =09=09=09json.put(config.getName(), config.getValue()); =09=09return json.toString(); =09} =09/** =09 * =E8=AE=BE=E7=BD=AE=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF =09 *=20 =09 * @param key =09 * =E5=90=8D=E7=A7=B0 =09 * @param value =09 * =E9=85=8D=E7=BD=AE=E5=80=BC =09 */ =09public void setConfigValue(String key, String value) { =09=09configs.get(key).setValue(value); =09} =09/** =09 * =E8=AE=BE=E7=BD=AE=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF =09 */ =09public void setConfigValues(Map<String, String> configValues) { =09=09for (Entry<String, String> config : configValues.entrySet()) =09=09=09configs.get(config.getKey()).setValue(config.getValue()); =09} =09/** =09 * =E6=A0=B9=E6=8D=AE=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=E5=88=9D=E5=A7= =8B=E5=8C=96Java=E6=9F=A5=E8=AF=A2=E5=AF=B9=E8=B1=A1 =09 */ =09public void init() { =09=09try { =09=09=09outputFields =3D new ArrayList<JavaQueryOutputField>(); =09=09=09File file =3D new File(configs.get("FileName").getValue()); =09=09=09if (file.exists()) { =09=09=09=09FileInputStream fis =3D new FileInputStream(file); =09=09=09=09if (configs.get("Encoding").getValue().toLowerCase().equals("ut= f-8")) { =09=09=09=09=09byte[] headData =3D new byte[3]; =09=09=09=09=09fis.read(headData, 0, 3); =09=09=09=09=09if (headData[0] !=3D (byte) 0xef || headData[1] !=3D (byte) = 0xbb || headData[2] !=3D (byte) 0xbf) { =09=09=09=09=09=09fis.close(); =09=09=09=09=09=09fis =3D new FileInputStream(file); =09=09=09=09=09} =09=09=09=09} =09=09=09=09reader =3D new BufferedReader(new InputStreamReader(fis, config= s.get("Encoding").getValue())); =09=09=09=09String titleLine =3D reader.readLine(); =09=09=09=09String[] fields =3D titleLine =3D=3D null ? "".split(",") : tit= leLine.split(","); =09=09=09=09for (String str : fields) { =09=09=09=09=09JavaQueryOutputField f =3D new JavaQueryOutputField(); =09=09=09=09=09f.setId(str); =09=09=09=09=09f.setName(str); =09=09=09=09=09f.setAlias(str); =09=09=09=09=09if (str.equals(StringUtil.getLanguageValue("Value1"))) { =09=09=09=09=09=09f.setDataType(ValueType.DOUBLE); =09=09=09=09=09} else { =09=09=09=09=09=09f.setDataType(ValueType.STRING); =09=09=09=09=09} =09=09=09=09=09outputFields.add(f); =09=09=09=09} =09=09=09} =09=09=09currentLine =3D 0; =09=09} catch (UnsupportedEncodingException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} catch (FileNotFoundException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} catch (IOException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} =09} =09/** =09 * =E5=85=B3=E9=97=ADJava=E6=9F=A5=E8=AF=A2=E5=AF=B9=E8=B1=A1=EF=BC=8C= =E5=85=B3=E9=97=AD=E5=BF=85=E8=A6=81=E7=9A=84=E8=B5=84=E6=BA=90 =09 */ =09public void close() { =09=09try { =09=09=09if (reader !=3D null) { =09=09=09=09reader.close(); =09=09=09=09reader =3D null; =09=09=09} =09=09} catch (IOException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} =09} =09/** =09 * =E8=BF=94=E5=9B=9E=E5=8F=82=E6=95=B0=E5=AF=B9=E8=B1=A1 =09 */ =09public List<JavaQueryParameter> getParameters() { =09=09return new ArrayList<JavaQueryParameter>(); =09} =09/** =09 * =E8=AE=BE=E7=BD=AE=E5=8F=82=E6=95=B0=E5=80=BC =09 */ =09public void setParameterValue(String id, String value, String displayVal= ue) { =09} =09/** =09 * =E8=BF=94=E5=9B=9EJava=E6=9F=A5=E8=AF=A2=E7=9A=84=E8=BE=93=E5=87=BA= =E5=AD=97=E6=AE=B5 =09 */ =09public List<JavaQueryOutputField> getOutputFields() { =09=09return outputFields; =09} =09/** =09 * =E8=8E=B7=E5=8F=96=E6=8C=87=E5=AE=9A=E8=A1=8C=E7=9A=84=E6=95=B0=E6=8D= =AE =09 */ =09public GridData getGridData(int from, int count) { =09=09try { =09=09=09if (currentLine > from) { =09=09=09=09if (reader !=3D null) { =09=09=09=09=09reader.close(); =09=09=09=09=09FileInputStream fis =3D new FileInputStream(configs.get("Fil= eName").getValue()); =09=09=09=09=09if (configs.get("Encoding").getValue().toLowerCase().equals(= "utf-8")) { =09=09=09=09=09=09byte[] headData =3D new byte[3]; =09=09=09=09=09=09fis.read(headData, 0, 3); =09=09=09=09=09=09if (headData[0] !=3D (byte) 0xef || headData[1] !=3D (byt= e) 0xbb || headData[2] !=3D (byte) 0xbf) { =09=09=09=09=09=09=09fis.close(); =09=09=09=09=09=09=09fis =3D new FileInputStream(configs.get("FileName").ge= tValue()); =09=09=09=09=09=09} =09=09=09=09=09} =09=09=09=09=09reader =3D new BufferedReader(new InputStreamReader(fis, con= figs.get("Encoding").getValue())); =09=09=09=09=09reader.readLine(); =09=09=09=09} =09=09=09=09currentLine =3D 0; =09=09=09} =09=09=09if (reader !=3D null) { =09=09=09=09while (currentLine < from) { =09=09=09=09=09reader.readLine(); =09=09=09=09=09currentLine++; =09=09=09=09} =09=09=09} =09=09=09List<List<CellData>> datas =3D new ArrayList<List&l= t;CellData>>(); =09=09=09for (int i =3D 0; i < count; i++) { =09=09=09=09String line =3D reader =3D=3D null ? null : reader.readLine(); =09=09=09=09if (line =3D=3D null) =09=09=09=09=09break; =09=09=09=09currentLine++; =09=09=09=09String[] fs =3D line.split(","); =09=09=09=09List<CellData> row =3D new ArrayList<CellData>(); =09=09=09=09for (int j =3D 0; j < fs.length; j++) { =09=09=09=09=09CellData c =3D new CellData(); =09=09=09=09=09c.setStringValue(fs[j]); =09=09=09=09=09row.add(c); =09=09=09=09} =09=09=09=09datas.add(row); =09=09=09} =09=09=09GridData d =3D new GridData(); =09=09=09List<String> headers =3D new ArrayList<String>(); =09=09=09for (JavaQueryOutputField f : outputFields) =09=09=09=09headers.add(f.getName()); =09=09=09d.setStringHeaders(headers); =09=09=09d.setData(datas); =09=09=09return d; =09=09} catch (UnsupportedEncodingException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} catch (FileNotFoundException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} catch (IOException e) { =09=09=09throw new IllegalArgumentException(e); =09=09} =09} =09/** =09 * =E8=BF=94=E5=9B=9E=E6=80=BB=E8=A1=8C=E6=95=B0=EF=BC=8C=E8=BF=94=E5=9B= =9EInteger.MAX_VALUE=E8=A1=A8=E7=A4=BA=E6=9C=AA=E7=9F=A5=E6=80=BB=E8=A1=8C= =E6=95=B0 =09 */ =09public int getRowCount() { =09=09return Integer.MAX_VALUE; =09} }=20
=E9=99=84=E4=BB=B6
=E6=BA=90=E4=BB=A3=E7=A0=81=EF=BC=9AMyJavaQueryProj.rar=EF=BC=8C= =E6=89=A9=E5=B1=95=E5=8C=85=EF=BC=9AMyJavaQueryProj.ext=EF=BC=8C=E6= =B5=8B=E8=AF=95csv=E6=96=87=E4=BB=B6=EF=BC=9Atest.csv=