Skip to content

Commit 5db0545

Browse files
JihoonKim1004JihoonKim1004
authored andcommitted
(1) Added capability of partitioning large data for DataGrid component, with the additional data being fetched asynchronous upon request.
(2) Gave flexibility in having jsp pages in any directory, but swf directory which is created by the system must still exist under WebContent. Meaning one should not expect to copy the directory to an another directory within the actual workspace and have the components work. (3) Created better structure for example jsp and created mxmlIndex.jsp for navigation to examples. For all consider better impl later and clean up the code later.
1 parent 5091d40 commit 5db0545

40 files changed

Lines changed: 1109 additions & 268 deletions

File tree

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/beans/additionalScriptContent/AdditionalApplicationScriptContent.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import java.util.HashMap;
2222
import java.util.HashSet;
23-
import java.util.Iterator;
2423
import java.util.LinkedHashSet;
2524
import java.util.Map;
2625
import java.util.Set;
@@ -53,32 +52,29 @@ public void addSimpleDataProviderSetter(String componentId, String dataProviderC
5352
_simpleDataProviderSetter.add(new SimpleDataProviderSetter(componentId, dataProviderContent));
5453
}
5554

56-
public void addDataGridScriptContent(String dataGridId, int maxDataGridColumnLength){
57-
_dataGridScriptContent.put(dataGridId, new DataGridScriptContent(dataGridId, maxDataGridColumnLength));
55+
public void addDataGridScriptContent(String dataGridId){
56+
_dataGridScriptContent.put(dataGridId, new DataGridScriptContent(dataGridId));
5857
}
5958

60-
public void addDataGridColumnToDataGridScriptContent(String dataGridId, int maxDataGridColumnLength, String dataGridColumnId, String dataField){
59+
public void addDataGridColumnToDataGridScriptContent(String dataGridId, String dataGridColumnId, String dataField, Boolean columnEditable){
6160
DataGridScriptContent dataGridScriptContentInstance;
6261
if((dataGridScriptContentInstance = (DataGridScriptContent) _dataGridScriptContent.get(dataGridId)) == null){
63-
dataGridScriptContentInstance = new DataGridScriptContent(dataGridId, maxDataGridColumnLength);
64-
_dataGridScriptContent.put(dataGridId, dataGridScriptContentInstance);
62+
throw new IllegalStateException("DataGridScriptContent doesn't exist for " + dataGridId +
63+
" : addDataGridScriptContent should be invoked prior to this method call");
6564
}
6665

67-
dataGridScriptContentInstance.addDataGridColumnContent(dataGridColumnId, dataField);
66+
dataGridScriptContentInstance.addDataGridColumnContent(dataGridColumnId, dataField, columnEditable);
6867
}
6968

70-
public void addDataGridColumnToDataGridScriptContent(String dataGridId, int maxDataGridColumnLength, Map dataGridColumnIdMap){
69+
public void setDataGridScriptContentProperties(String dataGridId, Integer batchColumnDataRetrievalSize, Integer maxDataPartitionIndex){
7170
DataGridScriptContent dataGridScriptContentInstance;
7271
if((dataGridScriptContentInstance = (DataGridScriptContent) _dataGridScriptContent.get(dataGridId)) == null){
73-
dataGridScriptContentInstance = new DataGridScriptContent(dataGridId, maxDataGridColumnLength);
74-
_dataGridScriptContent.put(dataGridId, dataGridScriptContentInstance);
72+
throw new IllegalStateException("DataGridScriptContent doesn't exist for " + dataGridId +
73+
" : addDataGridScriptContent should be invoked prior to this method call");
7574
}
7675

77-
for(Iterator iterate = dataGridColumnIdMap.keySet().iterator(); iterate.hasNext();){
78-
String dataGridColumnId = (String) iterate.next();
79-
String dataField = (String) dataGridColumnIdMap.get(dataGridColumnId);
80-
dataGridScriptContentInstance.addDataGridColumnContent(dataGridColumnId, dataField);
81-
}
76+
dataGridScriptContentInstance.setBatchColumnDataRetrievalSize(batchColumnDataRetrievalSize);
77+
dataGridScriptContentInstance.setMaxDataPartitionIndex(maxDataPartitionIndex);
8278
}
8379

8480
public void addValidationManagerValidatorId(String validatorId){

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/beans/additionalScriptContent/DataGridScriptContent.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,39 @@
2727
public final class DataGridScriptContent {
2828

2929
private final String _dataGridId;
30-
private final Integer _maxDataGridColumnLength;
3130
private final List _dataGridColumns;
3231

33-
DataGridScriptContent(String dataGridId, int maxDataGridColumnLength){
32+
private Integer _batchColumnDataRetrievalSize;
33+
private Integer _maxDataPartitionIndex;
34+
35+
DataGridScriptContent(String dataGridId){
3436
super();
3537
_dataGridId = dataGridId;
36-
_maxDataGridColumnLength = Integer.valueOf(maxDataGridColumnLength);
3738
_dataGridColumns = new LinkedList();
3839
}
3940

40-
void addDataGridColumnContent(String dataGridColumnId, String dataField){
41-
_dataGridColumns.add(new DataGridColumnScriptContent(dataGridColumnId, dataField));
41+
void addDataGridColumnContent(String dataGridColumnId, String dataField, Boolean columnEditable){
42+
_dataGridColumns.add(new DataGridColumnScriptContent(dataGridColumnId, dataField, columnEditable));
4243
}
4344

4445
public String getDataGridId() {
4546
return _dataGridId;
4647
}
47-
public Integer getMaxDataGridColumnLength() {
48-
return _maxDataGridColumnLength;
48+
public Integer getBatchColumnDataRetrievalSize() {
49+
return _batchColumnDataRetrievalSize;
4950
}
5051
public List getDataGridColumns() {
51-
return _dataGridColumns;
52+
return new LinkedList(_dataGridColumns);
53+
}
54+
public Integer getMaxDataPartitionIndex() {
55+
return _maxDataPartitionIndex;
56+
}
57+
58+
void setBatchColumnDataRetrievalSize(Integer batchColumnDataRetrievalSize) {
59+
_batchColumnDataRetrievalSize = batchColumnDataRetrievalSize;
60+
}
61+
void setMaxDataPartitionIndex(Integer maxDataPartitionIndex) {
62+
_maxDataPartitionIndex = maxDataPartitionIndex;
5263
}
5364

5465
public boolean equals(Object instance) {
@@ -67,11 +78,13 @@ public final class DataGridColumnScriptContent {
6778

6879
private final String _dataGridColumnId;
6980
private final String _dataField;
81+
private final Boolean _columnEditable;
7082

71-
private DataGridColumnScriptContent(String dataGridColumnId, String dataField){
83+
private DataGridColumnScriptContent(String dataGridColumnId, String dataField, Boolean columnEditable){
7284
super();
7385
_dataGridColumnId = dataGridColumnId;
7486
_dataField = dataField;
87+
_columnEditable = columnEditable;
7588
}
7689

7790
public String getDataGridColumnId() {
@@ -80,6 +93,9 @@ public String getDataGridColumnId() {
8093
public String getDataField() {
8194
return _dataField;
8295
}
96+
public Boolean getColumnEditable() {
97+
return _columnEditable;
98+
}
8399

84100
public boolean equals(Object instance) {
85101
if(!(instance instanceof DataGridColumnScriptContent)){

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/context/MxmlContext.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ public abstract class MxmlContext {
8787

8888
public abstract void setSwfWebPath(String swfWebPath);
8989

90+
public abstract String getWebContextPath();
91+
92+
public abstract void setWebContextPath(String webContextPath);
93+
9094
public abstract _CommonTaskRunner getCommonRunner();
9195

9296
public abstract _FlexTaskRunner getFlexRunner();

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/context/MxmlContextImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,14 @@ public class MxmlContextImpl extends MxmlContext {
6060
private boolean _productionEnv;
6161
private boolean _simplySWF;
6262

63+
private String _flexSDKPath;
6364
private String _mxmlPath;
6465
private String _preMxmlPath;
6566
private String _swcPath;
6667
private String _swfPath;
6768
private String _swfWebPath;
6869
private String _swfBasePath;
69-
private String _flexSDKPath;
70+
private String _webContextPath;
7071

7172
public MxmlContextImpl(String currMxml, _MXMLApplicationContract currApplicationContract){
7273
super();
@@ -151,6 +152,12 @@ public String getSwfWebPath() {
151152
public void setSwfWebPath(String swfWebPath) {
152153
_swfWebPath = swfWebPath;
153154
}
155+
public String getWebContextPath(){
156+
return _webContextPath;
157+
}
158+
public void setWebContextPath(String webContextPath){
159+
_webContextPath = webContextPath;
160+
}
154161
public _CommonTaskRunner getCommonRunner() {
155162
return _commonRunner;
156163
}

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/tasks/_FlexTaskRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public interface _FlexTaskRunner extends _TaskRunner {
4242

4343
void createMXML(String targetAbsolutePath, String copyTo);
4444

45-
void createSwcSourceFiles(String swcPath, List systemSourceFiles, String jsfFlexMainSwcConfigFile);
45+
void createSwcSourceFiles(String swcPath, List systemSourceFiles, String jsfFlexMainSwcConfigFile, String webContextPath);
4646

4747
void createSystemSWCFile(String sourcePath, String outPut, String flexSDKRootPath, String loadConfigFilePath);
4848

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/util/MXMLConstants.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ public final class MXMLConstants {
6464
public static final String JSF_FLEX_MAIN_SWC_CONFIGURATIONFILE = "jsfFlexMainSwcConfigurationFile.xml";
6565
public static final String JSF_FLEX_MAIN_SWC_DIRECTORY_NAME = "jsfFlexMainSwcFileSystem";
6666
public static final String JSF_FLEX_MAIN_SWC_ARCHIVE_NAME = "jsfFlexMainSwc";
67-
public static final String JSF_FLEX_MAIN_SWC_WEB_PATH = "swf/" + JSF_FLEX_MAIN_SWC_ARCHIVE_NAME + SWF_FILE_EXT;
6867

6968
public static final String CHILD_REPLACE_TOKEN = "<!-- Child Component -->";
7069
public static final String SIBLING_REPLACE_TOKEN = "<!-- Sibling Component -->";

jsf-flex-shared/core/src/main/resources/com/googlecode/jsfFlex/shared/actionScript/com/googlecode/jsfFlex/communication/component/DataGridColumnServiceRequest.as

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,69 +26,96 @@ package com.googlecode.jsfFlex.communication.component
2626
import flash.utils.setInterval;
2727

2828
import mx.collections.ArrayCollection;
29+
import mx.collections.XMLListCollection;
2930
import mx.rpc.events.ResultEvent;
3031

3132
import com.googlecode.jsfFlex.communication.logger.ILogger;
32-
import com.googlecode.jsfFlex.communication.logger.LoggerFactory
33+
import com.googlecode.jsfFlex.communication.logger.LoggerFactory;
3334
import com.googlecode.jsfFlex.communication.services.JsfFlexHttpService;
35+
import com.googlecode.jsfFlex.communication.utils.WebConstants;
3436

3537
internal class DataGridColumnServiceRequest {
3638

37-
private static const GET_FORMATED_COLUMN_DATA_SERVICE_REQUEST_URL:String = "jsfFlexHttpServiceRequestListener/getFormatedColumnDataServiceRequest";
38-
private static const UPDATE_MODIFIED_DATA_FIELD_SERVICE_REQUEST_URL:String = "jsfFlexHttpServiceRequestListener/updateModifiedDataFieldServiceRequest";
39+
private static const GET_FORMATED_COLUMN_DATA_SERVICE_REQUEST_URL:String = WebConstants.WEB_CONTEXT_PATH
40+
+ "/jsfFlexHttpServiceRequestListener/getFormatedColumnDataServiceRequest";
41+
private static const UPDATE_MODIFIED_DATA_FIELD_SERVICE_REQUEST_URL:String = WebConstants.WEB_CONTEXT_PATH
42+
+ "/jsfFlexHttpServiceRequestListener/updateModifiedDataFieldServiceRequest";
3943
private static const GET_FORMATED_COLUMN_DATA:String = "getFormatedColumnData";
4044
private static const UPDATE_MODIFIED_DATA_FIELD:String = "updateModifiedDataField";
4145

4246
private static var _log:ILogger;
4347

44-
private var _clearIntervalRef:uint;
45-
4648
private var _columnId:String;
4749
private var _dataField:String;
50+
private var _dataGridColumnEditable:Boolean;
4851

52+
private var _cachedColumnEntries:XMLListCollection;
4953
private var _modifiedDataFieldObjectArray:Array;
54+
5055
private var _dataGridServiceRequest:DataGridServiceRequest;
5156
private var _jsfFlexHttpServiceRequest:JsfFlexHttpService;
57+
private var _clearIntervalRef:uint;
5258

5359
{
5460
_log = LoggerFactory.newJSLoggerInstance(DataGridColumnServiceRequest);
5561
}
5662

57-
public function DataGridColumnServiceRequest(columnId:String, dataField:String, dataGridServiceRequest:DataGridServiceRequest) {
63+
public function DataGridColumnServiceRequest(columnId:String, dataField:String,
64+
dataGridColumnEditable:Boolean, dataGridServiceRequest:DataGridServiceRequest) {
5865
super();
5966
_columnId = columnId;
6067
_dataField = dataField;
68+
_dataGridColumnEditable = dataGridColumnEditable;
69+
6170
_modifiedDataFieldObjectArray = new Array();
71+
6272
_dataGridServiceRequest = dataGridServiceRequest;
6373
_jsfFlexHttpServiceRequest = new JsfFlexHttpService();
64-
6574
_clearIntervalRef = setInterval( requestCacheChangeFlush, 8000);
6675
}
6776

68-
internal function getDataColumnInfo():void {
77+
internal function getDataColumnInfo(dataStartIndex:uint, dataEndIndex:uint, populateCacheStartIndex:uint):void {
6978
var dataRequestParameters:Object = new Object();
7079
dataRequestParameters.componentId = _columnId;
7180
dataRequestParameters.methodToInvoke = GET_FORMATED_COLUMN_DATA;
81+
dataRequestParameters.dataStartIndex = dataStartIndex;
82+
dataRequestParameters.dataEndIndex = dataEndIndex;
7283

7384
_jsfFlexHttpServiceRequest.sendHttpRequest(GET_FORMATED_COLUMN_DATA_SERVICE_REQUEST_URL, this,
7485
function (lastResult:Object, event:ResultEvent):void {
7586
_log.logInfo("Returned from service request : " + GET_FORMATED_COLUMN_DATA_SERVICE_REQUEST_URL);
76-
_log.logInfo("Data returned from servlet : " + lastResult);
77-
var columnEntries:XMLList = new XMLList(lastResult).VALUE;
78-
var dataGridDataProvider:ArrayCollection = _dataGridServiceRequest.dataGridDataProvider;
87+
_log.logDebug("Data returned from servlet : " + lastResult);
88+
_cachedColumnEntries = new XMLListCollection(new XMLList(lastResult).VALUE);
7989

80-
var loopCount:int = 0;
81-
for each(var currValue:XML in columnEntries){
82-
var currObject:Object = dataGridDataProvider.getItemAt(loopCount++);
83-
currObject[_dataField] = currValue.toString();
84-
}
90+
updateColumnDisplayEntries(populateCacheStartIndex);
8591

92+
_dataGridServiceRequest.notifyRetrievalOfColumnData();
8693
}, dataRequestParameters, JsfFlexHttpService.GET_METHOD, JsfFlexHttpService.E4X_RESULT_FORMAT, null);
8794

8895
}
8996

97+
internal function updateColumnDisplayEntries(populateCacheStartIndex:uint):void {
98+
var dataGridDataProvider:ArrayCollection = _dataGridServiceRequest.dataGridDataProvider;
99+
100+
var k:uint = 0;
101+
for(; k < _cachedColumnEntries.length; k++){
102+
var currObject:Object = dataGridDataProvider.getItemAt(populateCacheStartIndex);
103+
currObject[_dataField] = _cachedColumnEntries.getItemAt(k).toString();
104+
populateCacheStartIndex++;
105+
}
106+
107+
/*
108+
* if _cachedColumnEntries length < batchColumnDataRetrievalSize,
109+
* must populate the remaining entries with empty data
110+
*/
111+
for(; k < _dataGridServiceRequest.batchColumnDataRetrievalSize; k++){
112+
dataGridDataProvider.setItemAt(new Object(), k);
113+
}
114+
_cachedColumnEntries = null;
115+
}
116+
90117
internal function flushCacheChanges():void {
91-
_log.logInfo("Was informed to flushCacheChanges explicitly with unflushed cache changes of length : " + _modifiedDataFieldObjectArray.length);
118+
_log.logDebug("Was informed to flushCacheChanges explicitly with unflushed cache changes of length : " + _modifiedDataFieldObjectArray.length);
92119
clearInterval(_clearIntervalRef);
93120
requestCacheChangeFlush();
94121
}
@@ -101,11 +128,19 @@ package com.googlecode.jsfFlex.communication.component
101128
return _columnId;
102129
}
103130

131+
internal function get dataField():String {
132+
return _dataField;
133+
}
134+
135+
internal function get dataGridColumnEditable():Boolean {
136+
return _dataGridColumnEditable;
137+
}
138+
104139
private function requestCacheChangeFlush():void {
105140
if(_modifiedDataFieldObjectArray.length == 0){
106141
return;
107142
}
108-
_log.logInfo("Implicit timed flushCacheChanges invocation with unflushed cache changes of length : " + _modifiedDataFieldObjectArray.length);
143+
_log.logDebug("Implicit timed flushCacheChanges invocation with unflushed cache changes of length : " + _modifiedDataFieldObjectArray.length);
109144
var dataRequestParameters:Object = new Object();
110145
dataRequestParameters.componentId = _columnId;
111146
dataRequestParameters.methodToInvoke = UPDATE_MODIFIED_DATA_FIELD;
@@ -122,7 +157,7 @@ package com.googlecode.jsfFlex.communication.component
122157
function (lastResult:Object, event:ResultEvent):void {
123158
_log.logInfo("Returned from service request : " + UPDATE_MODIFIED_DATA_FIELD_SERVICE_REQUEST_URL);
124159
var resultCode:String = lastResult.resultCode;
125-
_log.logInfo("Result Code for " + UPDATE_MODIFIED_DATA_FIELD + " is : " + resultCode);
160+
_log.logDebug("Result Code for " + UPDATE_MODIFIED_DATA_FIELD + " is : " + resultCode);
126161
}, dataRequestParameters, JsfFlexHttpService.POST_METHOD, JsfFlexHttpService.FLASH_VARS_RESULT_FORMAT, null);
127162
}
128163

0 commit comments

Comments
 (0)