package demo42;
import java.sql.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
import org.openswing.swing.lookup.client.*;
import org.openswing.swing.message.receive.java.*;
import org.openswing.swing.message.send.java.*;
import org.openswing.swing.server.*;
import org.openswing.swing.tree.java.*;
import org.openswing.swing.util.client.ClientSettings;
/**
* <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.setLookupGridController(new LookupGridController() {
/**
* Method used to define the background color for each cell of the grid.
* @param rowNumber selected row index
* @param attributeName attribute name related to the column currently selected
* @param value object contained in the selected cell
* @return background color of the selected cell
*/
public Color getBackgroundColor(int row,String attributeName,Object value) {
DeptVO vo = (DeptVO)model.getObjectForRow(row);
if (vo.getDeptCode().equals("S"))
return Color.orange;
return super.getBackgroundColor(row,attributeName,value);
}
});
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("demo42.DeptVO");
this.addLookup2ParentLink("deptCode", "deptCode");
this.addLookup2ParentLink("description", "deptDescription");
this.setAllColumnVisible(true);
this.setVisibleColumn("address",false);
this.setVisibleColumn("status",false);
this.setPreferredWidthColumn("description", 200);
this.setFilterableColumn("deptCode",true);
this.setSortableColumn("deptCode",true);
this.setSortableColumn("description",true);
this.setFramePreferedSize(new Dimension(350,500));
}
}