package gr.ntua.ivml.athena.actions;
import gr.ntua.ivml.athena.db.DB;
import gr.ntua.ivml.athena.db.LockManager;
import gr.ntua.ivml.athena.util.Import;
import gr.ntua.ivml.athena.persistent.DataUpload;
import gr.ntua.ivml.athena.persistent.Organization;
import gr.ntua.ivml.athena.persistent.Publication;
import gr.ntua.ivml.athena.persistent.User;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
@Results({
@Result(name="error", location="importsPanel.jsp"),
@Result(name="success", location="importsPanel.jsp")
})
public class ImportsPanel extends GeneralAction{
protected final Logger log = Logger.getLogger(getClass());
private int startImport, maxImports;
private int endImport;
private long orgId;
private long userId=-1;
private String action="";
private String actionmessage="";
private User u=null;
private Organization o=null;
private Publication pub=null;
private String pstatus="NOT DONE";
private String pstatusIcon="images/spacer.gif";
private ArrayList uploadCheck=new ArrayList();
@Action(value="ImportsPanel")
public String execute() throws Exception {
if(this.action.equalsIgnoreCase("delete")){
boolean del=false;
LockManager lm = DB.getLockManager();
for(int i=0;i<uploadCheck.size();i++)
{
DataUpload du=DB.getDataUploadDAO().getById(Long.parseLong((String)uploadCheck.get(i)), false);
if(du==null){
addActionMessage("Import "+uploadCheck.get(i)+" missing from database.");
}
else if( lm.isLocked( du ) != null ) {
addActionMessage( "Error!Import "+uploadCheck.get(i)+" currently locked. " );
}
else{
try{
del=DB.getDataUploadDAO().makeTransient(du);
addActionMessage("Import "+du.getOriginalFilename()+" successfully deleted");
}catch (Exception ex){
log.debug("exception thrown:"+ex.getMessage());
}
}
}
if(del){
while(startImport>this.getImportCount()){
startImport=startImport-maxImports;
}
if(startImport<0){startImport=0;}
}
return SUCCESS;
}
if(startImport>this.getImportCount()){
setActionmessage("Page does not exist.");
startImport=0;}
return SUCCESS;
}
public String getActionmessage(){
return(actionmessage);
}
public void setActionmessage(String message){
this.actionmessage=message;
}
public List<Organization> getOrganizations() {
return user.getAccessibleOrganizations();
}
public void setUploadCheck(String uploadCheck){
this.uploadCheck=new ArrayList();
if(uploadCheck.trim().length()>0){
String[] chstr=uploadCheck.split(",");
java.util.Collection c=java.util.Arrays.asList(chstr);
this.uploadCheck.addAll(c);
}
}
public Publication getPub(){
if(o!=null){
pub=DB.getPublicationDAO().findByOrganization(o);
setPstatus();
setPstatusIcon();
}
return pub;
}
public void setPstatusIcon(){
if(pub!=null){
if(pub.getStatusCode()==0){
pstatusIcon="images/okblue.png";
}
else if(pub.getStatusCode()==-1){
pstatusIcon="images/problem.png";
}
else if(pub.getStatusCode()==1 || pub.getStatusCode()==2 || pub.getStatusCode()==3 || pub.getStatusCode()==4){
pstatusIcon="images/loader.gif";
}
}
}
public String getPstatusIcon(){
return this.pstatusIcon;
}
public String getPstatus(){
return pstatus;
}
public void setPstatus(){
if(pub!=null){
if(pub.getStatusCode()==0){
pstatus="OK";
}
else if(pub.getStatusCode()==-1){
pstatus="ERROR";
}
else if(pub.getStatusCode()==1){
pstatus="IDLE";
}
else if(pub.getStatusCode()==2){
pstatus="CONSOLIDATE";
}
else if(pub.getStatusCode()==3){
pstatus="VERSION";
}
else if(pub.getStatusCode()==4){
pstatus="POSTPROCESS";
}
}
}
public void setAction(String action){
this.action=action;
}
public int getStartImport() {
return startImport;
}
public void setStartImport( int startImport ) {
this.startImport = startImport;
}
public int getEndImport() {
return endImport;
}
public int getMaxImports() {
return maxImports;
}
public void setMaxImports(int maxImports) {
this.maxImports = maxImports;
}
public long getorgId() {
return orgId;
}
public void setorgId(long orgId) {
this.orgId = orgId;
this.o=DB.getOrganizationDAO().findById(orgId, false);
}
public long getuserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
this.u=DB.getUserDAO().findById(userId, false);
}
public User getU(){
return this.u;
}
public Organization getO(){
return this.o;
}
public List<Import> getImports() {
List<Import> result = new ArrayList<Import>();
if(this.getuserId()!=-1){
result=getUserImports();
}
else{result=getAllImports();}
return result;
}
public List<Import> getUserImports() {
Organization org = null;
User u=null;
List<Import> result = new ArrayList<Import>();
u = DB.getUserDAO().findById(userId, false);
org = DB.getOrganizationDAO().findById(orgId, false);
List<DataUpload> du= DB.getDataUploadDAO().findByOrganizationUser(org, u);
//log.debug("du size:"+du.size()+" for user:"+ u.getLogin()+" and org:"+ org.getName());
if( du == null ) return Collections.emptyList();
//log.debug("startImport:"+startImport+" maxImports:"+maxImports);
List<DataUpload> l = du;
if(startImport<0)startImport=0;
while(du.size()<=startImport){
startImport=startImport-5;
}
if(du.size()>(startImport+maxImports)){
l = du.subList((int)(startImport), startImport+maxImports);}
else{
l = du.subList((int)(startImport),du.size());}
for( DataUpload x: l ) {
Import su = new Import(x);
result.add(su);
}
endImport = startImport+result.size();
return result;
}
public List<Import> getAllImports() {
Organization org = null;
User u=null;
List<Import> result = new ArrayList<Import>();
u = DB.getUserDAO().findById(userId, false);
org = DB.getOrganizationDAO().findById(orgId, false);
List<DataUpload> du= DB.getDataUploadDAO().findByOrganization(org);
//log.debug("du size:"+du.size()+" for user:"+ u.getLogin()+" and org:"+ org.getName());
if( du == null ) return Collections.emptyList();
//log.debug("startImport:"+startImport+" maxImports:"+maxImports);
List<DataUpload> l = du;
if(startImport<0)startImport=0;
while(du.size()<=startImport){
startImport=startImport-5;
}
if(du.size()>(startImport+maxImports)){
l = du.subList((int)(startImport), startImport+maxImports);}
else{
l = du.subList((int)(startImport),du.size());}
for( DataUpload x: l ) {
Import su = new Import(x);
result.add(su);
}
endImport = startImport+result.size();
return result;
}
public int getImportCount() {
int result=0;
Organization org = null;
org = DB.getOrganizationDAO().findById(orgId, false);
if(this.userId==-1){
List<User> uploaders=DB.getDataUploadDAO().getUploaders(org);
for( User cu:uploaders){
List<DataUpload> du= DB.getDataUploadDAO().findByOrganizationUser(org, cu);
result+=du.size();
}
}else{
User u=null;
u = DB.getUserDAO().findById(userId, false);
if( org == null || u==null ) return 0;
result=DB.getDataUploadDAO().findByOrganizationUser(org, u).size();
}
return result;
}
public String getPreviousPage() {
if( startImport > 4 ) return (startImport-5)+", 5, " + userId +","+ orgId;
else return "0,5,"+ userId+","+orgId;
}
}