📄 genericwebeventprocessor.java
字号:
uiWebScreenSection);
return displayHtml;
}
//-------------------------------------------------------------------------
// RETRIEVE - Retrieves an entity and associated entities from the data base.
//-------------------------------------------------------------------------
protected int processRetrieve(UserInfo userInfo,
UIWebScreenSection uiWebScreenSection, int retrieveMethod,
HttpServletRequest request, HttpServletResponse response,
GenericDelegator delegator, GenericEventProcessor eventProcessor,
DataMatrix dataMatrix, StringBuffer queryIdBuffer, String action)
throws GenericEntityException {
UtilTimer timer = new UtilTimer();
if (TIMER) {
timer.timerString(1,
"[GenericWebEventProcessor.processRetrieve] Start");
}
int status = STATUS_CONTINUE;
String queryId = queryIdBuffer.toString();
// Get info about the screen.
String screenName = uiWebScreenSection.getUiScreen().getScreenName();
// Get info about the screen section.
String sectionId = uiWebScreenSection.getSectionId();
String sectionName = uiWebScreenSection.getSectionName();
int layoutTypeId = uiWebScreenSection.getLayoutTypeId();
String primaryEntityName = uiWebScreenSection.getUiScreenSectionEntity(0)
.getUiEntity()
.getEntityName();
Debug.logVerbose("Primary entity name: " + primaryEntityName, module);
ModelEntity primaryME = uiWebScreenSection.getUiScreenSectionEntity(0)
.getUiEntity().getModelEntity();
List primaryPkFieldNames = uiWebScreenSection.getUiScreenSectionEntity(0)
.getUiEntity()
.getPrimaryKeyFieldNames();
// Specify how the primary entity will be retrieved.
HashMap fields = new HashMap();
ArrayList orderBy = new ArrayList();
QueryInfo queryInfo = new QueryInfo(delegator, primaryEntityName);
Enumeration params = null;
String searchAttribValue = "";
String searchEntityName = "";
String searchAttribName = "";
String queryName = "";
String listName = "";
EntityComparisonOperator entityOperator = null;
List relatedSearchClauses = new LinkedList();
List selectFields = new ArrayList();
// Note that we only care about primary entity fields in the select at the moment.
// TODO: change the queries so that all related data is retrieved as part of the main retrieve
// which it is, but the original code was written before dynamicViewEntities were added
int selectFieldListSize = uiWebScreenSection.getUiFieldList().size();
for (int fieldNbr = 0; fieldNbr < selectFieldListSize; fieldNbr++) {
UIFieldInfo fieldInfo = uiWebScreenSection.getUiField(fieldNbr);
String fieldName = fieldInfo.getUiAttribute().getAttributeName();
String entityName = fieldInfo.getUiAttribute().getUiEntity().getEntityName();
if ( entityName.equals(primaryEntityName) )
selectFields.add(fieldName);
/* if ( fieldInfo.getIsVisible() )
{
String fieldName = fieldInfo.getUiAttribute().getAttributeName();
String entityName = fieldInfo.getUiAttribute().getUiEntity().getEntityName();
String aliasName = fieldName;
if ( ! entityName.equals(primaryEntityName))
aliasName = entityName + "." + fieldName;
selectFields.add(aliasName);
}
*/
}
queryInfo.setSelectFields(selectFields);
if (request.getParameter("queryName") != null) {
queryName = request.getParameter("queryName");
}
if (request.getParameter("listName") != null) {
listName = request.getParameter("listName");
if ( queryName.length() < 1)
queryName = listName;
}
// HashMap querySaveMap = new HashMap();
UIQuery uiQuery = null;
// Specify how associated entities will be retrieved.
Iterator uiScreenSectionEntityI = uiWebScreenSection.getUiScreenSectionEntityList()
.iterator();
uiScreenSectionEntityI.next(); // Pass up the primary entity.
while (uiScreenSectionEntityI.hasNext()) {
UIScreenSectionEntity uiScreenSectionEntity = (UIScreenSectionEntity) uiScreenSectionEntityI.next();
relatedSearchClauses.add(uiScreenSectionEntity);
}
uiScreenSectionEntityI = null; // Reset the iterator.
switch (retrieveMethod) {
case GenericEventProcessor.RETRIEVE_METHOD_ALL:
// Find all entities of this type.
// Don't need to populate the fields map.
break;
case GenericEventProcessor.RETRIEVE_METHOD_AND:
// Find the main entity(ies) by building a WHERE clause using "=" and AND.
throw new GenericEntityException(
"RETRIEVE_METHOD_AND not implemented yet.");
case GenericEventProcessor.RETRIEVE_METHOD_CLAUSE:
if (TIMER) {
timer.timerString(1,
"[GenericWebEventProcessor.processRetrieve] Start RETRIEVE_METHOD_CLAUSE");
}
HashMap joinedEntities = new HashMap();
joinedEntities.put(primaryEntityName, "Y");
// Find the main entity(ies) by building a WHERE clause using LIKE and AND, with one or more tables in the FROM clause.
// First join all secondary screen section entities in the WHERE and FROM clauses in case
// we are going to use query values from them.
Iterator relatedClauseI = relatedSearchClauses.iterator();
while (relatedClauseI.hasNext()) {
UIScreenSectionEntity uiScreenSectionEntity = (UIScreenSectionEntity) relatedClauseI.next();
String relationTitle = uiScreenSectionEntity.getRelationTitle();
String relatedEntityName = uiScreenSectionEntity.getUiEntity().getEntityName();
boolean isOuterJoin = uiScreenSectionEntity.getIsOuterJoined();
String relatedAndFields = uiScreenSectionEntity.getRelationByAndFields();
Debug.logVerbose("Adding relation clauses for " +
relationTitle + "/" + relatedEntityName, module);
eventProcessor.addOneRelationClause(delegator, relationTitle, relatedAndFields,
relatedEntityName, primaryEntityName, primaryME, isOuterJoin,
queryInfo);
joinedEntities.put(relatedEntityName, "Y");
}
Debug.logVerbose(
"queryId at beginning of RETRIEVE_METHOD_CLAUSE section: " +
queryId, module);
if (queryId.equalsIgnoreCase("NONE")) {
// Don't retrieve any data. The calling link specified to use the last query, but there wasn't one.
return STATUS_CONTINUE;
} else if (!queryId.equals("")) {
// User selected a saved query. Get it from the data base.
uiQuery = new UIQuery(queryId, delegator);
if (!uiQuery.getQueryId().equals("")) {
// Query was found.
uiQuery.appendEntityClauses(delegator, queryInfo);
// // Store the attribute ID and value in the query save map.
// querySaveMap.put(attributeId, searchAttribValue);
}
// add extra clauses from the hidden query parameters in case this is a detail screen
addUseQueryParameterClauses(uiWebScreenSection, queryInfo,
relatedSearchClauses, primaryEntityName, request);
} else {
// Brand new query. Process all the parameters coming in through the request object to get the values to search by.
uiQuery = new UIQuery();
String queryListMaxRows = request.getParameter("queryListMaxRows");
// if queryListMaxRows is set, then we are using advanced query mode
if ( (queryListMaxRows != null ) && ( queryListMaxRows.length() > 0) )
{
int maxRows = Integer.valueOf(queryListMaxRows).intValue();
for ( int i=1; i <= maxRows; i++ )
{
String qlFieldInfo = request.getParameter("queryListField" + i);
if ( ( qlFieldInfo != null ) && ( qlFieldInfo.length() > 0 ) )
{
StringTokenizer tokSemi = new StringTokenizer(qlFieldInfo,";");
String qlFieldName = "";
String qlAttributeId = "";
String qlDisplayObjectId = "";
String qlDisplayTypeId = "";
if (tokSemi.countTokens() == 4) {
qlFieldName = tokSemi.nextToken();
qlAttributeId = tokSemi.nextToken();
qlDisplayTypeId = tokSemi.nextToken();
qlDisplayObjectId = tokSemi.nextToken();
}
else
{
qlFieldName = qlFieldInfo;
}
String qlOperator = request.getParameter("queryListOperator" + i);
String qlValue = request.getParameter("queryListValue" + i);
if ( qlOperator.equals("like"))
qlValue = "%" + qlValue.replace('*','%') + "%";
else if ( qlOperator.equals("startsWith"))
{
qlValue = qlValue.replace('*','%') + "%";
qlOperator = "like";
}
else if ( qlOperator.equals("endsWith"))
{
qlValue = "%" + qlValue.replace('*','%');
qlOperator = "like";
}
searchEntityName = UIWebUtility.getEntityFromParamName(qlFieldName);
String hasJoin = (String) joinedEntities.get(searchEntityName);
if ( ( hasJoin == null ) || ( !hasJoin.equals("Y")) )
{
eventProcessor.addOneRelationClause(delegator, "", "",searchEntityName, primaryEntityName, primaryME, false, queryInfo);
joinedEntities.put(searchEntityName, "Y");
}
if ((searchEntityName == null) ||
searchEntityName.equals("")) {
searchEntityName = primaryEntityName;
}
searchAttribName = UIWebUtility.getAttribFromParamName(qlFieldName);
entityOperator = EntityOperator.lookupComparison(qlOperator);
Object searchValue = qlValue;
// If this is a set operator, convert the String param into a comma separated List
if ( (entityOperator.equals(EntityOperator.IN)) || (entityOperator.equals(EntityOperator.NOT_IN)) || (entityOperator.equals(EntityOperator.BETWEEN)))
{
List valueList = new ArrayList();
StringTokenizer tokComma = new StringTokenizer(qlValue, ",");
while (tokComma.hasMoreTokens()) {
String valueItem = tokComma.nextToken();
valueList.add(valueItem);
}
searchValue = valueList;
}
try {
// Figure out the attribute ID for the UiAttribute this parameter corresponds to so we can
// save the query.
String attributeId = UIWebUtility.getAttributeId(delegator,
searchAttribName, searchEntityName);
// Generate an entry in the WHERE clause for this attribute. The entityOperator
// is returned in case appendEntityClause changes it.
// NOTE: changes here must also be applied to UIQuery.appendEntityClauses() to work with saved queries
//
if ( qlDisplayTypeId.equals(UIDisplayObject.DISPLAY_TYPE_SELECT) || qlDisplayTypeId.equals(UIDisplayObject.DISPLAY_TYPE_SEARCH_TEXT))
{
String aliasName = searchEntityName + searchAttribName + "srch";
UIUtility.addSelectSearch( queryInfo, qlDisplayObjectId, searchEntityName, searchAttribName, aliasName, entityOperator, searchValue );
}
else
{
if ( searchValue instanceof String )
{
entityOperator = EventUtility.appendEntityClause(searchEntityName,
searchAttribName, (String) searchValue,
entityOperator, queryInfo);
}
else if ( searchValue instanceof Collection)
{
entityOperator = EventUtility.appendEntityClause(searchEntityName,
searchAttribName, (Collection) searchValue,
entityOperator, queryInfo);
}
else
throw new IllegalArgumentException("Query Param must be String or Collection");
}
// Store the attribute ID and value in the query save map.
// querySaveMap.put(attributeId, searchAttribValue);
uiQuery.addUiQueryValue(attributeId, entityOperator, qlValue, qlDisplayTypeId, qlDisplayObjectId, delegator);
} catch (GenericEntityException e) {
//this parameter was not associated with a column in a table, so skip it
Debug.logVerbose("skipping parameter which is not an entity attribute: " + qlFieldName, module);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -