package soft_master.codebox;

import com.borland.dx.dataset.*;
import com.borland.dx.sql.dataset.*;
import java.util.*;

/**
 * <p>Title: Example</p>
 * <p>Description: A default JBuilder application</p>
 * <p>Copyright: Copyright (c) 2008</p>
 * <p>Company: EscortMaster</p>
 * @author Sanchess
 * @version 1.0
 */

public class DM implements DataModule {
  private static DM myDM;
  private static final String firstName = "CL_FirstName", lastName = "CL_LastName", fatherName = "CL_FatherName";
  ResourceBundle sqlRes = ResourceBundle.getBundle("soft_master.codebox.SqlRes");
  Database database = new Database();
  QueryDataSet queryDataSetClients = new QueryDataSet();
  QueryDataSet queryDataSetFlats = new QueryDataSet();
  Column firstLastFatherCalc = new Column();
  Column colCL_Register = new Column();
  public DM() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    colCL_Register.setColumnName("CL_Register");
    colCL_Register.setDataType(com.borland.dx.dataset.Variant.INT);
    colCL_Register.setRowId(true);
    colCL_Register.setSchemaName("\"D:\\SANCHESS\\JBPROJECT\\SimpleManager\\Real\"");
    colCL_Register.setTableName("tblCLIENTS");
    colCL_Register.setServerColumnName("CL_Register");
    colCL_Register.setSqlType(4);
    queryDataSetFlats.setMetaDataUpdate(MetaDataUpdate.TABLENAME+MetaDataUpdate.PRECISION+MetaDataUpdate.SCALE+MetaDataUpdate.SEARCHABLE);
    queryDataSetFlats.setQuery(new QueryDescriptor(database, sqlRes.getString("tblFLATS"), null, true, Load.ALL));
    firstLastFatherCalc.setCalcType(CalcType.CALC);
    firstLastFatherCalc.setCaption("Name");
    firstLastFatherCalc.setColumnName("firstLastFatherCalc");
    firstLastFatherCalc.setDataType(Variant.STRING);
    firstLastFatherCalc.setPreferredOrdinal(1);
    firstLastFatherCalc.setWidth(23);

    queryDataSetClients.setMetaDataUpdate(MetaDataUpdate.TABLENAME+MetaDataUpdate.PRECISION+MetaDataUpdate.SCALE+MetaDataUpdate.SEARCHABLE);
    queryDataSetClients.setQuery(new QueryDescriptor(database, sqlRes.getString("tblCLIENTS"), null, true, Load.AS_NEEDED));
    database.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:odbc:ODBC-Access-Real", "", "", false, "sun.jdbc.odbc.JdbcOdbcDriver"));
    database.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);
    queryDataSetFlats.setMasterLink(new MasterLinkDescriptor(queryDataSetClients, new String[] {"CL_Register"}, new String[] {"CL_Register"}, true, true, true));

    queryDataSetClients.addCalcFieldsListener(new CalcFieldsListener() {
      public void calcFields(ReadRow readRow, DataRow dataRow, boolean isPosted) {
          String calculatedValue = readRow.getString(lastName);
          calculatedValue = calculatedValue + " " + readRow.getString(firstName) + " " + readRow.getString(fatherName);
          dataRow.setString("firstLastFatherCalc", calculatedValue);
        if (!isPosted) {
          queryDataSetClients.saveChanges();
        }
      }
    });
      queryDataSetClients.setColumns(new Column[] {colCL_Register, firstLastFatherCalc});
  }

  public static DM getDataModule() {
    if (myDM == null) {
      myDM = new DM();
    }
    return myDM;
  }

  public Database getDatabase() {
    return database;
  }

  public QueryDataSet getQueryDataSetClients() {
    return queryDataSetClients;
  }

  public QueryDataSet getQueryDataSetFlats() {
    return queryDataSetFlats;
  }

  public String getFirstName() {
    return queryDataSetClients.getString(firstName);
  }

  public String getLastName() {
    return queryDataSetClients.getString(lastName);
  }

  public String getFatherName() {
    return queryDataSetClients.getString(fatherName);
  }

  public void setFirstName(String fName) {
     queryDataSetClients.setString(firstName, fName);
     queryDataSetClients.post();
  }

  public void setLastName(String lName) {
     queryDataSetClients.setString(lastName, lName);
     queryDataSetClients.post();
  }

  public void setFatherName(String ftrName) {
     queryDataSetClients.setString(fatherName, ftrName);
     queryDataSetClients.post();
  }

  public void setFIO(String fName, String lName, String ftrName) {
     queryDataSetClients.setString(firstName, fName);
     queryDataSetClients.setString(lastName, lName);
     queryDataSetClients.setString(fatherName, ftrName);
     queryDataSetClients.post();
  }
}