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: