/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando Enterprise Edition software.
* You can redistribute it and/or modify it
* under the terms of the Entando's EULA
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpwtt.apsadmin.ticket;
import java.util.ArrayList;
import java.util.List;
import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.services.authorization.IApsAuthority;
import com.agiletec.aps.system.services.authorization.authorizator.IApsAuthorityManager;
import com.agiletec.aps.system.services.role.IRoleManager;
import com.agiletec.plugins.jpwtt.aps.system.services.JpWttSystemConstants;
import com.agiletec.plugins.jpwtt.aps.system.services.ticket.model.ITicketSearchBean;
import com.agiletec.plugins.jpwtt.aps.system.services.ticket.model.Ticket;
import com.agiletec.plugins.jpwtt.aps.system.services.ticket.model.TicketSearchBean;
import com.agiletec.plugins.jpwtt.apsadmin.ticket.common.AbstractTicketFinderAction;
public class TicketFinderAction extends AbstractTicketFinderAction {
@Override
public List<String> getTicketIds() {
List<String> ticketIds = null;
try {
if (this.isAdmin().booleanValue()) {
return super.getTicketIds();
} else {
TicketSearchBean searchBean = (TicketSearchBean) this.prepareSearchBean();
Integer status = this.getStatus();
if (status!=null) {
int statusInt = status.intValue();
switch (statusInt) {
case Ticket.STATES_ASSIGNABLE:
ticketIds = this.searchMyAssignableTicketsId(searchBean);
break;
case Ticket.STATES_ASSIGNED:
ticketIds = this.searchMyAssignedTickets(searchBean);
break;
}
} else {
ticketIds = this.searchMyAssignableTicketsId(searchBean);
List<String> assignedTicketIds = this.searchMyAssignedTickets(searchBean);
if (ticketIds==null || ticketIds.size()==0) {
ticketIds = assignedTicketIds;
} else if (assignedTicketIds!=null && assignedTicketIds.size()>0) {
for (String ticketId : assignedTicketIds) {
if (!ticketIds.contains(ticketId)) ticketIds.add(ticketId);
}
}
}
if (null==ticketIds) {
ticketIds = new ArrayList<String>();
}
}
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "getTicketIds");
throw new RuntimeException("Error searching tickets", t);
}
return ticketIds;
}
protected List<String> searchMyAssignableTicketsId(TicketSearchBean searchBean) {
List<String> ticketIds = null;
try {
List<IApsAuthority> roles = ((IApsAuthorityManager) this.getRoleManager()).getAuthorizationsByUser(this.getCurrentUser());
if (null!=roles && roles.size()>0) {
String[] wttRoles = new String[roles.size()];
int index = 0;
for (IApsAuthority role : roles) {
wttRoles[index++] = role.getAuthority();
}
searchBean.setStates(new int[] { Ticket.STATES_ASSIGNABLE });
searchBean.setOperator(null);
searchBean.setWttRoles(wttRoles);
ticketIds = this.getTicketManager().searchTicketIds(searchBean);
}
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "searchAssignableTicketsId");
}
return ticketIds;
}
protected List<String> searchMyAssignedTickets(TicketSearchBean searchBean) {
List<String> ticketIds = null;
try {
searchBean.setStates(new int[] { Ticket.STATES_ASSIGNED });
searchBean.setOperator(this.getCurrentUser().getUsername());
searchBean.setWttRoles(null);
ticketIds = this.getTicketManager().searchTicketIds(searchBean);
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "searchAssignableTicketsId");
}
return ticketIds;
}
@Override
protected ITicketSearchBean prepareSearchBean() {
TicketSearchBean searchBean = (TicketSearchBean) super.prepareSearchBean();
searchBean.setOperator(this.getOperator());
return searchBean;
}
public Boolean isAdmin() {
if (null==this._admin) {
boolean isAdmin = this.getAuthorizationManager().isAuthOnPermission(this.getCurrentUser(), JpWttSystemConstants.WTT_ADMIN_PERMISSION);
this._admin = new Boolean(isAdmin);
}
return _admin;
}
public String getOperator() {
return _operator;
}
public void setOperator(String operator) {
this._operator = operator;
}
protected IRoleManager getRoleManager() {
return _authorityManager;
}
public void setRoleManager(IRoleManager authorityManager) {
this._authorityManager = authorityManager;
}
private Boolean _admin;
private String _operator;
private IRoleManager _authorityManager;
}