Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.8RC2
-
Fix Version/s: 1.8
-
Component/s: ICE-Components
-
Labels:None
-
Environment:-
-
ICEsoft Forum Reference:
Description
A customer has reported the following issue with the outputChart component. If you have 2 datasets and then add a third (through a button click), a validation error will occur. I was not able to reproduce the issue in my test case but the customer has supplied us with the following description and proposed solution:
The problem below is that if paintArray has been calculated previously and now a data change causes the count to change then returning the previous paintArray will result in a validation error hence it is necessary to add additional rows if more data than before is being displayed or use a subset of previous paints if less data is displayed.
This bug only occur if outputChart.getColors() is null and paintArray was previously defined and stored in the openChart component object between 2 requests. In that case if the number of datasets increases, you have enough entries in paint array..
i.e:
if (obj == null && paintArray == null) {
return paintArray = TestDataGenerator.getRandomPaints(count);
} else if (obj == null && paintArray != null) {
.... This condition
You will see that in this condition you are returning the existing paint array. But the problem is you actually need to generate the additional paints and return that or only return a subset since the number of paints you return here has to match the data.
I don't know if the other bugs i've generated recently (components losing state) are related to why you're not seeing issue.
But following code flow you can probably see that there is a bug if paintArray state is maintained between requests.
I had observed this but in DR2 and I can't confirm if it works or not in RC1 or 2 because of previous reported issues.
The fix for this condition is:
//garpinc fix if last paintArray is too small or if there is more in paint array
//than is required for count
if (paintArray.length < count) {
return paintArray = TestDataGenerator.getRandomPaints(count);
} else {
Paint[] subsetOfPaints = new Paint[count];
System.arraycopy(paintArray, 0, subsetOfPaints, 0, count);
return subsetOfPaints;
}
The problem below is that if paintArray has been calculated previously and now a data change causes the count to change then returning the previous paintArray will result in a validation error hence it is necessary to add additional rows if more data than before is being displayed or use a subset of previous paints if less data is displayed.
This bug only occur if outputChart.getColors() is null and paintArray was previously defined and stored in the openChart component object between 2 requests. In that case if the number of datasets increases, you have enough entries in paint array..
i.e:
if (obj == null && paintArray == null) {
return paintArray = TestDataGenerator.getRandomPaints(count);
} else if (obj == null && paintArray != null) {
.... This condition
You will see that in this condition you are returning the existing paint array. But the problem is you actually need to generate the additional paints and return that or only return a subset since the number of paints you return here has to match the data.
I don't know if the other bugs i've generated recently (components losing state) are related to why you're not seeing issue.
But following code flow you can probably see that there is a bug if paintArray state is maintained between requests.
I had observed this but in DR2 and I can't confirm if it works or not in RC1 or 2 because of previous reported issues.
The fix for this condition is:
//garpinc fix if last paintArray is too small or if there is more in paint array
//than is required for count
if (paintArray.length < count) {
return paintArray = TestDataGenerator.getRandomPaints(count);
} else {
Paint[] subsetOfPaints = new Paint[count];
System.arraycopy(paintArray, 0, subsetOfPaints, 0, count);
return subsetOfPaints;
}
Activity
Tyler Johnson
created issue -
Tyler Johnson
made changes -
Field | Original Value | New Value |
---|---|---|
Assignee | Adnan Durrani [ adnan.durrani ] |
Tyler Johnson
made changes -
Salesforce Case | [500700000081jk7] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #18706 | Tue Mar 31 13:59:33 MDT 2009 | adnan.durrani | Fix for |
Files Changed | ||||
MODIFY
/icefaces/trunk/icefaces/component/src/com/icesoft/faces/component/outputchart/AbstractChart.java
MODIFY /icefaces/trunk/icefaces/component/src/com/icesoft/faces/component/outputchart/AxisChart.java |
Adnan Durrani
made changes -
Status | Open [ 1 ] | In Progress [ 3 ] |
Adnan Durrani
made changes -
Status | In Progress [ 3 ] | Resolved [ 5 ] |
Fix Version/s | 1.8 [ 10161 ] | |
Resolution | Fixed [ 1 ] |
Ken Fyten
made changes -
Status | Resolved [ 5 ] | Closed [ 6 ] |
Assignee | Adnan Durrani [ adnan.durrani ] |
Changes made to use the cache data only when there isn't any dynamic change.
If any of the following attribute being changed dynamically then all has to have a corrosponding values:
Modified: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\outputchart\AbstractChart.java
Modified: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\outputchart\AxisChart.java
Sending content: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\outputchart\AbstractChart.java
Sending content: D:\work\development\head\svn\ossrepo\icefaces\trunk\icefaces\component\src\com\icesoft\faces\component\outputchart\AxisChart.java
Completed: At revision: 18706