package com.k_int.it4me;

//import java.io.FileOutputStream;
import java.sql.*;
import java.util.Date;
import java.util.Properties;
import com.k_int.ia.data_upload.dto.*;
import com.k_int.ia.data_upload.ConfigPair;
import com.k_int.ia.data_upload.ConfigTypes;
import com.k_int.ia.data_upload.DataPublishController;
import com.k_int.ia.data_upload.UploadStatus;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class BarnsleyPublisher extends com.k_int.ia.data_upload.ThreadedDataPublisher{

  static final String GET_ORG_DETS_SQL = "Select Number, OfficialName, AltName, MainContact, Street, Street2, Street3, District, City, Postcode, MainPhone, OtherPhone, Fax, Email, Website, MeetingVenue, MeetingTimes, Details, Subject, FeesAndCharges, NationalBody, AmendDate, Internet from tblLocalSocieties";
   
 /** static final String[] config_fields = { "name", 
                                          "publishURL",
                                          "ODBCDSNName",
                                          "targetCollection", 
                                          "publisherIdentity", 
                                          "publisherCredentials"};
  **/
  
static ConfigPair[] config_fields; //= new ArrayList();
  
  static
  {
      config_fields = new ConfigPair[6];
      ConfigPair pair = new ConfigPair();
      pair.setFieldName("name");
      pair.setFieldType(ConfigTypes.TEXTFIELD);    
      config_fields[0]=pair;
     
      pair = new ConfigPair();
      pair.setFieldName("publishURL");
      pair.setFieldType(ConfigTypes.TEXTAREA);
      config_fields[1]=pair;
      
      pair = new ConfigPair();
      pair.setFieldName("ODBCDSNName");
      pair.setFieldType(ConfigTypes.TEXTFIELD);
      config_fields[2]=pair;
      
      pair = new ConfigPair();
      pair.setFieldName("targetCollection");
      pair.setFieldType(ConfigTypes.TEXTFIELD);
      config_fields[3]=pair;
      
      pair = new ConfigPair();
      pair.setFieldName("publisherIdentity");
      pair.setFieldType(ConfigTypes.TEXTFIELD);
      config_fields[4]=pair;
      
      pair = new ConfigPair();
      pair.setFieldName("publisherCredentials");
      pair.setFieldType(ConfigTypes.PASSWORD);
      config_fields[5]=pair;
     
  }
  
  public static Log log = LogFactory.getLog(HelpYourselfPublisher.class);
   
  private String targetCollection = "Barnsley";
  private String odbc_dsn_name="jdbc:odbc:LSLIST";
  private String jdbc_driver_name = "sun.jdbc.odbc.JdbcOdbcDriver";
 
  private transient Connection conn = null;
  private transient PreparedStatement get_org_details_ps = null;
  
 
 
  public void run() {
    log.debug("Starting run");
  
    long start_date = 0;
    try {
      Class driver = Class.forName(jdbc_driver_name);
      conn = DriverManager.getConnection(odbc_dsn_name);
     
      if ( conn != null ) 
      { 
        try {
          log.debug(Messages.getString("HelpYourselfPublisher.21")+new Date(start_date)); //$NON-NLS-1$
          get_org_details_ps = conn.prepareStatement(GET_ORG_DETS_SQL);
          get_org_details_ps.clearParameters();
          // get_org_details_ps.setDate(1,new java.sql.Date(start_date));
          ResultSet rs =  get_org_details_ps.executeQuery();
          while (rs.next()) {
            String number = rs.getString(1); 
            String official_name = rs.getString(2); 
            String alt_name = rs.getString(3); 
            String main_contact = rs.getString(4); 
            String street = rs.getString(5); 
            String street2 = rs.getString(6); 
            String street3 = rs.getString(7); 
            String district = rs.getString(8); 
            String city = rs.getString(9); 
            String postcode = rs.getString(10); 
            String main_phone = rs.getString(11); 
            String other_phone = rs.getString(12); 
            String fax = rs.getString(13); 
            String email = rs.getString(14); 
            String website = rs.getString(15); 
            String meeting_venue = rs.getString(16); 
            String meeting_times = rs.getString(17); 
            String details = rs.getString(18); 
            String subject = rs.getString(19); 
            String fees_and_charges = rs.getString(20); 
            String national_body = rs.getString(21); 
            String amend_date = rs.getString(22); 
            String internet = rs.getString(23);
            
            String default_authority = "Barnsley-UK";
            log.debug(Messages.getString("HelpYourselfPublisher.22")+number); //$NON-NLS-1$
            ResourceDTO result = new ResourceDTO();
            result.setIdentifier("Barnsley-UK:"+number);
            result.setTitle(official_name);
            result.setDescription(details);
            result.setAlternate_title(alt_name);
            //result.setURL()?
            result.getSubjects().add(new SubjectDTO(default_authority,subject));
            AvailabilityDTO availability = new AvailabilityDTO();
            availability.setCost(fees_and_charges);
            availability.setTimetextual(meeting_times);
            //availability.getAddresses().add(new AddressDTO("Corresp", addr_line_1, addr_line_2, addr_line_4, addr_line_4,null,null,postcode,null));
            //availability.getContacts().add(new ContactDTO(null, telno, null, null, null, null));
            result.getAvailability().add(availability);
   
            log.debug("Start Upload");
            controller.upload(result,
                              "Barnsley-UK:"+number,
                              "Barnsley",  // Record Source
                              "BARNSLEY",                      // Publisher
                              "BARNSLEY-Credentials",          // Publisher Credentials
                              getPublishURL(),
                              getTargetCollection(),
                              default_authority);
            log.debug("Done Upload");
            update_count++;
          }
          setStatus(UploadStatus.COMPLETED_OK);
          rs.close();
          get_org_details_ps.close();
          conn.close();
         // setStatus(Messages.getString("HelpYourselfPublisher.26")); //$NON-NLS-1$
         
          log.debug(Messages.getString("HelpYourselfPublisher.23")); //$NON-NLS-1$
        } catch ( com.k_int.ia.data_upload.DataPublishException dpe ) {
          dpe.printStackTrace();
        } catch (SQLException sqle) {
          log.debug(Messages.getString("HelpYourselfPublisher.24")); //$NON-NLS-1$
          sqle.printStackTrace();
        }
      }
      else {
        log.debug(Messages.getString("HelpYourselfPublisher.25")); //$NON-NLS-1$
      }
    } catch (ClassNotFoundException cnfe) {
      log.debug(Messages.getString("HelpYourselfPublisher.19")); //$NON-NLS-1$
      cnfe.printStackTrace();
    } catch (SQLException sqle) {
      log.debug(Messages.getString("HelpYourselfPublisher.20")); //$NON-NLS-1$
      sqle.printStackTrace();
    }
    finally {
      try {
                 
              get_org_details_ps.close();          
              conn.close();
      }
      catch ( Exception e ) {
        e.printStackTrace();
        //setStatus("Failed");
      }
    }
    //setStatus(Messages.getString("HelpYourselfPublisher.26")); //$NON-NLS-1$
    if(this.getStatus()==UploadStatus.BUSY)
        this.setStatus(UploadStatus.FAILED);
    running = false;
    controller.notifyComplete(this);
    log.debug("Completed run");
  }
 
  public String getODBCDSNName() {
    return odbc_dsn_name;
  }

  public void setODBCDSNName(String odbc_dsn_name) {
    this.odbc_dsn_name = odbc_dsn_name;    
  }
 
  public com.k_int.ia.codbif.xdevicegui.defs.XDLayoutHDO getLayout() {
    return new com.k_int.ia.codbif.xdevicegui.defs.XDLayoutHDO(
        "Barnsley Publisher",
        "com.k_int.it4me.messages",
        new com.k_int.ia.codbif.xdevicegui.defs.XDNameValuePairPanel(config_fields));
  }
  public String getTargetCollection() {
    return targetCollection;
  }
  public void setTargetCollection(String targetCollection) {
    this.targetCollection = targetCollection;
  }
 
}
