the code is as follows:
ViewStates.java:
Code:
import a.b.c.d.ViewStateHelper; public class ViewStates { private String selectedState = null; private String fieldState = null; private String sortState = null; private String hiliteState = null; private String groupState = null; public ViewStates(String selectedState, String fieldState, String sortState, String hiliteState, String groupState) { if (!ViewStateHelper.NO_UPDATE.equals(selectedState)) this.selectedState = selectedState; if (!ViewStateHelper.NO_UPDATE.equals(fieldState)) this.fieldState = fieldState; if (!ViewStateHelper.NO_UPDATE.equals(sortState)) this.sortState = sortState; if (!ViewStateHelper.NO_UPDATE.equals(hiliteState)) this.hiliteState = hiliteState; if (!ViewStateHelper.NO_UPDATE.equals(groupState)) this.groupState = groupState; } public String getSelectedState() { return selectedState; } public String getFieldState() { return fieldState; } public String getSortState() { return sortState; } public String getHiliteState() { return hiliteState; } public String getGroupState() { return groupState; } public void setSelectedState(String selectedState) { this.selectedState = selectedState; } public void setFieldState(String fieldState) { this.fieldState = fieldState; } public void setSortState(String sortState) { this.sortState = sortState; } public void setHiliteState(String hiliteState) { this.hiliteState = hiliteState; } public void setGroupState(String groupState) { this.groupState = groupState; } }
Code:
public class SettingsCache2 { private static SettingsCache2 instance = new SettingsCache2(); private Map<String, ViewStates> viewStatesMap = new HashMap<String, ViewStates>(); final private DataSource viewstateDS = DataSource.get(DatasourceEnum.T_VIEWSTATE.getValue()); private SettingsCache2() { refresh(); } public static SettingsCache2 getInstance() { return instance; } public void refresh() { // ViewStates caching: viewstateDS.fetchData(new AdvancedCriteria("USER_ID", OperatorId.EQUALS, User.getUserId()), new DSCallback() { @Override public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) { if (dsResponse != null && dsResponse.getStatus() == RPCResponse.STATUS_SUCCESS) { for (Record r : dsResponse.getData()) { ViewStates vs = new ViewStates(r.getAttribute("SELECTEDSTATE"), r.getAttribute("FIELDSTATE"), r.getAttribute("SORTSTATE"), r .getAttribute("HILITESTATE"), r.getAttribute("GROUPSTATE")); viewStatesMap.put(r.getAttribute("OBJECT"), vs); } } } }, new DSRequest(DSOperationType.FETCH) { { setProgressiveLoading(true); } }); } public ViewStates getViewState(String objectName) { return viewStatesMap.get(objectName); } public String getSelectedState(String objectName) { if (!viewStatesMap.containsKey(objectName)) return null; else return viewStatesMap.get(objectName).getSelectedState(); } public String getFieldState(String objectName) { if (!viewStatesMap.containsKey(objectName)) return null; else return viewStatesMap.get(objectName).getFieldState(); } public String getSortState(String objectName) { if (!viewStatesMap.containsKey(objectName)) return null; else return viewStatesMap.get(objectName).getSortState(); } public String getHiliteState(String objectName) { if (!viewStatesMap.containsKey(objectName)) return null; else return viewStatesMap.get(objectName).getHiliteState(); } public String getGroupState(String objectName) { if (!viewStatesMap.containsKey(objectName)) return null; else return viewStatesMap.get(objectName).getGroupState(); } public void setViewStates(final String objectName, final String curSelectedState, final String curFieldState, final String curSortState, final String curHiliteState, final String curGroupState) { Record updatedRecord = new Record(); updatedRecord.setAttribute("USER_ID", User.getUserId()); updatedRecord.setAttribute("OBJECT", objectName); if (!ViewStateHelper.NO_UPDATE.equals(curSelectedState)) updatedRecord.setAttribute("SELECTEDSTATE", curSelectedState); if (!ViewStateHelper.NO_UPDATE.equals(curFieldState)) updatedRecord.setAttribute("FIELDSTATE", curFieldState); if (!ViewStateHelper.NO_UPDATE.equals(curSortState)) updatedRecord.setAttribute("SORTSTATE", curSortState); if (!ViewStateHelper.NO_UPDATE.equals(curHiliteState)) updatedRecord.setAttribute("HILITESTATE", curHiliteState); if (!ViewStateHelper.NO_UPDATE.equals(curGroupState)) updatedRecord.setAttribute("GROUPSTATE", curGroupState); viewstateDS.updateData(updatedRecord, new DSCallback() { @Override public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) { if (Helper.isSuccess(dsResponse)) { if (viewStatesMap.containsKey(objectName)) { ViewStates vs = viewStatesMap.get(objectName); if (!ViewStateHelper.NO_UPDATE.equals(curSelectedState)) vs.setSelectedState(curSelectedState); if (!ViewStateHelper.NO_UPDATE.equals(curFieldState)) vs.setFieldState(curFieldState); if (!ViewStateHelper.NO_UPDATE.equals(curSortState)) vs.setSortState(curSortState); if (!ViewStateHelper.NO_UPDATE.equals(curHiliteState)) vs.setHiliteState(curHiliteState); if (!ViewStateHelper.NO_UPDATE.equals(curGroupState)) vs.setGroupState(curGroupState); viewStatesMap.put(objectName, vs); } else { ViewStates vs = new ViewStates(curSelectedState, curFieldState, curSortState, curHiliteState, curGroupState); viewStatesMap.put(objectName, vs); } } } }); } }
Code:
<DataSource dbName="Oracle" tableName="T_VIEWSTATE" ID="T_VIEWSTATE" serverType="sql" defaultTextMatchStyle="exactCase"> <fields> <field primaryKey="true" name="USER_ID" type="integer" required="true" /> <field primaryKey="true" name="OBJECT" length="30" type="text" escapeHTML="true" required="true" /> <field foreignKey="V_USER_CREATED_BY.ID" name="CREATED_BY" title="Erstellt von" type="creator" /> <field name="CREATED_AT" title="Erstellt am" type="creatorTimestamp" /> <field foreignKey="V_USER_MODIFIED_BY.ID" name="MODIFIED_BY" title="Geändert von" type="modifier" /> <field name="MODIFIED_AT" title="Geändert am" type="modifierTimestamp" /> <field name="SELECTEDSTATE" length="1500" type="text" escapeHTML="true" /> <field name="FIELDSTATE" length="2000" type="text" escapeHTML="true" /> <field name="SORTSTATE" length="1000" type="text" escapeHTML="true" /> <field name="HILITESTATE" length="1500" type="text" escapeHTML="true" /> <field name="GROUPSTATE" length="1000" type="text" escapeHTML="true" /> </fields> <serverObject lookupStyle="new" className="server.worker.T_VIEWSTATE" /> <operationBindings> <operationBinding operationType="fetch" outputs="OBJECT, SELECTEDSTATE, FIELDSTATE, SORTSTATE, HILITESTATE, GROUPSTATE" /> <operationBinding operationType="update" canSyncCache="false" /> <operationBinding operationType="add" requiresRole="updateOnly" /> <operationBinding operationType="remove" requiresRole="noRemove" /> </operationBindings> </DataSource>
Code:
public class T_VIEWSTATE { public DSResponse fetch(DSRequest dsRequest, HttpServletRequest servletRequest) throws Exception { dsRequest.addToCriteria("USER_ID", DefaultOperators.Equals, User.getUserId(servletRequest)); return dsRequest.execute(); } public DSResponse add(DSRequest dsRequest, HttpServletRequest servletRequest) throws Exception { return dsRequest.execute(); } public DSResponse update(DSRequest dsRequest, HttpServletRequest servletRequest) throws Exception { @SuppressWarnings({ "unchecked", "unused" }) Map<String, Object> critMap = dsRequest.getCriteria(); @SuppressWarnings("unchecked") Map<String, Object> valueMap = dsRequest.getValues(); valueMap.put("USER_ID", User.getUserId(servletRequest)); dsRequest.setValues(valueMap); //TODO: Testcase: Generates exception // dsRequest.addToCriteria("USER_ID", DefaultOperators.Equals, User.getUserId(servletRequest)); if (dsRequest.getCriteriaValue("OBJECT") == null) return new DSResponse(dsRequest.getDataSource()).setOperationType(DataSource.OP_UPDATE).setFailure("Please specify the component you want to update the settings for."); // dsRequest.setAllowMultiUpdate(true); DSResponse updateResp = dsRequest.execute(); if (Helper.oneRow(updateResp)) return updateResp; else if (Helper.zeroRows(updateResp)) { DSRequest addReq = new DSRequest(DatasourceEnum.T_VIEWSTATE.getValue(), DataSource.OP_ADD, dsRequest.getRPCManager()); addReq.setValues(valueMap); DSResponse addResp = addReq.execute(); if (Helper.oneRow(addResp)) { addResp.setOperationType(DataSource.OP_UPDATE); return addResp; } } return new DSResponse().setFailure("There was some error updating the viewstate."); }; };
Code:
DROP SEQUENCE t_viewstate_id ; CREATE TABLE t_viewstate ( id INTEGER CONSTRAINT NNC_viewstate_id NOT NULL , tenant_id INTEGER CONSTRAINT NNC_viewstate_tenant_id NOT NULL , user_id INTEGER CONSTRAINT NNC_viewstate_user_id NOT NULL , object VARCHAR2 (30 CHAR) CONSTRAINT NNC_viewstate_object NOT NULL , selectedstate VARCHAR2 (1500 CHAR) , fieldstate VARCHAR2 (2000 CHAR) , sortstate VARCHAR2 (1000 CHAR) , hilitestate VARCHAR2 (1500 CHAR) , groupstate VARCHAR2 (1000 CHAR) , created_by INTEGER CONSTRAINT NNC_viewstate_creaby NOT NULL , created_at DATE DEFAULT SYSDATE CONSTRAINT NNC_viewstate_creaat NOT NULL , modified_by INTEGER CONSTRAINT NNC_viewstate_modby NOT NULL , modified_at DATE DEFAULT SYSDATE CONSTRAINT NNC_viewstate_modat NOT NULL ) ; COMMENT ON TABLE t_viewstate IS 'Persists the viewstate of ListGrids in the application.' ; ALTER TABLE t_viewstate ADD CONSTRAINT PK_viewstate PRIMARY KEY ( tenant_id, id ) ; ALTER TABLE t_viewstate ADD CONSTRAINT UC_viewstate_user_object UNIQUE ( user_id , object ) ; ALTER TABLE t_viewstate ADD CONSTRAINT FK_viewstate_user FOREIGN KEY ( tenant_id, user_id ) REFERENCES t_user ( tenant_id, id ) ; CREATE SEQUENCE t_viewstate_ID START WITH 1 NOCACHE ORDER ; CREATE OR REPLACE TRIGGER t_viewstate_B_I_R BEFORE INSERT ON t_viewstate FOR EACH ROW WHEN (NEW.id IS NULL) BEGIN :NEW.id := t_viewstate_ID.NEXTVAL; END; /
Best regards,
Blama
Leave a comment: