on 04-14-2008 3:17 PM
Hi,
I implemented a table filter as per description in: https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/5439. [original link is broken] [original link is broken] [original link is broken]
If my search has results everything works fine, but when my search should deliver an empty table, I get the following error:
java.lang.NullPointerException
at at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.LinkToActionAdapter.getSelection(LinkToActionAdapter.java:1225)
at at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:424)
at at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at at com.sap.tc.ur.renderer.ie6.SapTableCellRenderer.renderSapTableGenericCellFragment(SapTableCellRenderer.java:1212)
at at com.sap.tc.ur.renderer.ie6.SapTableCellRenderer.renderSapTableCellFragment(SapTableCellRenderer.java:209)
Any ideas?
Best regards
Roman
Hey
we've got a very similar problem. also with LinkToAction and Filter.
I solved the problem (my issue).
The attribute "visibleRowCount" of the UI table element was set on a context variable.
I changed "visibleRowCount" to a fix value (-> 10) and the exception doesn't appear anymore!
Maybe it will help you.
Cu
-Klaudio
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
This is indeed a strange error. The LinkToActionAdapter class is an internal class that adapts the interface expected by the HTML renderer to the Web Dynpro UI element implementation. The method where the NPE occurs only checks if there is a menu attached at the link and delegates to separate objects accordingly. A NPE at this point means the LinkToAction itself is NULL which normally cannot be the case.
Maybe you can debug a little bit more with this information.
Armin
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Still the same exception...
java.lang.NullPointerException
at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.LinkToActionAdapter.getSelection(LinkToActionAdapter.java:1225)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:424)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.SapTableCellRenderer.renderSapTableGenericCellFragment(SapTableCellRenderer.java:1212)
at com.sap.tc.ur.renderer.ie6.SapTableCellRenderer.renderSapTableCellFragment(SapTableCellRenderer.java:209)
at com.sap.tc.ur.renderer.ie6.SapTableCellRenderer.render(SapTableCellRenderer.java:84)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.SapTableRowRenderer.renderSapTableRowFragment(SapTableRowRenderer.java:126)
at com.sap.tc.ur.renderer.ie6.SapTableRowRenderer.render(SapTableRowRenderer.java:54)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.SapTableDefaultBodyRenderer.renderSapTableDefaultBodyFragment(SapTableDefaultBodyRenderer.java:214)
at com.sap.tc.ur.renderer.ie6.SapTableDefaultBodyRenderer.render(SapTableDefaultBodyRenderer.java:44)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.SapTableRenderer.renderSapTableFragment(SapTableRenderer.java:795)
at com.sap.tc.ur.renderer.ie6.SapTableRenderer.render(SapTableRenderer.java:84)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutItemFragment(FlowLayoutRenderer.java:288)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutFragment(FlowLayoutRenderer.java:244)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.render(FlowLayoutRenderer.java:49)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.ScrollContainerRenderer.renderScrollContainerFragment(ScrollContainerRenderer.java:619)
at com.sap.tc.ur.renderer.ie6.ScrollContainerRenderer.render(ScrollContainerRenderer.java:74)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutItemFragment(FlowLayoutRenderer.java:288)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutFragment(FlowLayoutRenderer.java:244)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.render(FlowLayoutRenderer.java:49)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.GroupRenderer.renderGroupFragment(GroupRenderer.java:1184)
at com.sap.tc.ur.renderer.ie6.GroupRenderer.render(GroupRenderer.java:74)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutItemFragment(FlowLayoutRenderer.java:288)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutFragment(FlowLayoutRenderer.java:244)
at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.render(FlowLayoutRenderer.java:49)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.ur.renderer.ie6.ScrollContainerRenderer.renderScrollContainerFragment(ScrollContainerRenderer.java:619)
at com.sap.tc.ur.renderer.ie6.ScrollContainerRenderer.render(ScrollContainerRenderer.java:74)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.UiWindowRenderer.render(UiWindowRenderer.java:52)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendHtml(HtmlClient.java:1056)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.fillDynamicTemplateContext(HtmlClient.java:456)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendResponse(HtmlClient.java:1240)
at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.retrieveData(HtmlClient.java:252)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doRetrieveData(WindowPhaseModel.java:595)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:156)
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:335)
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:143)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:319)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:713)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:666)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:250)
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:149)
at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:62)
at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doPost(DispatcherServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:401)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:386)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:364)
at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:1039)
at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:265)
at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:175)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(AccessController.java:207)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:102)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:172)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I already use Hashtable, so that didn´t solve my problem.
Thanks anyway, any other solutions?
Edited by: Roman Götte on Apr 15, 2008 8:50 AM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hi,
it should display an empty table when there is no match .
i think the problem might be in the table filter class
use this code for table filter
package **********;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Date;
import java.text.Collator;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.StringTokenizer;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDAbstractDropDownByIndex;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDAbstractDropDownByKey;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDAbstractInputField;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDAbstractTableColumn;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDCaption;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDCheckBox;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDLink;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDProgressIndicator;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDRadioButton;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDTable;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDTableCellEditor;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDTableColumn;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDTableColumnGroup;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDTextEdit;
import com.sap.tc.webdynpro.clientserver.uielib.standard.api.IWDTextView;
import com.sap.tc.webdynpro.progmodel.api.IWDAction;
import com.sap.tc.webdynpro.progmodel.api.IWDAttributeInfo;
import com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent;
import com.sap.tc.webdynpro.progmodel.api.IWDNode;
import com.sap.tc.webdynpro.progmodel.api.IWDNodeElement;
import com.sap.tc.webdynpro.progmodel.api.IWDViewElement;
import com.sap.tc.webdynpro.progmodel.api.WDCopyService;
import com.sap.tc.webdynpro.services.sal.localization.api.WDResourceHandler;
/**
Helper class that makes a Web Dynpro table filterable.
*/
public final class TableFilter {
public TableFilter(IWDTable table, IWDAction filterAction, IWDNode sourceNode, Hashtable
hashicons) {
init(table, filterAction, sourceNode, hashicons);
}
private void init(IWDTable table, IWDAction filterAction, IWDNode sourceNode, Hashtable
hashicons) {
this.table = table;
// sanity checks
if (sourceNode == null)
throw new IllegalArgumentException("SourceNode must be given");
if (filterAction == null)
throw new IllegalArgumentException("Filter action must be given");
if (table == null)
throw new IllegalArgumentException("Table must be given");
if (table.bindingOfDataSource() == null)
throw new IllegalArgumentException("Data source of table with id '" + table.getId() +
"' must be bound");
this.sourceNode = sourceNode;
if (hashicons != null) {
this.hashIcon = new Hashtable();
this.hashIcon = hashicons;
}
String dataSourcePrefix = table.bindingOfDataSource() + ".";
//works on columns
setFiltersForColumns(dataSourcePrefix, table.iterateColumns(), sourceNode);
setFiltersForColumns(dataSourcePrefix, table.iterateGroupedColumns(), sourceNode);
//set up the table properties
table.setOnFilter(filterAction);
filterAction.setEnabled(true); //filterAction.setText("TESTTTTTT");
//logString("filtertext"+filterAction.getText());
this.sourceNode = sourceNode;
}
/**
Try to make the given columns filtertable
*/
private void setFiltersForColumns(String dataSourcePrefix, Iterator columnIterator, IWDNode
sourceNode) {
attributeSource = new Hashtable();
for (Iterator iter = sourceNode.getNodeInfo().iterateAttributes(); iter.hasNext();) {
IWDAttributeInfo attribInfo = (IWDAttributeInfo) iter.next();
String attribName = attribInfo.getName();
attributeSource.put(attribName, attribInfo.getSimpleType().getBuiltInType());
}
int index = 0;
for (Iterator it = columnIterator; it.hasNext(); ++index) { // for every column: try to make itbindable
IWDAbstractTableColumn abstractColumn = (IWDAbstractTableColumn) it.next();
if (abstractColumn instanceof IWDTableColumn) {
IWDTableColumn column = (IWDTableColumn) abstractColumn;
String columnId = column.getId();
Comparator comparator = null;
NodeElementByAttributeComparator elementComparator = null;
String bindingOfPrimaryProperty =
bindingOfPrimaryProperty(column.getTableCellEditor());
String attributeName = null;
if (bindingOfPrimaryProperty == null ||
!bindingOfPrimaryProperty.startsWith(dataSourcePrefix)) {
if (hashIcon == null) {
continue;
} else {
if (!hashIcon.containsKey(columnId)) {
continue;
} else {
attributeName = hashIcon.get(columnId).toString();
}
}
} else {
attributeName =
bindingOfPrimaryProperty.substring(dataSourcePrefix.length());
if (hashIcon.containsKey(columnId))
attributeName = hashIcon.get(columnId).toString();
}
String attributeInfo = null;
if (attributeSource.containsKey(attributeName))
attributeInfo = (String) attributeSource.get(attributeName);
elementComparator = new
NodeElementByAttributeComparator(attributeInfo, column, comparator);
filterForColumn.put(attributeName, elementComparator);
} else if (abstractColumn instanceof IWDTableColumnGroup) {
//if it is column group -> try to bind the columns of the column group
IWDTableColumnGroup columnGroup = (IWDTableColumnGroup)
abstractColumn;
setFiltersForColumns(dataSourcePrefix, columnGroup.iterateColumns(),
sourceNode);
}
}
}
/*filter data
*
*
*/
public void filter( IWDNode allDataNode, IWDNode targetNode) {
if (allDataNode != null) {
this.sourceNode = allDataNode;
}
HashMap FilterValuesByAttribute = prepareFilterValuesByAttribute();
ArrayList ar = new ArrayList();
for (int i = 0; i < sourceNode.size(); i++) {
IWDNodeElement el = sourceNode.getElementAt(i);
boolean addelement = true;
for (Enumeration e = this.attributeSource.keys(); e.hasMoreElements();) {
String attributeName = e.nextElement().toString();
Object o1 = el.getAttributeValue(attributeName);
if (FilterValuesByAttribute.containsKey(attributeName) &&
filterForColumn.containsKey(attributeName)) {
NodeElementByAttributeComparator elementComparator =
(NodeElementByAttributeComparator) filterForColumn.get(attributeName);
HashMap valuehash = new HashMap();
valuehash = (HashMap) FilterValuesByAttribute.get(attributeName);
String attributetype = elementComparator.attributeInfo;
Comparator comparator = elementComparator.comparator;
if (valuehash.size()==0){
elementComparator.column.setIsFiltered(false);
} else {
elementComparator.column.setIsFiltered(true);
}
addelement = this.evaluateFilteredAttributeValue(valuehash,
attributetype, comparator, o1);
if (!addelement)
break;
}
if (!addelement)
break;
}
if (!addelement)
continue;
IWDNodeElement targetElement = targetNode.createElement(); ///***~182
WDCopyService.copyCorresponding(el, targetElement);
ar.add(targetElement);
}
targetNode.bind(ar);
}
/* delete all data node if the table node had some elements deleted
*
*/
public void deleteAllDataNodeElement(
IWDNode sourceNode,
IWDNode targetNode,
String attributeRowId,
ArrayList idsToDelete) {
for (int j = sourceNode.size() - 1; j >= 0; --j) {
IWDNodeElement els = sourceNode.getElementAt(j);
String elsid = els.getAttributeAsText(attributeRowId);
if (!idsToDelete.contains(elsid))
continue;
sourceNode.removeElement(els);
}
for (int i = targetNode.size() - 1; i >= 0; --i) {
IWDNodeElement elt = targetNode.getElementAt(i);
String eltid = elt.getAttributeAsText(attributeRowId);
if (!idsToDelete.contains(eltid))
continue;
targetNode.removeElement(elt);
}
}
/*Update all data node if the table node has been updated
if a row has been added in the table node,
the all data node can also be updated by using the using the flag addRowOnFly
*/
public void updateAllDataNodeElement(
IWDNode sourceNode,
IWDNode targetNode,
String attributeRowId,
boolean addRowOnFly) {
HashMap hashs = new HashMap();
HashMap hasht = new HashMap();
HashMap hashup = new HashMap();
IWDNodeElement elt;
IWDNodeElement els;
for (int j = sourceNode.size() - 1; j >= 0; --j) {
els = sourceNode.getElementAt(j);
String elsid = els.getAttributeAsText(attributeRowId);
hashs.put(elsid, els);
}
for (int i = 0; i < targetNode.size(); i++) {
elt = targetNode.getElementAt(i);
String rowid = elt.getAttributeAsText(attributeRowId);
boolean isInSource = hashs.containsKey(rowid);
if (isInSource && !elt.isChangedByClient())
continue;
if (!isInSource) {
els = sourceNode.createElement();
WDCopyService.copyCorresponding(elt, els);
//logString("isInSource");
sourceNode.addElement(els);
} else {
els = (IWDNodeElement) hashs.get(rowid);
WDCopyService.copyCorresponding(elt, els);
}
}
}
/*find if an cloumn has a valid filter
and if so parse the filter and put in a hash table
*
*/
private HashMap prepareFilterValuesByAttribute() {
HashMap hashmap = new HashMap();
for (Enumeration e = this.attributeSource.keys(); e.hasMoreElements();) {
String attributeName = e.nextElement().toString();
if (filterForColumn.containsKey(attributeName)) {
NodeElementByAttributeComparator elementComparator =
(NodeElementByAttributeComparator) filterForColumn.get(attributeName);
IWDTableColumn column = elementComparator.column;
column.setIsFiltered(false);
String filtervalue = column.getFilterValue();
if (filtervalue == null || filtervalue.trim().length() == 0) {
continue;
}
String attributetype = elementComparator.attributeInfo;
HashMap valuehash = new HashMap();
valuehash = this.detectFilterSign(filtervalue);
hashmap.put(attributeName, valuehash);
}
}
return hashmap;
}
/* generate a filter value into the right object
*
*/
private Object generateObject(String filtervalue, String attributetype, String sign) {
Object o2 = filtervalue;
try {
if (filtervalue == null) {
return o2;
}
if (attributetype.equalsIgnoreCase("decimal")) {
o2 = new BigDecimal(filtervalue);
}
if (attributetype.equalsIgnoreCase("double")) {
o2 = new Double((filtervalue));
}
if (attributetype.equalsIgnoreCase("long")) {
o2 = new Long(filtervalue);
}
if (attributetype.equalsIgnoreCase("float")) {
o2 = new Float(filtervalue);
}
if (attributetype.equalsIgnoreCase("short")) {
o2 = new Short(filtervalue);
}
if (attributetype.equalsIgnoreCase("integer")) {
o2 = new Integer(filtervalue); //***254 for 2000 ~
}
if (attributetype.equalsIgnoreCase("long")) {
o2 = new Long(filtervalue);
}
if (attributetype.equalsIgnoreCase("date")) {
try {
java.util.Date dtTmp = new java.util.Date(filtervalue);
SimpleDateFormat template = new SimpleDateFormat("yyyy-MM-dd");
o2 = Date.valueOf(template.format(dtTmp));
} catch (Exception ex) {
o2 = filtervalue;
}
}
if (attributetype.equalsIgnoreCase("time")) {
try {
SimpleDateFormat timeformater = new SimpleDateFormat("hh:mm:ss",
WDResourceHandler.getCurrentSessionLocale());
o2 = timeformater.parse(filtervalue);
} catch (ParseException ex) {
o2 = filtervalue;
}
}
if (attributetype.equalsIgnoreCase("boolean")) {
if (sign.equalsIgnoreCase(NE)) {
o2 = new Boolean(true);
} else {
o2 = new Boolean(true);
}
}
return o2;
}catch (Exception ex){
return filtervalue;
}
}
/*compare object according the filter
*
*/
private boolean evaluateFilteredAttributeValue(HashMap filter, String attributetype, Comparator
comparator, Object o1) {
boolean accept = true;
try{
if (filter == null || filter.size() == 0) //***268
return accept;
if (attributetype == null || attributetype.trim().length() == 0)
return accept;
Object o2 = filter.get("value1");
if (filter.get("sign") == null) {
if (o2 != null) {
String value1 = filter.get("value1").toString();
o2 = generateObject(value1, attributetype, null);
}
int compared = comparator.compare(o1, o2);
if (!attributetype.equalsIgnoreCase("string")) {
if (compared == 0) {
return accept;
} else {
return (!accept);
}
} else {
if (compared >= 0) {
return accept;
} else {
return (!accept);
}
}
}
String sign = filter.get("sign").toString();
String place = filter.get("place").toString();
if (sign.equalsIgnoreCase(EQ) && place.equalsIgnoreCase("S")) {
if (o2 != null) {
String value1 = filter.get("value1").toString();
o2 = generateObject(value1, attributetype, sign);
} else {
if (attributetype.equalsIgnoreCase("boolean")) {
o2 = generateObject("", attributetype, sign);
}
if (attributetype.equalsIgnoreCase("string") && o1 != null &&
o1.toString().trim().length() == 0) {
o2 = generateObject("", attributetype, sign);
}
}
int compared = comparator.compare(o1, o2);
if (!attributetype.equalsIgnoreCase("string")) {
if (compared == 0) {
return accept;
} else {
return (!accept);
}
} else {
if (compared >= 0) {
return accept;
} else {
return (!accept);
}
}
}
if (sign.equalsIgnoreCase(NE) && place.equalsIgnoreCase("S")) {
if (o2 != null) {
String value1 = filter.get("value1").toString();
o2 = generateObject(value1, attributetype, sign);
} else {
if (attributetype.equalsIgnoreCase("boolean")) {
o2 = generateObject("", attributetype, sign);
}
if (attributetype.equalsIgnoreCase("string") && o1 != null &&
o1.toString().trim().length() == 0) {
o2 = generateObject("", attributetype, sign);
}
}
int compared = comparator.compare(o1, o2);
if (!attributetype.equalsIgnoreCase("string")) {
if (compared == 0) {
return !accept;
} else {
return (accept);
}
} else {
if (compared >= 0) {
return !accept;
} else {
return (accept);
}
}
}
if (sign.equalsIgnoreCase(R) && place.equalsIgnoreCase("S")) {
if (o2 != null) {
String value1 = filter.get("value1").toString();
o2 = generateObject(value1, attributetype, sign);
}
int compared = comparator.compare(o1, o2);
if (compared > 0) {
return !accept;
} else {
return (accept);
}
}
if (sign.equalsIgnoreCase(R) && place.equalsIgnoreCase("E")) {
if (o2 != null) {
String value1 = filter.get("value1").toString();
o2 = generateObject(value1, attributetype, sign);
}
int compared = comparator.compare(o1, o2);
if (compared >= 0) {
return accept;
} else {
return (!accept);
}
}
Object o3 = filter.get("value2").toString();
if (sign.equalsIgnoreCase(R) && place.equalsIgnoreCase("M")) {
boolean accept1 = true;
boolean accept2 = true;
if (o2 != null) {
String value1 = filter.get("value1").toString();
o2 = generateObject(value1, attributetype, sign);
}
if (o3 != null) {
String value1 = filter.get("value2").toString();
o3 = generateObject(value1, attributetype, sign);
}
int compared = comparator.compare(o1, o2);
if (compared >= 0) {
accept1 = accept;
} else {
accept1 = !accept;
}
int compared2 = comparator.compare(o1, o3);
if (compared2 > 0) {
accept2 = !accept;
} else {
accept2 = accept;
}
if (accept1 && accept2) {
return accept;
} else {
return !accept;
}
}
return accept;
} catch (Exception ex ){
return accept;
}
}
/* parse the filter
*
*/
private HashMap detectFilterSign(String value) {
HashMap ar = new HashMap();
String val1 = null;
String val2 = null;
String sign = null;
String place = null;
if (null == value) {
ar.put("value1", value);
ar.put("sign", null);
return ar;
}
if (!value.startsWith(EQ) & !value.startsWith(NE) & value.indexOf(R) < 0) {
ar.put("value1", value.trim());
ar.put("sign", null);
return ar;
}
if (value.startsWith(EQ)) {
if (value.trim().length() > 1) {
val1 = value.substring(1);
} else {
val1 = "";
val1 = null;
}
sign = EQ;
place = "S";
ar.put("value1", val1);
ar.put("sign", EQ);
ar.put("place", place);
//this.logString("detect3 sign: value1:"+val1);
return ar;
}
if (value.startsWith(NE)) {
if (value.trim().length() > 1) {
val1 = value.substring(1);
} else {
val1 = "";
val1 = null;
}
sign = NE;
place = "S";
ar.put("value1", val1);
ar.put("sign", NE);
ar.put("place", place);
return ar;
}
if (value.startsWith(R)) {
if (value.trim().length() > 1) {
val1 = value.substring(1);
} else {
val1 = "";
val1 = null;
}
sign = R;
place = "S";
ar.put("value1", val1);
ar.put("sign", R);
ar.put("place", place);
return ar;
}
if (value.endsWith(R)) {
if (value.trim().length() > 1) {
val1 = value.substring(0, value.length() - 1);
} else {
val1 = "";
val1 = null;
}
sign = R;
place = "E";
ar.put("value1", val1);
ar.put("sign", R);
ar.put("place", place);
return ar;
}
if (value.indexOf(R) > 0) {
sign = R;
place = "M";
val1 = value.substring(0, value.indexOf(R));
val2 = value.substring(value.indexOf(R) + 1);
ar.put("value1", val1);
ar.put("value2", val2);
ar.put("sign", R);
ar.put("place", place);
return ar;
}
if (ar.size() == 0)
ar.put("value1", value);
return ar;
}
/**
Returns the binding of the given table cell editor's property that is
considered "primary" or <code>null</code> if no such binding exists or no
such property can be determined.
*/
private static final String bindingOfPrimaryProperty(IWDTableCellEditor editor) {
return editor instanceof IWDViewElement ? bindingOfPrimaryProperty((IWDViewElement)
editor) : null;
}
/**
Returns the binding of the given view element's property that is
considered "primary" or <code>null</code> if no such binding exists or no
WDJ - A Generic Java Class for Filtering Web Dynpro Tables
SAP DEVELOPER NETWORK | sdn.sap.com BUSINESS PROCESS EXPERT COMMUNITY | bpx.sap.com
© 2007 SAP AG 33
such property can be determined.
*/
private static final String bindingOfPrimaryProperty(IWDViewElement element) {
if (element instanceof IWDAbstractDropDownByIndex)
return ((IWDAbstractDropDownByIndex) element).bindingOfTexts();
if (element instanceof IWDAbstractDropDownByKey)
return ((IWDAbstractDropDownByKey) element).bindingOfSelectedKey();
if (element instanceof IWDAbstractInputField)
return ((IWDAbstractInputField) element).bindingOfValue();
if (element instanceof IWDCaption)
return ((IWDCaption) element).bindingOfText();
if (element instanceof IWDCheckBox)
return ((IWDCheckBox) element).bindingOfChecked();
if (element instanceof IWDLink)
return ((IWDLink) element).bindingOfText();
if (element instanceof IWDProgressIndicator)
return ((IWDProgressIndicator) element).bindingOfPercentValue();
if (element instanceof IWDRadioButton)
return ((IWDRadioButton) element).bindingOfSelectedKey();
if (element instanceof IWDTextEdit)
return ((IWDTextEdit) element).bindingOfValue();
if (element instanceof IWDTextView)
return ((IWDTextView) element).bindingOfText();
return null;
}
/**
Instance of a comparator according to the ordering imposed by the
implementation of <code>Comparable</code>.
*/
private static final Comparator DEFAULT = new Comparator() {
/**
Compares the given objects according to the ordering imposed by the first
ones <code>compareTo(Object)</code> function. Furthermore, <code>null</code>
is treated to be less than any object.
*
@see java.lang.Comparable#compareTo(java.lang.Object)
@see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(Object o1, Object o2) {
if (o1 == null && o2 == null) {
return 0;
}
if (o1 == null) {
return -1;
}
if (o2 == null) {
return -1;
}
if (o1 instanceof Boolean && o2 instanceof Boolean) {
return o1.toString().compareTo(o2.toString());
}
if (o1 instanceof Date && o2 instanceof Date) {
return ((java.util.Date) o1).compareTo((java.util.Date) o2);
}
if (o1 instanceof String && o2 instanceof String) {
Collator collate =
Collator.getInstance(WDResourceHandler.getCurrentSessionLocale());
return
o1.toString().toUpperCase(WDResourceHandler.getCurrentSessionLocale()).indexOf(
o2.toString().toUpperCase(WDResourceHandler.getCurrentSessionLocale()));
}
return ((Comparable) o1).compareTo((Comparable) o2);
}
};
private Hashtable filterForColumn = new Hashtable();
private IWDTable table = null;
private Hashtable attributeSource = null;
private Hashtable sourceNodeHash = null;
private Hashtable hashIcon = null;
private IWDNode sourceNode = null;
private IWDNode targetNode = null;
String EQ = "=";
String NE = "#";
String R = "~";
/**
Generic comparator that compares node elements by a given attribute with
the help of a given comparator.
*/
public final class NodeElementByAttributeComparator {
public NodeElementByAttributeComparator(String attributeInfo, IWDTableColumn column,
Comparator comparator) {
this(attributeInfo, column, comparator, false, new ArrayList());
}
/**
Internal constructor.
*/
private NodeElementByAttributeComparator(
String attributeInfo,
IWDTableColumn column,
Comparator comparator,
boolean compareAsText,
Collection subNodes) {
if (attributeInfo == null)
throw new IllegalArgumentException("attributeInfo must not be null");
if (column == null)
throw new IllegalArgumentException("Column must not be null");
if (comparator == null)
comparator = DEFAULT;
this.attributeInfo = attributeInfo;
this.column = column;
this.comparator = comparator;
this.compareAsText = compareAsText;
this.subNodes = subNodes;
}
private final Comparator comparator;
private final boolean compareAsText;
private boolean sortDirection;
private IWDTableColumn column;
private Collection subNodes;
private String attributeInfo;
}
}
thanks and regards
fazal
Hi,
I use:
wdContext.currentContextElement().setTableFilter( new TableFilter(table, wdThis.wdGetFilterAction(), wdContext.nodeCheckAudTableSource(), new Hashtable()));
(Hashtable vom java.util)
instead of your suggest:
wdContext.currentContextElement().setTableFilter( new TableFilter(table, wdThis.wdGetFilterAction(), wdContext.nodeCheckAudTableSource(), new HashTable()));
Where can I find the class HashTable?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hi,
ya we have to use Hashtable for the filter action (java.util.Hashtable)
wdContext.currentContextElement().setTableFilter( new TableFilter(table, wdThis.wdGetFilterAction(), wdContext.nodeCheckAudTableSource(), new Hashtable()));
thanks and regards
fazal
Edited by: fazal ahamed on Apr 15, 2008 8:45 AM
in wdModifyView(), replace the following code
wdThis.wdGetFilterAction(), wdContext.nodeSource(),null));
by
wdThis.wdGetFilterAction(), wdContext.nodeSource(),new HashTable()));
nikhiL
Edited by: Nikhil Bos on Apr 15, 2008 12:09 PM
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
hi ,
in the domodify method replace null with hashtable
if (firstTime ) {
IWDTable table = (IWDTable) view.getElement("Table");
wdContext.currentContextElement().setTableFilter( new TableFilter(table, wdThis.wdGetFilterAction(), wdContext.nodeSource(),new HashTable()));
}
hope ur problem will get resolved
thanks and regards
fazal
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
81 | |
9 | |
9 | |
7 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.