New file |
| | |
| | | package com.ximple.eofms.jobs; |
| | | |
| | | import com.ximple.eofms.jobs.context.AbstractOracleJobContext; |
| | | import com.ximple.eofms.jobs.context.postgis.FeatureDgnConvertPostGISJobContext; |
| | | import com.ximple.eofms.jobs.context.postgis.GeneralDgnConvertPostGISJobContext; |
| | | import com.ximple.eofms.jobs.context.postgis.IndexDgnConvertPostGISJobContext; |
| | | import com.ximple.eofms.jobs.context.postgis.OracleConvertPostGISJobContext; |
| | | import com.ximple.eofms.util.*; |
| | | import com.ximple.io.dgn7.*; |
| | | import com.ximple.util.PrintfFormat; |
| | | import oracle.jdbc.OracleConnection; |
| | | import oracle.jdbc.OracleResultSet; |
| | | import oracle.sql.ARRAY; |
| | | import oracle.sql.BLOB; |
| | | import org.apache.commons.collections.OrderedMap; |
| | | import org.apache.commons.collections.OrderedMapIterator; |
| | | import org.apache.commons.collections.map.LinkedMap; |
| | | import org.apache.commons.dbcp.DelegatingConnection; |
| | | import org.apache.commons.io.output.ByteArrayOutputStream; |
| | | import org.apache.commons.logging.Log; |
| | | import org.apache.commons.logging.LogFactory; |
| | | import org.apache.commons.net.ftp.FTP; |
| | | import org.apache.commons.net.ftp.FTPClient; |
| | | import org.apache.commons.net.ftp.FTPReply; |
| | | import org.geotools.data.DataStore; |
| | | import org.geotools.data.Transaction; |
| | | import org.geotools.data.jdbc.JDBCUtils; |
| | | import org.geotools.data.postgis.PostgisNGDataStoreFactory; |
| | | import org.geotools.feature.SchemaException; |
| | | import org.geotools.jdbc.JDBCDataStore; |
| | | import org.opengis.feature.IllegalAttributeException; |
| | | import org.postgresql.PGConnection; |
| | | import org.postgresql.copy.CopyManager; |
| | | import org.quartz.JobDataMap; |
| | | import org.quartz.JobDetail; |
| | | import org.quartz.JobExecutionContext; |
| | | import org.quartz.JobExecutionException; |
| | | |
| | | import java.io.*; |
| | | import java.math.BigDecimal; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.nio.BufferOverflowException; |
| | | import java.nio.ByteBuffer; |
| | | import java.nio.ByteOrder; |
| | | import java.nio.channels.FileChannel; |
| | | import java.sql.*; |
| | | import java.util.*; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * Created by Alchemist on 2016/08/22. |
| | | */ |
| | | /* |
| | | CREATE TABLE ndd.typhoon_version |
| | | ( |
| | | name character varying(255) DEFAULT 'undefined'::character varying, |
| | | dts character varying(13) DEFAULT '00000000.0000'::character varying, |
| | | status integer NOT NULL DEFAULT 0, |
| | | id serial NOT NULL, |
| | | CONSTRAINT "PK_TYPHOON_VERSION_ID" PRIMARY KEY (id) |
| | | ) |
| | | WITH ( |
| | | OIDS=FALSE |
| | | ); |
| | | insert into ndd.typhoon_version (name,dts,status) values('typhoon_rt','20160822.0000',1) |
| | | */ |
| | | public class DMMSNddrtUpdateJob extends AbstractOracleDatabaseJob { |
| | | final static Log logger = LogFactory.getLog(DMMSNddrtUpdateJob.class); |
| | | |
| | | private static final String PGHOST = "PGHOST"; |
| | | private static final String PGDATBASE = "PGDATBASE"; |
| | | private static final String PGPORT = "PGPORT"; |
| | | private static final String PGSCHEMA = "PGSCHEMA"; |
| | | private static final String PGUSER = "PGUSER"; |
| | | private static final String PGPASS = "PGPASS"; |
| | | private static final String USEWKB = "USEWKB"; |
| | | |
| | | private static final boolean useTpclidText = false; |
| | | |
| | | private static final int FETCHSIZE = 30; |
| | | private static final int COMMITSIZE = 100; |
| | | private static final String INDEXPATHNAME = "index"; |
| | | private static final String OTHERPATHNAME = "other"; |
| | | public static final String FORWARDFLOW_MARK = "shape://ccarrow"; |
| | | public static final String BACKFLOW_MARK = "shape://rccarrow"; |
| | | public static final String UNFLOW_MARK = "shape://backslash"; |
| | | public static final String NONFLOW_MARK = "shape://slash"; |
| | | |
| | | private static String FETCH_CONNFDR = "SELECT FSC, UFID, FDR1, DIR FROM BASEDB.CONNECTIVITY ORDER BY FSC"; |
| | | private static String FETCH_COLORTAB = "SELECT TAG_SFSC, TAG_LUFID, COLOR FROM OCSDB.COLOR ORDER BY TAG_SFSC"; |
| | | |
| | | private static String CREATE_OWNERTABLE = "CREATE TABLE s (tid smallint not null, oid int not null, owner smallint not null)"; |
| | | private static String CREATE_COLORTABLE = "CREATE TABLE s (tid smallint not null, oid int not null, dyncolor varchar(10) not null)"; |
| | | |
| | | public static final String FDYNCOLOR_SUFFIX = "_fdyncolor"; |
| | | public static final String FOWNER_SUFFIX = "_fowner"; |
| | | |
| | | protected static class Pair { |
| | | Object first; |
| | | Object second; |
| | | |
| | | public Pair(Object first, Object second) { |
| | | this.first = first; |
| | | this.second = second; |
| | | } |
| | | } |
| | | |
| | | protected static PostgisNGDataStoreFactory dataStoreFactory = new PostgisNGDataStoreFactory(); |
| | | |
| | | protected String _pgHost; |
| | | protected String _pgDatabase; |
| | | protected String _pgPort; |
| | | protected String _pgSchema; |
| | | protected String _pgUsername; |
| | | protected String _pgPassword; |
| | | protected String _pgUseWKB; |
| | | |
| | | protected Map<String, String> pgProperties; |
| | | protected JDBCDataStore targetDataStore; |
| | | // protected OracleConvertEdbGeoJobContext oracleJobContext; |
| | | |
| | | private long queryTime = 0; |
| | | private long queryTimeStart = 0; |
| | | |
| | | public Log getLogger() { |
| | | return logger; |
| | | } |
| | | |
| | | protected AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath, |
| | | boolean profileMode, |
| | | boolean useTransform) { |
| | | return new OracleConvertPostGISJobContext(getDataPath(), |
| | | getTargetDataStore(), targetSchemaName, filterPath, profileMode, useTransform); |
| | | } |
| | | |
| | | protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException { |
| | | super.extractJobConfiguration(jobDetail); |
| | | JobDataMap dataMap = jobDetail.getJobDataMap(); |
| | | _pgHost = dataMap.getString(PGHOST); |
| | | _pgDatabase = dataMap.getString(PGDATBASE); |
| | | _pgPort = dataMap.getString(PGPORT); |
| | | _pgSchema = dataMap.getString(PGSCHEMA); |
| | | _pgUsername = dataMap.getString(PGUSER); |
| | | _pgPassword = dataMap.getString(PGPASS); |
| | | _pgUseWKB = dataMap.getString(USEWKB); |
| | | |
| | | Log logger = getLogger(); |
| | | /* |
| | | logger.info("PGHOST=" + _myHost); |
| | | logger.info("PGDATBASE=" + _myDatabase); |
| | | logger.info("PGPORT=" + _myPort); |
| | | logger.info("PGSCHEMA=" + _mySchema); |
| | | logger.info("PGUSER=" + _myUsername); |
| | | logger.info("PGPASS=" + _myPassword); |
| | | logger.info("USEWKB=" + _myUseWKB); |
| | | */ |
| | | |
| | | if (_pgHost == null) { |
| | | logger.warn("PGHOST is null"); |
| | | throw new JobExecutionException("Unknown PostGIS host."); |
| | | } |
| | | if (_pgDatabase == null) { |
| | | logger.warn("PGDATABASE is null"); |
| | | throw new JobExecutionException("Unknown PostGIS database."); |
| | | } |
| | | if (_pgPort == null) { |
| | | logger.warn("PGPORT is null"); |
| | | throw new JobExecutionException("Unknown PostGIS port."); |
| | | } |
| | | if (_pgSchema == null) { |
| | | logger.warn("PGSCHEMA is null"); |
| | | throw new JobExecutionException("Unknown PostGIS schema."); |
| | | } |
| | | if (_pgUsername == null) { |
| | | logger.warn("PGUSERNAME is null"); |
| | | throw new JobExecutionException("Unknown PostGIS username."); |
| | | } |
| | | if (_pgPassword == null) { |
| | | logger.warn("PGPASSWORD is null"); |
| | | throw new JobExecutionException("Unknown PostGIS password."); |
| | | } |
| | | |
| | | Map<String, String> remote = new TreeMap<String, String>(); |
| | | remote.put(PostgisNGDataStoreFactory.DBTYPE.key, "postgis"); |
| | | // remote.put("charset", "UTF-8"); |
| | | remote.put(PostgisNGDataStoreFactory.HOST.key, _pgHost); |
| | | remote.put(PostgisNGDataStoreFactory.PORT.key, _pgPort); |
| | | remote.put(PostgisNGDataStoreFactory.DATABASE.key, _pgDatabase); |
| | | remote.put(PostgisNGDataStoreFactory.USER.key, _pgUsername); |
| | | remote.put(PostgisNGDataStoreFactory.PASSWD.key, _pgPassword); |
| | | // remote.put( "namespace", null); |
| | | |
| | | String temp=""; |
| | | temp= dataMap.getString("ftpurl"); |
| | | if(temp==null) |
| | | { |
| | | logger.warn("not config ftpurl ->ftp://127.0.0.1:21/"); |
| | | temp="ftp://127.0.0.1:21/"; |
| | | } |
| | | remote.put("ftpurl", temp); |
| | | temp= dataMap.getString("ftpuid"); |
| | | if(temp==null) |
| | | { |
| | | temp="anonymous"; |
| | | } |
| | | remote.put("ftpuid", temp); |
| | | |
| | | temp= dataMap.getString("ftppwd"); |
| | | if(temp==null) |
| | | { |
| | | temp=""; |
| | | } |
| | | remote.put("ftppwd", temp); |
| | | |
| | | temp= dataMap.getString("ftpdir"); |
| | | if(temp==null) |
| | | { |
| | | temp="tcdaas/featureImg"; |
| | | } |
| | | remote.put("ftpdir", temp); |
| | | pgProperties = remote; |
| | | } |
| | | |
| | | |
| | | |
| | | private List<String[]> sqlExecQuery(Connection connection,String strSQLIn,String[] params) throws SQLException { |
| | | |
| | | String strSQL=strSQLIn; |
| | | for(int i=0;i<params.length;i++) |
| | | { |
| | | if(params[i]==null)params[i]=""; |
| | | strSQL=strSQL.replace("%s"+String.valueOf(i+1),params[i]); |
| | | } |
| | | List<String[]> result=new ArrayList<String[]>(); |
| | | List<String> temp = new ArrayList<String>(); |
| | | String strTemp=""; |
| | | // String result = null; |
| | | Statement stmt = null; |
| | | ResultSet rs = null; |
| | | |
| | | |
| | | try { |
| | | stmt = connection.createStatement(); |
| | | rs = stmt.executeQuery(strSQL.toString()); |
| | | // get first result |
| | | // temp.clear(); |
| | | |
| | | ResultSetMetaData rsmd = rs.getMetaData(); |
| | | int NumOfCol = rsmd.getColumnCount(); |
| | | |
| | | while (rs.next()) { |
| | | for (int idx = 0; idx < NumOfCol; idx++) { |
| | | strTemp = rs.getString(idx + 1); |
| | | temp.add(strTemp); |
| | | } |
| | | result.add(temp.toArray(new String[0])); |
| | | temp.clear(); |
| | | } |
| | | return result; |
| | | } finally { |
| | | JDBCUtils.close(rs); |
| | | JDBCUtils.close(stmt); |
| | | } |
| | | } |
| | | private void sqlExec(Connection connection,String strSQLIn,String[] params) throws SQLException { |
| | | |
| | | String strSQL=strSQLIn; |
| | | for(int i=0;i<params.length;i++) |
| | | { |
| | | if(params[i]==null)params[i]=""; |
| | | strSQL=strSQL.replace("%s"+String.valueOf(i+1),params[i]); |
| | | } |
| | | List<String[]> result=new ArrayList<String[]>(); |
| | | List<String> temp = new ArrayList<String>(); |
| | | String strTemp=""; |
| | | // String result = null; |
| | | Statement stmt = null; |
| | | ResultSet rs = null; |
| | | |
| | | |
| | | try { |
| | | stmt = connection.createStatement(); |
| | | stmt.execute( strSQL.toString()); |
| | | // get first result |
| | | // temp.clear(); |
| | | |
| | | |
| | | } finally { |
| | | // JDBCUtils.close(rs); |
| | | JDBCUtils.close(stmt); |
| | | } |
| | | } |
| | | |
| | | private String findValue(String strSource,String findTag) |
| | | { |
| | | int idx=-1; int iStart=-1; int iEnd=-1; |
| | | idx=strSource.indexOf(findTag); |
| | | if(idx<0) return ""; |
| | | iStart= strSource.indexOf("\"",idx); |
| | | iEnd= strSource.indexOf("\"",iStart+1); |
| | | return strSource.substring(iStart+1,iEnd); |
| | | } |
| | | |
| | | |
| | | |
| | | public DataStore getTargetDataStore() { |
| | | return targetDataStore; |
| | | } |
| | | |
| | | protected void createTargetDataStore() throws JobExecutionException { |
| | | if (targetDataStore != null) { |
| | | targetDataStore.dispose(); |
| | | targetDataStore = null; |
| | | } |
| | | |
| | | /* |
| | | if (!isDriverFound()) |
| | | { |
| | | throw new JobExecutionException("Oracle JDBC Driver not found.-" + JDBC_DRIVER); |
| | | } |
| | | */ |
| | | |
| | | if (!pgProperties.containsKey(PostgisNGDataStoreFactory.MAXCONN.key)) { |
| | | pgProperties.put(PostgisNGDataStoreFactory.MAXCONN.key, "5"); |
| | | } |
| | | |
| | | if (!pgProperties.containsKey(PostgisNGDataStoreFactory.MINCONN.key)) { |
| | | pgProperties.put(PostgisNGDataStoreFactory.MINCONN.key, "1"); |
| | | } |
| | | |
| | | /* |
| | | if (!pgProperties.containsKey(PostgisNGDataStoreFactory.WKBENABLED.key)) { |
| | | pgProperties.put(PostgisNGDataStoreFactory.WKBENABLED.key, "true"); |
| | | } |
| | | */ |
| | | |
| | | if (!dataStoreFactory.canProcess(pgProperties)) { |
| | | getLogger().warn("cannot process properties-"); |
| | | throw new JobExecutionException("cannot process properties-"); |
| | | } |
| | | try { |
| | | targetDataStore = dataStoreFactory.createDataStore(pgProperties); |
| | | } catch (IOException e) { |
| | | getLogger().warn(e.getMessage(), e); |
| | | throw new JobExecutionException(e.getMessage(), e); |
| | | } |
| | | } |
| | | |
| | | |
| | | private void doJob(Connection postsql, String[] info) throws SQLException |
| | | { |
| | | // double switch (if db = enable -->work) |
| | | //Here is check |
| | | Date dtnow = new Date(); |
| | | //get all file |
| | | //dept, count,dist,nei ,y,m,d,t,custom |
| | | // HashMap<String> |
| | | String typhoonName=""; |
| | | String typhoonID=""; |
| | | String department=""; |
| | | String county=""; |
| | | String district=""; |
| | | String neighbor=""; |
| | | String affectCustomers=""; |
| | | String affectCustomersEver=""; |
| | | String[] tmpArray; |
| | | String sTemp; |
| | | List<String> arraySQLVals= new ArrayList<String>(); |
| | | List<String> arraySQLValsForTyphoon= new ArrayList<String>(); |
| | | boolean bActiveCheckDBSchedule=true; |
| | | String strDts=""; |
| | | |
| | | if(!jobOnLine(postsql, "nddcanton")&& bActiveCheckDBSchedule) |
| | | { |
| | | |
| | | return; |
| | | } |
| | | |
| | | String[] strTableList=new String []{ "1","2" }; |
| | | String strOnlineTableNum=jobOnlineStatus(postsql, "typhoon_rt"); |
| | | // String strNextTableNum=""; |
| | | String tableCurr=strTableList[strTableList.length-1]; |
| | | String tableNext="";//strTableList[strTableList.length-1] ; |
| | | |
| | | for (int i=0;i<strTableList.length;i++){ |
| | | tableNext=tableCurr; |
| | | tableCurr=strTableList[i]; |
| | | |
| | | |
| | | if(strTableList[i].equals( strOnlineTableNum)) |
| | | { |
| | | |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | String strStep0SQLNDD_rt="truncate table ndd.typhoon_rt"+tableNext; |
| | | |
| | | |
| | | logger.info("begin nddxml to postsql(rt) "); |
| | | logger.info("getftpfile..."); |
| | | String[] xmls= getNDDStrings(info, "neighbor_affect_customers.xml") ; |
| | | |
| | | logger.info(String.format("total %d file(s)",xmls.length)); |
| | | for(int iRow=0;iRow<xmls.length;iRow++) |
| | | { |
| | | arraySQLVals.clear(); |
| | | arraySQLValsForTyphoon.clear(); |
| | | tmpArray= xmls[iRow].split("\n"); |
| | | for(int iLine=0;iLine<tmpArray.length;iLine++) |
| | | { |
| | | sTemp= findValue(tmpArray[iLine],"typhoonName"); |
| | | if(sTemp.length()>0) |
| | | { |
| | | typhoonName= sTemp; |
| | | typhoonID= getTyphoonIDByName(postsql,typhoonName); |
| | | // |
| | | sTemp= findValue(tmpArray[iLine],"Department id"); |
| | | department=sTemp; |
| | | } |
| | | |
| | | sTemp= findValue(tmpArray[iLine],"county ufid"); |
| | | if(sTemp.length()>0) |
| | | { |
| | | county=sTemp; |
| | | } |
| | | sTemp= findValue(tmpArray[iLine],"district ufid"); |
| | | if(sTemp.length()>0) |
| | | { |
| | | district=sTemp; |
| | | } |
| | | sTemp= findValue(tmpArray[iLine],"neighbor ufid"); |
| | | if(sTemp.length()>0) |
| | | { |
| | | neighbor=sTemp; |
| | | sTemp= findValue(tmpArray[iLine],"affectCustomers"); |
| | | if(sTemp.length()>0) |
| | | { |
| | | affectCustomers=sTemp; |
| | | } |
| | | else |
| | | { |
| | | affectCustomers="0"; |
| | | } |
| | | |
| | | sTemp= findValue(tmpArray[iLine],"affectCustomersEver"); |
| | | if(sTemp.length()>0) |
| | | { |
| | | affectCustomersEver=sTemp; |
| | | } |
| | | else |
| | | { |
| | | affectCustomersEver="0"; |
| | | } |
| | | arraySQLVals.add(String.format("(%s,%s,%s,%s,%s,%s,%s",typhoonID,department,county,district,neighbor,affectCustomers,affectCustomersEver)); |
| | | arraySQLValsForTyphoon.add(String.format("%s,%s,%s,%s,%s",county,district,neighbor,affectCustomers,affectCustomersEver)); |
| | | // insert into nddcanton_history (project_id,department_id,county_id,district_id,neighbor_id,affectcustomers,affectcustomersever |
| | | //yy,mm,dd,tt |
| | | } |
| | | |
| | | } |
| | | //!! |
| | | String yy="0000"+String.valueOf( dtnow.getYear()+1900); |
| | | String mm="00"+String.valueOf( dtnow.getMonth()+1); |
| | | String dd="00"+String.valueOf( dtnow.getDate()); |
| | | String t0="00"+ String.valueOf( dtnow.getHours()); |
| | | String t1="00"+ String.valueOf( dtnow.getMinutes()); |
| | | yy= yy.substring(yy.length()-4); |
| | | mm= mm.substring(mm.length()-2); |
| | | dd= dd.substring(dd.length()-2); |
| | | t0= t0.substring(t0.length()-2); |
| | | t1= t1.substring(t1.length()-2); |
| | | strDts=yy+mm+dd+"."+t0+t1; |
| | | // String insertDBSQL=" insert into ndd.nddcanton_history (project_id,department_id,county_id,district_id,neighbor_id,affectcustomers,affectcustomersever"+ |
| | | // ",yy,mm,dd,tt,ts_ser) values "; |
| | | String strStep1SQLNDD_rt="insert into ndd.typhoon_rt"+tableNext+ "(dts,county_id,district_id,neighbor_id,c0,c1)"; |
| | | |
| | | |
| | | sqlExec(postsql,strStep0SQLNDD_rt,new String[]{}); |
| | | |
| | | for(int j=0;j<arraySQLVals.size();j++) |
| | | { |
| | | /* |
| | | sqlExec(postsql,insertDBSQL + arraySQLVals.get(j)+ |
| | | String.format(",%s,%s,%s,'%s%s',%s)", |
| | | yy,mm,dd,t0,t1, |
| | | yy+mm+dd+"."+t0+t1 |
| | | ) , |
| | | new String[]{});*/ |
| | | |
| | | sqlExec(postsql,strStep1SQLNDD_rt+ |
| | | String.format(" values('%s',%s )", |
| | | yy+mm+dd+"."+t0+t1,arraySQLValsForTyphoon.get(j) |
| | | ),new String[]{} |
| | | ); |
| | | } |
| | | |
| | | String strStep2SQLNDD_rt="CREATE OR REPLACE VIEW ndd.v_typhoon_rt AS " + |
| | | " SELECT dts, county_id, district_id, neighbor_id, c0, c1, id "+ |
| | | " FROM ndd.typhoon_rt" + tableNext; |
| | | |
| | | //switch |
| | | if(!tableNext.equals(tableCurr)) |
| | | sqlExec(postsql, |
| | | strStep2SQLNDD_rt, |
| | | new String[]{}); |
| | | |
| | | String strStep3SQLNDD_rt="update ndd.typhoon_version set " + |
| | | " dts= '"+strDts+"',"+ "status=" +tableNext + " where name='typhoon_rt'"; |
| | | |
| | | |
| | | sqlExec(postsql, |
| | | strStep3SQLNDD_rt, |
| | | new String[]{}); |
| | | // String strSQLUpdateCurr="update ndd.currdata set yy='%s',mm='%s',dd='%s',tt='%s%s' where sr=1"; |
| | | /* |
| | | sqlExec(postsql, |
| | | String.format(strSQLUpdateCurr, |
| | | yy,mm,dd,t0,t1 |
| | | ) , |
| | | new String[]{});*/ |
| | | logger.info(String.format("next xml")); |
| | | } |
| | | logger.info(String.format("done")); |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | public void execute(JobExecutionContext context) throws JobExecutionException { |
| | | // Every job has its own job detail |
| | | JobDetail jobDetail = context.getJobDetail(); |
| | | |
| | | // The name is defined in the job definition |
| | | String jobName = jobDetail.getKey().getName(); |
| | | |
| | | // Log the time the job started |
| | | logger.info(jobName + " fired at " + new Date()); |
| | | extractJobConfiguration(jobDetail); |
| | | |
| | | if (isIgnoreDBETL()) { |
| | | return; |
| | | } |
| | | |
| | | //createSourceDataStore(); |
| | | createTargetDataStore(); |
| | | /* |
| | | if (getSourceDataStore() == null) { |
| | | logger.warn("Cannot connect source oracle database."); |
| | | throw new JobExecutionException("Cannot connect source oracle database."); |
| | | } |
| | | */ |
| | | if (getTargetDataStore() == null) { |
| | | logger.warn("Cannot connect source postgreSQL database."); |
| | | throw new JobExecutionException("Cannot connect source postgreSQL database."); |
| | | } |
| | | |
| | | if (isProfileMode()) { |
| | | queryTime = 0; |
| | | } |
| | | |
| | | long t1 = System.currentTimeMillis(); |
| | | String targetSchemaName, targetThemeTable; |
| | | try { |
| | | //logger.info("-- step:clearOutputDatabase --"); |
| | | doJob(targetDataStore.getConnection(Transaction.AUTO_COMMIT),new String[]{ |
| | | pgProperties.get("ftpurl"), |
| | | pgProperties.get("ftpuid"), |
| | | pgProperties.get("ftppwd"), |
| | | pgProperties.get("ftpdir") |
| | | }); |
| | | |
| | | // doJob( targetDataStore.getConnection(Transaction.AUTO_COMMIT),sourceDataStore.getConnection(Transaction.AUTO_COMMIT) ); |
| | | |
| | | } catch (IOException ex) { |
| | | disconnect(); |
| | | logger.warn(ex.getMessage(), ex); |
| | | throw new JobExecutionException("IO error. " + ex.getMessage(), ex); |
| | | } catch (SQLException e) { |
| | | disconnect(); |
| | | logger.warn(e.getMessage(), e); |
| | | throw new JobExecutionException("Database error. " + e.getMessage(), e); |
| | | |
| | | }finally { |
| | | disconnect(); |
| | | } |
| | | logger.warn(jobName + " end at " + new Date()); |
| | | } |
| | | |
| | | private void logTimeDiff(String message, long tBefore, long tCurrent) { |
| | | logger.warn(message + ":use time = " + ((int) ((tCurrent - tBefore) / 60000.0)) + " min - " + |
| | | (((int) ((tCurrent - tBefore) % 60000.0)) / 1000) + " sec"); |
| | | } |
| | | String [] siteInfo=new String[]{"ftp://10.10.1.9:21","DMMS","DMMS000"} ; |
| | | |
| | | private String[] getNDDList(String[] info){ |
| | | String url=info[3]; |
| | | String ftp=info[0]; |
| | | String uid=info[1]; |
| | | String pwd=info[2]; |
| | | // List<MapItemValue> tmp= dmmsSite.getFtpList(site); |
| | | //for(int i=0;i<tmp.size();i++) |
| | | //{ |
| | | // if(tmp.get(i).getGroupName().equals("featureimg")) |
| | | // { |
| | | // url="/tcdaas/ndddash/"; |
| | | String [] fileNow=getFileList(ftp,uid,pwd,url,""); |
| | | return fileNow ; |
| | | // } |
| | | //} |
| | | //return new String[]{}; |
| | | } |
| | | |
| | | private byte[] getNDDDash(String[] info, String dirname, String filename) { |
| | | String url="";//info[3]; |
| | | String ftp=info[0]; |
| | | String uid=info[1]; |
| | | String pwd=info[2]; |
| | | |
| | | dirname= dirname.replace("[.]","_"); //防hack |
| | | filename= filename.replace("[/]","_"); //防hack |
| | | // List<MapItemValue> tmp= dmmsSite.getFtpList(site); |
| | | String[] temp=dirname.split("/"); |
| | | dirname= temp[temp.length-1]; |
| | | |
| | | // for(int i=0;i<tmp.size();i++) |
| | | // { |
| | | // if(tmp.get(i).getGroupName().equals("featureimg")) |
| | | // { |
| | | url=info[3]+dirname+"/"; |
| | | |
| | | |
| | | byte[] bytes= getFile(ftp,uid,pwd,url,filename); |
| | | return bytes; |
| | | // return new FileTransfer(filename, "application/octet-stream",bytes); |
| | | // } |
| | | // } |
| | | // return null; |
| | | } |
| | | |
| | | private String[] getFileList(String urlString,String ftpUser,String ftpPwd,String filePath, String filter){ |
| | | FTPClient ftpClient=null; |
| | | try{ |
| | | ftpClient= new FTPClient(); |
| | | }catch(Throwable ex) |
| | | { |
| | | ex.getMessage(); |
| | | } |
| | | |
| | | URL url; |
| | | |
| | | // /tcdaas/dsbncard -- for feature D |
| | | // /tcdaas/mhole -- for feature D |
| | | // /tcdaas/featureimg -- for feature U/D attached and LIST |
| | | try{ |
| | | url= new URL(urlString);//"ftp://20.20.1.3:21/"); |
| | | ftpClient.connect( |
| | | url.getHost(),url.getPort() |
| | | ); |
| | | |
| | | if(!ftpClient.login(ftpUser,ftpPwd))// "DMMS","DMMS000")) |
| | | { |
| | | return null; |
| | | } |
| | | int reply = ftpClient.getReplyCode(); |
| | | //FTPReply stores a set of constants for FTP reply codes. |
| | | |
| | | if (!FTPReply.isPositiveCompletion(reply)) |
| | | { |
| | | ftpClient.disconnect(); |
| | | return null; |
| | | } |
| | | ftpClient.setFileType(FTP.BINARY_FILE_TYPE); |
| | | //enter passive mode |
| | | ftpClient.enterLocalPassiveMode(); |
| | | |
| | | String[] filelist=ftpClient.listNames(filePath + (filter == null ? "" : filter)) ; |
| | | ftpClient.disconnect(); |
| | | return filelist; |
| | | }catch(MalformedURLException urlex) |
| | | { |
| | | |
| | | } catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | return new String[]{}; |
| | | } |
| | | |
| | | private byte[] getFile(String urlString,String ftpUser,String ftpPwd,String filePath,String fileName){ |
| | | FTPClient ftpClient= new FTPClient(); |
| | | |
| | | URL url; |
| | | byte[] result; |
| | | // /tcdaas/dsbncard -- for feature D |
| | | // /tcdaas/mhole -- for feature D |
| | | // /tcdaas/featureimg -- for feature U/D attached and LIST |
| | | try{ |
| | | url= new URL(urlString);//"ftp://20.20.1.3:21/"); |
| | | ftpClient.connect( |
| | | url.getHost(),url.getPort() |
| | | ); |
| | | |
| | | if(!ftpClient.login(ftpUser,ftpPwd))// "DMMS","DMMS000")) |
| | | { |
| | | return null; |
| | | } |
| | | int reply = ftpClient.getReplyCode(); |
| | | //FTPReply stores a set of constants for FTP reply codes. |
| | | |
| | | if (!FTPReply.isPositiveCompletion(reply)) |
| | | { |
| | | ftpClient.disconnect(); |
| | | return null; |
| | | } |
| | | ftpClient.setFileType(FTP.BINARY_FILE_TYPE); |
| | | //enter passive mode |
| | | ftpClient.enterLocalPassiveMode(); |
| | | |
| | | String[] filelist=ftpClient.listNames(filePath+ fileName) ; |
| | | ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
| | | if(filelist.length>0) |
| | | { |
| | | //if(ftpClient.retrieveFile(filelist[0],bos)) |
| | | if(ftpClient.retrieveFile(filePath+fileName,bos)) |
| | | { |
| | | result= bos.toByteArray() ; //negative numbers can use (b)&0xff |
| | | bos.close(); |
| | | } |
| | | else |
| | | { |
| | | result=null; |
| | | try{ |
| | | bos.close(); |
| | | } catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result=null; |
| | | } |
| | | |
| | | ftpClient.disconnect(); |
| | | |
| | | }catch(MalformedURLException urlex) |
| | | { |
| | | result=null; |
| | | } catch (Exception ex) |
| | | { |
| | | result=null; |
| | | } |
| | | return result; |
| | | } |
| | | public String[] getNDDStrings(String[] info, String filename) |
| | | { |
| | | byte[] temp; |
| | | // String stie=getUserDept(); |
| | | |
| | | // String[] list=dmmsFtpClient.getNDDList(stie) ; |
| | | String[] list =getNDDList(info) ; |
| | | |
| | | List<String> lstXML= new ArrayList<String>(); |
| | | for(int i=0;i<list.length;i++) |
| | | { |
| | | temp=getNDDDash(info, list[i], filename) ; |
| | | try{ |
| | | if(temp!=null) lstXML.add(new String(temp,"UTF-8")); |
| | | } catch (UnsupportedEncodingException ex) { |
| | | // this should never happen because "UTF-8" is hard-coded. |
| | | throw new IllegalStateException(ex); |
| | | } |
| | | } |
| | | if(lstXML.size()>0) |
| | | return lstXML. toArray(new String[0]); |
| | | |
| | | return new String[]{}; |
| | | } |
| | | |
| | | |
| | | private static Map<String, String> ditTyphoon = new HashMap<String, String>(); |
| | | |
| | | public String getTyphoonIDByName(Connection postsql,String typhoonName) throws SQLException |
| | | { |
| | | if(ditTyphoon.containsKey(typhoonName)) |
| | | { |
| | | return ditTyphoon.get(typhoonName); |
| | | }else |
| | | { |
| | | return readOrCreateTyphoonByName(postsql,typhoonName); |
| | | //readOrCreateTyphoon; |
| | | } |
| | | } |
| | | public String readOrCreateTyphoonByName(Connection postsql,String typhoonName) throws SQLException |
| | | { |
| | | //targetDataStore |
| | | //time of create should be modify |
| | | List<String[]> listDict; |
| | | String strSQLSelectProject=String.format( "select typhoon_id,typhoon_name from ndd.typhoonproject where typhoon_name='%s'",typhoonName); |
| | | String strSQLInsertProject=String.format( "insert into ndd.typhoonproject (typhoon_name,row_created) values ('%s',now())",typhoonName); |
| | | |
| | | listDict= sqlExecQuery(postsql,strSQLSelectProject,new String[]{}); |
| | | //boolean bCreate=false; |
| | | if(listDict!=null) |
| | | { |
| | | if(listDict.size()>0) |
| | | { |
| | | for(int i=0;i<listDict.size();i++) |
| | | { |
| | | return addDict(listDict.get(i)[0],listDict.get(i)[1]); |
| | | } |
| | | } |
| | | } |
| | | //bCreate=true; |
| | | //insert |
| | | logger.info(String.format("new project:%s",typhoonName)); |
| | | sqlExec(postsql,strSQLInsertProject,new String[]{}); |
| | | return readOrCreateTyphoonByName(postsql, typhoonName) ; |
| | | } |
| | | private synchronized static String addDict(String id,String typhoon) |
| | | { |
| | | if(ditTyphoon.containsKey(typhoon)) |
| | | return ditTyphoon.get(typhoon); |
| | | else |
| | | ditTyphoon.put(typhoon,id); |
| | | return id; |
| | | } |
| | | |
| | | public boolean jobOnLine(Connection postsql,String jobname) throws SQLException |
| | | { |
| | | //working when jobname=1 |
| | | //targetDataStore |
| | | //time of create should be modify |
| | | List<String[]> listDict; |
| | | String strSQLSelectSchedule=String.format( "select enabled from ndd.schedule where name='%s'",jobname); |
| | | |
| | | listDict= sqlExecQuery(postsql,strSQLSelectSchedule,new String[]{}); |
| | | if(listDict.size()==0)return false; // not exist ->dont work |
| | | return listDict.get(0)[0].equals("1"); |
| | | } |
| | | |
| | | public String jobOnlineStatus(Connection postsql,String jobname) throws SQLException |
| | | { |
| | | //working when jobname=1 |
| | | //targetDataStore |
| | | //time of create should be modify |
| | | List<String[]> listDict; |
| | | String strSQLSelectSchedule=String.format( "select status from ndd.typhoon_version where name='%s'",jobname); |
| | | |
| | | listDict= sqlExecQuery(postsql,strSQLSelectSchedule,new String[]{}); |
| | | if(listDict.size()==0)return ""; // not exist ->dont work |
| | | return listDict.get(0)[0]; |
| | | } |
| | | } |