📄 tickethandler.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.qwoss.client.frames.mainframe;
import com.queplix.core.client.app.rpc.RPC;
import com.queplix.core.client.app.vo.EntityData;
import com.queplix.core.client.app.vo.EntityReferenceData;
import com.queplix.core.client.app.vo.EntityReferenceDataRequest;
import com.queplix.core.client.app.vo.FamgMeta;
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.GridSearchProperties;
import com.queplix.core.client.app.vo.ListboxDataRequest;
import com.queplix.core.client.app.vo.ListboxFieldData;
import com.queplix.core.client.app.vo.MetaData;
import com.queplix.core.client.app.vo.MultiselectFieldData;
import com.queplix.core.client.app.vo.RowData;
import com.queplix.core.client.app.vo.SubsetData;
import com.queplix.core.client.app.vo.TextareaFieldData;
import com.queplix.core.client.app.vo.TextboxFieldData;
import com.queplix.core.client.common.CollectionsHelper;
import com.queplix.core.client.common.StringUtil;
import com.queplix.core.client.common.ui.DialogHelper;
import com.queplix.core.client.frames.email.EmailComposeHelper;
import com.queplix.core.client.frames.mainframe.DefaultOperationStrategy;
import com.queplix.core.client.frames.mainframe.FormOperations;
import com.queplix.core.client.frames.mainframe.FormState;
import com.queplix.core.client.frames.mainframe.OperationContext;
import com.queplix.core.client.frames.mainframe.OperationTypes;
import com.queplix.qwoss.client.app.rpc.CustomRPC;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
/**
* Description:
* @author rustem.nizamiev, sergei.savchuk
*/
public class TicketHandler extends DefaultOperationStrategy {
private static final String TICKET_ID_CAPTION = "Ticket : ";
private static final long BASE_ENTITYROWID = -1;
private static final int SELECTED_INDEX = 0;
private static final int STATUS_OWNED = 2;
private static final String MY_QUEUES = "myQueues";
private static final String MY_TICKETS = "myTickets";
private static final String OPEN_TICKETS = "openTickets";
private static final String ACCEPT_TICKET = "acceptTicket";
private static final String CHANGE_OWNER_QUESTION = "Would you like to change the owner?";
private static final String TICKET_ID_FIELD_NAME = "qw_ticketid";
private static final String SUBJECT_FIELD_NAME = "qw_problem";
private static final String DESCRIPTION_FIELD_NAME = "qw_description";
private static final String DESCRIPTION_TEXT_FIELD_NAME = "qw_descriptiontext";
private static final String RESPONSE_FIELD_NAME = "qw_response";
private static final String RESPONSE_TEXT_FIELD_NAME = "qw_responsetext";
private static final String OWNER = "qw_ownerid";
private static final String AGENT = "qw_agentid";
private static final String STATUS = "qw_status";
public static final String COMPONENT_ID_FIELD_NAME = "qw_componentid"; // 1st constrained control
public static final String REP_BVERSION_ID_FIELD_NAME = "qw_repbuildversionid"; // 2nd constrained control
public static final String RES_BVERSION_ID_FIELD_NAME = "qw_resbuildversionid"; // 3rd constrained control
public static final String REP_ENV_ID_FIELD_NAME = "qw_repenvironmentid"; // 4th constrained control
public static final String TEST_ENV_ID_FIELD_NAME = "qw_testenvironmentid"; // 5th constrained control
public static final String PRODUCT_ID_FIELD_NAME = "qw_productid"; // constraint-source control
public static final String CUSTOMER_ID_FIELD_NAME = "qw_customerid";
public static final String EMPLOYEE_ID_FIELD_NAME = "qw_employeeid";
public static final String CUSTOMER_TICKET_ENTITY_NAME = "customer.foreign";
public static final String CUSTOMER_TICKET_ENTITY_PKEYFIELD_NAME = "qw_customerid";
public static final String COMPONENT_FILTER_FIELD_NAME
= "qw_productid"; //field name in entity, where this entityReference is referencing.
public static final String BVERSION_FILTER_FIELD_NAME
= "qw_productid"; //field name in entity, where this entityReference is referencing.
public static final String ENV_FILTER_FIELD_NAME = "qw_productid"; //field name in entity, where this entityReference is referencing.
//public static final String ENVCUST_FILTER_FIELD_NAME = "qw_orgid"; //field name in entity, where this entityReference is referencing.
public static final String SUB_CATEGORY_FIELD_NAME = "qw_subcategory"; //filtering field
public static final String CATEGORY_FIELD_NAME = "qw_category"; //filter sub-category by category id
public static final String CATEGORY_FIELD_IN_SUBCATEGORY_ENTITY = "qw_categoryid"; //filter field name in sub-category entity
private static final String CUR_INTERACTION_ID_FIELD = "qw_cur_interaction";
private static final String SOLUTION_CUR_TICKET_ID_FIELD = "qw_cur_ticket";
private static final String SOLUTION_PRODUCT_FIELD = "qw_productid";
private static final String SOLUTION_COMPONENT_FIELD = "qw_componentid";
private static final String SOLUTION_SUMMARY_FIELD = "qw_summary";
private static final String SOLUTION_PROBLEM_FIELD = "qw_problem";
private static final String SOLUTION_PROBLEM_TEXT_FIELD = "qw_problemtext";
private static final String SOLUTION_SOL_FIELD = "qw_solution";
private static final String SOLUTION_SOL_TEXT_FIELD = "qw_solutiontext";
private static final String LINKET_TICKETS_FIELD = "linked_tickets";
private static final String INTERACTION_ID_FIELD = "qw_interactionid";
private static final String LINK_TO_INTERACTION_BUTTON = "LINK_TO_INTERACTION_BUTTON";
private static final String NEW_SOLUTION_BUTTON = "NEW_SOLUTION_BUTTON";
private static final String SEND_EMAIL_BUTTON = "SEND_EMAIL_BUTTON";
private static final String TICKET_ENTITY = "ticket.ticket";
private static final String INTER_TICKET_ENTITY = "inter_ticket.linkset";
private static final String INTER_TICKET_FILTER_FIELD = "qw_ticketid";
private static final String TICKETEVENT_ENTITY = "ticketevent.ticket";
private static final String TICKETEVENT_FILTER_FIELD = "qw_ticketid";
private static final String ATTACH_FILE = "ATTACH_FILE";
private static final String ATTACHMENT_OBJECTS_ENTITY = "attachment_objects.ticket";
private static final String OBJECT_ID = "object_id";
private ListboxFieldData oldCategoryData = null;
private FieldData[] initialFieldsData = null;
private String curOriginInteractionId = "0";
private HashMap replyInitVals;
private ReplyComposeDialog replyDialog;
/*
* Interaction and AttachmentTicket form ids
* It should initialized in HandlerFactory or it's siblings
*/
private String interFormId, attachTicketFormId, solutionFormId, eventFormId;
// Ties with other handlers
private InteractionHandler interHandler;
private AttachmentTicketHandler attachHandler;
private SolutionHandler solutionHandler;
private TicketEventHandler eventHandler;
private String eventId;
private ArrayList externalEntityFilters = new ArrayList();
//private String externalEQLFilter = "";
//void setExternalEQLFilter(String eqlFilter){
// externalEQLFilter = eqlFilter;
//}
void setExternalEntityFilters(ArrayList entityFilters){
externalEntityFilters = entityFilters;
}
void addExternalFilter(EntityData entityFilter){
if(externalEntityFilters == null)
externalEntityFilters = new ArrayList();
externalEntityFilters.add(entityFilter);
}
void removeAllExternalFilters(){
externalEntityFilters.clear();
}
private static final Set allowedStatus = new HashSet();
static {
allowedStatus.add(new Long(TicketHelper.NEW_STATUS));
allowedStatus.add(new Long(TicketHelper.ASSIGNED_STATUS));
allowedStatus.add(new Long(TicketHelper.OWNED_STATUS));
}
public void searchRecords(Collection entitiesFilters,
GridSearchProperties props,
boolean isLocalSearch) {
//DialogHelper.showModalMessageDialog("HERE ARE:");
if(externalEntityFilters != null && externalEntityFilters.size() > 0) {
if(entitiesFilters != null) {
entitiesFilters.addAll(externalEntityFilters);
} else {
entitiesFilters = externalEntityFilters;
}
externalEntityFilters = null;
}
super.searchRecords(entitiesFilters, props, isLocalSearch);
eventId = null;
}
public void handleCustomMenuEvent(String eventId) {
if(eventId == null) return;
FamgMeta.Index formIndex = getFormIndex();
//Set event for future use.
this.eventId = eventId;
if (eventId.equals(MY_QUEUES) || eventId.equals(MY_TICKETS) || eventId.equals(OPEN_TICKETS)) {
FormOperations formContext = getOperationContext().getFormOperations();
if(eventId.equals(MY_QUEUES)){
EntityReferenceData erd = new EntityReferenceData(OWNER);
erd.setSelectedRowID(new Long(getUserId()));
addExternalFilter(
new EntityData(TICKET_ENTITY, new Long(-1),
new FieldData[] { erd } ));
} else
if(eventId.equals(MY_TICKETS)){
EntityReferenceData erd = new EntityReferenceData(AGENT);
erd.setSelectedRowID(new Long(getUserId()));
addExternalFilter(
new EntityData(TICKET_ENTITY, new Long(-1),
new FieldData[] { erd } ));
} else
if(eventId.equals(OPEN_TICKETS)){
ListboxFieldData lbfd = new ListboxFieldData(STATUS,
new SubsetData(CollectionsHelper.createIncrementalArray(TicketHelper.CLOSED_STATUS, 0)));
addExternalFilter(
new EntityData(TICKET_ENTITY, new Long(-1),
new FieldData[] { lbfd } ));
}
formContext.clearForm(formIndex, true);
getOperationContext().performOperation(OperationTypes.SEARCH_RECORDS, formIndex);
}
if (eventId.equals(ACCEPT_TICKET)) {
// check all custom dependances(conditions)
if(checkDependences(formIndex)) {
getOperationContext().performOperation(OperationTypes.LOCK_AND_EDIT_RECORD, formIndex);
}
}
}
private boolean checkDependences(FamgMeta.Index formIndex) {
FormOperations formContext = getOperationContext().getFormOperations();
int state = formContext.getFormState(formIndex);
if(state != FormState.SELECTED_STATE) {
return false;
}
int type = getOperationContext().getMetaData().getFamgMeta(formIndex).getForm().getEntityMeta().getField(STATUS).getDataType();
if(type == FieldMeta.LISTBOX) {
//get current status
FieldData statusField = formContext.getFieldData(formIndex, STATUS);
long curStatus = ((ListboxFieldData) statusField).getItemsSelected()
.getSelectedIDs()[SELECTED_INDEX];
if(!allowedStatus.contains(new Long(curStatus))) {
return false;
}
}
FieldData ownerField = formContext.getFieldData(formIndex, OWNER);
if(ownerField instanceof EntityReferenceData) {
Long selRowId = ((EntityReferenceData) ownerField) .getSelectedRowID();
if(selRowId != null && getUserId() != selRowId.longValue()) {
if(DialogHelper.showModalQuestionDialog(CHANGE_OWNER_QUESTION)
== DialogHelper.NO) {
return false;
}
}
}
return true;
}
private long getUserId() {
return getOperationContext().getMetaData().getUserProfile().getUserID();
}
private String getUserFullname() {
return getOperationContext().getMetaData().getUserProfile().getFullName();
}
public void handleControlDataRequest(FieldDataRequest request) {
FamgMeta.Index formIndex = getFormIndex();
FormOperations context = getOperationContext().getFormOperations();
String elementID = request.getElementID();
if(COMPONENT_ID_FIELD_NAME.equalsIgnoreCase(elementID)) {
EntityReferenceDataRequest theRequest = (EntityReferenceDataRequest) request;
FieldData productData = context.getFieldData(formIndex,
PRODUCT_ID_FIELD_NAME);
FieldData cloned = productData.cloneData();
cloned.setFieldID(COMPONENT_FILTER_FIELD_NAME);
theRequest.setAdditionalFilterForRequestingEntity(cloned);
} else if(REP_BVERSION_ID_FIELD_NAME.equalsIgnoreCase(elementID)) {
EntityReferenceDataRequest theRequest = (EntityReferenceDataRequest) request;
FieldData productData = context.getFieldData(formIndex,
PRODUCT_ID_FIELD_NAME);
FieldData cloned = productData.cloneData();
cloned.setFieldID(BVERSION_FILTER_FIELD_NAME);
theRequest.setAdditionalFilterForRequestingEntity(cloned);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -