package demo29;
import org.openswing.swing.lookup.client.LookupController;
import org.openswing.swing.lookup.client.LookupDataLocator;
import org.openswing.swing.message.receive.java.*;
import java.sql.*;
import java.util.*;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultMutableTreeNode;
import org.openswing.swing.server.QueryUtil;
import org.openswing.swing.message.send.java.GridParams;
import org.openswing.swing.tree.java.OpenSwingTreeNode;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Lookup Controller that validate dept codes.</p>
* <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
* <p> </p>
* @author Mauro Carniel
* @version 1.0
*/
public class DeptLookupController extends LookupController {
private Connection conn = null;
public DeptLookupController(Connection conn) {
this.conn = conn;
this.setLookupDataLocator(new LookupDataLocator() {
/**
* Method called by lookup controller when validating code.
* @param code code to validate
* @return code validation response: VOListResponse if code validation has success, ErrorResponse otherwise
*/
public Response validateCode(String code) {
try {
String sql = "select DEPT.DEPT_CODE,DEPT.DESCRIPTION,DEPT.ADDRESS,DEPT.STATUS from DEPT where STATUS='E' and DEPT_CODE='" +code + "'";
// mapping between attributes and database fields...
Map attribute2dbField = new HashMap();
attribute2dbField.put("deptCode","DEPT.DEPT_CODE");
attribute2dbField.put("description","DEPT.DESCRIPTION");
attribute2dbField.put("address","DEPT.ADDRESS");
attribute2dbField.put("status","DEPT.STATUS");
return QueryUtil.getQuery(
DeptLookupController.this.conn,
sql,
new ArrayList(), // list of values linked to "?" parameters in sql
attribute2dbField,
DeptVO.class, // v.o. to dinamically create for each row...
"Y",
"N",
new GridParams(),
true // log query...
);
}
catch (Exception ex) {
ex.printStackTrace();
return new ErrorResponse(ex.getMessage());
}
/*
// an alternative way: you can define your own business logic to retrieve data and adding filtering/sorting conditions at hand...
Statement stmt = null;
try {
stmt = DeptLookupController.this.conn.createStatement();
ResultSet rset = stmt.executeQuery(
"select DEPT.DEPT_CODE,DEPT.DESCRIPTION,DEPT.ADDRESS from DEPT where STATUS='E' and DEPT_CODE='" +code + "'");
ArrayList list = new ArrayList();
while (rset.next()) {
DeptVO vo = new DeptVO();
vo.setDeptCode(rset.getString(1));
vo.setDescription(rset.getString(2));
vo.setAddress(rset.getString(3));
list.add(vo);
}
if (list.size() > 0)
return new VOListResponse(list, false, list.size());
else
return new ErrorResponse("Code not valid");
}
catch (SQLException ex) {
ex.printStackTrace();
return new ErrorResponse(ex.getMessage());
}
finally {
try {
stmt.close();
}
catch (SQLException ex1) {
}
}
*/
}
/**
* Method called by lookup controller when user clicks on lookup button.
* @param action fetching versus: PREVIOUS_BLOCK_ACTION, NEXT_BLOCK_ACTION or LAST_BLOCK_ACTION
* @param startIndex current index row on grid to use to start fetching data
* @param filteredColumns filtered columns
* @param currentSortedColumns sorted columns
* @param currentSortedVersusColumns ordering versus of sorted columns
* @param valueObjectType type of value object associated to the lookup grid
* @return list of value objects to fill in the lookup grid: VOListResponse if data fetching has success, ErrorResponse otherwise
*/
public Response loadData(
int action,
int startIndex,
Map filteredColumns,
ArrayList currentSortedColumns,
ArrayList currentSortedVersusColumns,
Class valueObjectType
) {
try {
String sql = "select DEPT.DEPT_CODE,DEPT.DESCRIPTION,DEPT.ADDRESS,DEPT.STATUS from DEPT where STATUS='E' ";
// mapping between attributes and database fields...
Map attribute2dbField = new HashMap();
attribute2dbField.put("deptCode","DEPT.DEPT_CODE");
attribute2dbField.put("description","DEPT.DESCRIPTION");
attribute2dbField.put("address","DEPT.ADDRESS");
attribute2dbField.put("status","DEPT.STATUS");
return QueryUtil.getQuery(
DeptLookupController.this.conn,
sql,
new ArrayList(), // list of values linked to "?" parameters in sql
attribute2dbField,
DeptVO.class, // v.o. to dinamically create for each row...
"Y",
"N",
new GridParams(
action,
startIndex,
filteredColumns,
currentSortedColumns,
currentSortedVersusColumns,
new HashMap() // other params...
),
50, // pagination size...
true // log query...
);
}
catch (Exception ex) {
ex.printStackTrace();
return new ErrorResponse(ex.getMessage());
}
/*
// an alternative way: you can define your own business logic to retrieve data and adding filtering/sorting conditions at hand...
Statement stmt = null;
try {
stmt = DeptLookupController.this.conn.createStatement();
ResultSet rset = stmt.executeQuery(
"select DEPT.DEPT_CODE,DEPT.DESCRIPTION,DEPT.ADDRESS from DEPT where STATUS='E' ");
ArrayList list = new ArrayList();
while (rset.next()) {
DeptVO vo = new DeptVO();
vo.setDeptCode(rset.getString(1));
vo.setDescription(rset.getString(2));
vo.setAddress(rset.getString(3));
list.add(vo);
}
return new VOListResponse(list, false, list.size());
}
catch (SQLException ex) {
ex.printStackTrace();
return new ErrorResponse(ex.getMessage());
}
finally {
try {
stmt.close();
}
catch (SQLException ex1) {
}
}
*/
}
/**
* Method called by the TreePanel to fill the tree.
* @return a VOReponse containing a DefaultTreeModel object
*/
public Response getTreeModel(JTree tree) {
return new VOResponse(new DefaultTreeModel(new OpenSwingTreeNode()));
}
});
this.setLookupValueObjectClassName("demo29.DeptVO");
this.addLookup2ParentLink("deptCode", "deptCode");
this.addLookup2ParentLink("description", "deptDescription");
this.setAllColumnVisible(true);
this.setVisibleColumn("address",false);
this.setVisibleColumn("status",false);
this.setPreferredWidthColumn("description", 200);
}
}