📄 integratorgetrecords.java
字号:
/*
* Copyright 2006-2007 Queplix Corp.
*
* Licensed under the Queplix Public License, Version 1.1.1 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.queplix.com/solutions/commercial-open-source/queplix-public-license/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.queplix.core.integrator;
import com.queplix.core.client.app.rpc.DisplayableException;
import com.queplix.core.client.app.vo.AccumulatedEntitiesRequestObject;
import com.queplix.core.client.app.vo.AccumulatedEntityDataResponse;
import com.queplix.core.client.app.vo.ClearEntityRequestObject;
import com.queplix.core.client.app.vo.CustomizeGridRequestObject;
import com.queplix.core.client.app.vo.DateFieldData;
import com.queplix.core.client.app.vo.EmailComposeRequestObject;
import com.queplix.core.client.app.vo.EntityData;
import com.queplix.core.client.app.vo.EntityDataResponseObject;
import com.queplix.core.client.app.vo.EntityDeleteRequestObject;
import com.queplix.core.client.app.vo.EntityIDRequestObject;
import com.queplix.core.client.app.vo.EntityReferenceData;
import com.queplix.core.client.app.vo.EntityReferenceDataRequest;
import com.queplix.core.client.app.vo.EntityReferenceOnDemandData;
import com.queplix.core.client.app.vo.EntityUpdateRequestObject;
import com.queplix.core.client.app.vo.EntityUpdateResponseObject;
import com.queplix.core.client.app.vo.FieldData;
import com.queplix.core.client.app.vo.FieldDataRequest;
import com.queplix.core.client.app.vo.FieldMeta;
import com.queplix.core.client.app.vo.FieldOnDemandData;
import com.queplix.core.client.app.vo.FieldType;
import com.queplix.core.client.app.vo.FormatDataRequestObject;
import com.queplix.core.client.app.vo.FormatDataResponseObject;
import com.queplix.core.client.app.vo.GetControlDataInformRequest;
import com.queplix.core.client.app.vo.GetControlInformOnDemandData;
import com.queplix.core.client.app.vo.GetRecordsDataInformRequest;
import com.queplix.core.client.app.vo.GetRecordsInformOnDemandData;
import com.queplix.core.client.app.vo.GridData;
import com.queplix.core.client.app.vo.HistoryDataRequest;
import com.queplix.core.client.app.vo.HistoryOnDemandData;
import com.queplix.core.client.app.vo.InFormDataRequest;
import com.queplix.core.client.app.vo.InFormGridOnDemandData;
import com.queplix.core.client.app.vo.InFormGridType;
import com.queplix.core.client.app.vo.ListBoxOnDemandData;
import com.queplix.core.client.app.vo.ListboxDataRequest;
import com.queplix.core.client.app.vo.MemoFieldData;
import com.queplix.core.client.app.vo.MoreDataResponseObject;
import com.queplix.core.client.app.vo.MultiselectDataRequest;
import com.queplix.core.client.app.vo.MultiselectOnDemandData;
import com.queplix.core.client.app.vo.NewEntityRequestObject;
import com.queplix.core.client.app.vo.ParseDateRequestObject;
import com.queplix.core.client.app.vo.ParseDateResponseObject;
import com.queplix.core.client.app.vo.PrintFormRequestObject;
import com.queplix.core.client.app.vo.PrintGridRequestObject;
import com.queplix.core.client.app.vo.RecordFilter;
import com.queplix.core.client.app.vo.RowData;
import com.queplix.core.client.app.vo.SavedSearchDeleteRequestObject;
import com.queplix.core.client.app.vo.SavedSearchObject;
import com.queplix.core.client.app.vo.SearchGridRecordsResponseObject;
import com.queplix.core.client.app.vo.SearchInformOnDemandData;
import com.queplix.core.client.app.vo.SearchInformRequest;
import com.queplix.core.client.app.vo.SubsetData;
import com.queplix.core.client.app.vo.SubsetItemMeta;
import com.queplix.core.client.app.vo.SubsetMeta;
import com.queplix.core.client.app.vo.TextboxFieldData;
import com.queplix.core.integrator.entity.BoundFormsOperationsHelper;
import com.queplix.core.integrator.entity.EntityFacade;
import com.queplix.core.integrator.entity.EntityOperationsHelper;
import com.queplix.core.integrator.entity.EntitySerializeHelper;
import com.queplix.core.integrator.entity.EntityViewHelper;
import com.queplix.core.integrator.entity.IntegratedRecord;
import com.queplix.core.integrator.entity.IntegratedRecordSet;
import com.queplix.core.integrator.entity.RecordDoesntExistsException;
import com.queplix.core.integrator.entity.RequestProperties;
import com.queplix.core.integrator.security.LogonSession;
import com.queplix.core.integrator.security.SecurityHelper;
import com.queplix.core.integrator.security.User;
import com.queplix.core.integrator.security.WebLoginManager;
import com.queplix.core.modules.config.ejb.UserPropertyManagerLocal;
import com.queplix.core.modules.eql.EQLERes;
import com.queplix.core.modules.eql.ejb.HistoryLocal;
import com.queplix.core.modules.eql.ejb.LockManagerLocal;
import com.queplix.core.modules.eql.error.EQLConstraintViolationException;
import com.queplix.core.modules.eql.error.EQLException;
import com.queplix.core.modules.eql.error.EQLLockException;
import com.queplix.core.modules.eql.error.EQLSystemException;
import com.queplix.core.modules.eql.error.UserQueryParseException;
import com.queplix.core.modules.eqlext.jxb.gr.Report;
import com.queplix.core.modules.eqlext.jxb.gr.Reqs;
import com.queplix.core.modules.eqlext.jxb.gr.ResField;
import com.queplix.core.modules.eqlext.jxb.gr.Ress;
import com.queplix.core.modules.eqlext.utils.ExtDateParser;
import com.queplix.core.modules.eqlext.utils.ReportBuilder;
import com.queplix.core.modules.inbox.InboxHelper;
import com.queplix.core.modules.inbox.InboxMessage;
import com.queplix.core.modules.inbox.ejb.InboxManagerLocal;
import com.queplix.core.modules.mail.MailAddress;
import com.queplix.core.utils.DateHelper;
import com.queplix.core.utils.StringHelper;
import javax.mail.MessagingException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
/**
* @author rustem.nizamiev
* @author Sergey Kozmin
*/
public class IntegratorGetRecords {
private static final String SEARCH_SAVING_ENTITY = "search.search";
public static SearchGridRecordsResponseObject searchWithMultipleFormConstraints(
AccumulatedEntitiesRequestObject searchRequest,
HttpServletRequest request)
throws DisplayableException {
SearchGridRecordsResponseObject gridResult = null;
try {
LogonSession ls = WebLoginManager.getLogonSession(request);
RequestProperties props = new RequestProperties();
props.setDoCount(searchRequest.getProps().isDoCount());
props.setPage(searchRequest.getProps().getPage());
props.setPagesize(searchRequest.getProps().getPageSize());
props.setSortField(searchRequest.getProps().getSortField());
props.setIgnoreSendOnRequest(false);
String entityName = EntityOperationsHelper.getEntityNameFromFormID(searchRequest.getFormID());
List<EntityData> entityFilters = (List<EntityData>) searchRequest.getEntityFilters();
ActionContext actx = IntegratorHelper.getActionContext(request);
RequestBuilder requestBuilder = RequestBuilderFactory.createRequestBuilder(entityName, entityFilters, props, ls, actx);
gridResult = IntegratorHelper.getNotEmptyResult(props.getPage(),
requestBuilder,
entityName,
EntityViewHelper.FieldsModificator.CUSTOMIZED_GRID,
ls, actx);
} catch (UserQueryParseException ex) {
IntegratorHelper.throwException("Incorrect value: " + ex.getValue() + ". Entity: " + ex.getEntityName() + ". Field: " +
ex.getFieldCaption(), ex);
} catch (EQLSystemException ex) {
IntegratorHelper.throwException("EQL System Exception. " + ex.getMessage(), ex);
} catch (EQLException ex) {
IntegratorHelper.throwException("EQL Exception. " + ex.getMessage(), ex);
} catch (RuntimeException th) {
IntegratorHelper.reThrowException(th);
}
return gridResult;
}
public static AccumulatedEntityDataResponse getEntityData(EntityIDRequestObject entityDataRequest, HttpServletRequest request)
throws DisplayableException {
AccumulatedEntityDataResponse entityData = null;
try {
ServletContext ctx = request.getSession().getServletContext();
LogonSession ls = WebLoginManager.getLogonSession(request);
BoundFormsOperationsHelper.ResultFormStructure boundResultSet =
BoundFormsOperationsHelper.getBoundFormResult(entityDataRequest.getFormID(),
entityDataRequest.getRowID(), ls, IntegratorHelper.getActionContext(ctx));
List<EntityData> entities = boundResultSet.getEntityDatas();
List<EntityData> fields = boundResultSet.getFieldDatas();
List<GridData> gridData = boundResultSet.getGridData();
entityData = new AccumulatedEntityDataResponse(entities.toArray(new EntityData[entities.size()]),
fields.toArray(new EntityData[fields.size()]), gridData);
} catch (RuntimeException th) {
IntegratorHelper.reThrowException(th);
}
return entityData;
}
public static AccumulatedEntityDataResponse getLockForEditRecord(EntityIDRequestObject entityDataRequest, HttpServletRequest request)
throws DisplayableException {
ServletContext ctx = request.getSession().getServletContext();
AccumulatedEntityDataResponse resp = null;
Long rowID = entityDataRequest.getRowID();
try {
LogonSession ls = WebLoginManager.getLogonSession(request);
String formID = entityDataRequest.getFormID();
//trying to lock record with specified pkey (row id)
String entityName = EntityOperationsHelper.getEntityNameFromFormID(formID);
ActionContext actx = IntegratorHelper.getActionContext(ctx);
IntegratedRecordSet resultset = EntityFacade.getEntityByIDRequest(entityName, rowID, ls, actx);
if (resultset.getRowsCount() > 0) {
LockManagerLocal locker = actx.getRecordsLockManager();
EQLERes eqleRes = (EQLERes) resultset.getInitialResultSet().getEQLRes(); //todo implemented in old core. EJB's use the same way. Need to change non-safe down-cast.
//lock the record, and after we lock it, get it, because it can be changed, before we lock the record.
locker.lock(eqleRes, getFocusIDFromFormID(formID), 0L, ls);
//get bound records.
BoundFormsOperationsHelper.ResultFormStructure boundResultSet =
BoundFormsOperationsHelper.getBoundFormResult(entityDataRequest.getFormID(), entityDataRequest.getRowID(), ls, actx);
List<EntityData> entities = boundResultSet.getEntityDatas();
List<EntityData> fields = boundResultSet.getFieldDatas();
List<GridData> gridData = boundResultSet.getGridData();
resp = new AccumulatedEntityDataResponse(entities.toArray(new EntityData[entities.size()]),
fields.toArray(new EntityData[fields.size()]), gridData);
} else {
IntegratorHelper.throwException("System could not find the record you are trying to lock. " +
"Probably, the record was deleted, update your data. ");
}
} catch (EQLLockException e) {
IntegratorHelper.throwException("Record is already locked. ", e);
} catch (EQLException e) {
IntegratorHelper.throwException("Eql exception occured. Caused by :" + e.getMessage() + ". ", e);
} catch (RuntimeException th) {
IntegratorHelper.reThrowException(th);
}
return resp;
}
public static AccumulatedEntityDataResponse unlockAfterEditRecord(EntityIDRequestObject entityDataRequest, HttpServletRequest request)
throws DisplayableException {
ServletContext ctx = request.getSession().getServletContext();
LogonSession ls = WebLoginManager.getLogonSession(request);
Long rowID = entityDataRequest.getRowID();
String formID = entityDataRequest.getFormID();
ActionContext servletCacheActionContext = IntegratorHelper.getActionContext(ctx);
try {
//trying to lock record with specified pkey (row id)
String entityName = EntityOperationsHelper.getEntityNameFromFormID(formID);
IntegratedRecordSet resultset = EntityFacade.getEntityByIDRequest(entityName, rowID, ls, servletCacheActionContext);
if (resultset.getRowsCount() > 0) {
LockManagerLocal locker = servletCacheActionContext.getRecordsLockManager();
EQLERes eqleRes = (EQLERes) resultset.getInitialResultSet().getEQLRes(); //todo implemented in old core. EJB's use the same way. Need to change non-safe down-cast.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -