package pt.estgp.estgweb.web;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.services.ftpservices.FtpRequestForm;
import pt.estgp.estgweb.web.controllers.ApplicationController;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @author Jorge
* @date 27/Fev/2009
* @time 1:19:57
*/
public class FtpManager
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(FtpManager.
class);
public static void checkIfAnyFilesToUploadFromRequest
(ApplicationController messageBack, HttpServletRequest request, HttpServletResponse response
)
{
1.5.0/docs/api/java/lang/String.html">String formUploadStyle =
"display:none;";
int maxMegas = pt.
estgp.
estgweb.
Globals.
MAX_FILE_UPOLOAD_SIZE_MBYTES;
try
{
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.
isMultipartContent(request
);
if (isMultipart
)
{
// Create a factory for disk-based file items
DiskFileItemFactory factory =
new DiskFileItemFactory
();
// Set factory constraints
factory.
setSizeThreshold(maxMegas
* 1024
* 1024
);
factory.
setRepository(new 1.5.0/docs/api/java/io/File.html">File(pt.
estgp.
estgweb.
Globals.
TMP_DIR));
// Create a new file upload handler
ServletFileUpload upload =
new ServletFileUpload
(factory
);
// Set overall request size constraint
upload.
setSizeMax((maxMegas + 1
) * 1024
* 1024
);
// Parse the request
List
<FileItem
> items = upload.
parseRequest(request
);
List
<FileItem
> items2import =
new ArrayList
<FileItem
>();
for (FileItem item : items
)
{
5+0%2Fdocs%2Fapi+InputStream">InputStream stream = item.
getInputStream();
if (item.
isFormField())
{
request.
setAttribute(item.
getFieldName(), item.
getString());
}
if (stream
!=
null && item.
getSize() > 0
&& item.
getName() !=
null)
{
items2import.
add(item
);
}
else if(stream
!=
null && item.
getName() !=
null)
{
1.5.0/docs/api/java/lang/String.html">String newFolder =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("newFolder");
1.5.0/docs/api/java/lang/String.html">String deleteFile =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("deleteFile");
1.5.0/docs/api/java/lang/String.html">String deleteFolder =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("deleteFolder");
if((newFolder ==
null || newFolder.
length() == 0
) && (deleteFile ==
null || deleteFile.
length() == 0
) && (deleteFolder ==
null || deleteFolder.
length() ==
0))
{
logger.
warn("ITEM:" + item.
getName() +
" not parameter and has ZERO BYTES will not import");
messageBack.
addError(request,
"errors.file.zero.bytes",item.
getName());
}
}
}
1.5.0/docs/api/java/lang/String.html">String username =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("username");
1.5.0/docs/api/java/lang/String.html">String password =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("password");
1.5.0/docs/api/java/lang/String.html">String server =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("server");
1.5.0/docs/api/java/lang/String.html">String startPath =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute(DirWebProxy.
FTP_ACTUAL_PATH_KEY);
if (startPath ==
null)
startPath =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute(LayoutController.
FTP_ACTUAL_PATH_KEY);
1.5.0/docs/api/java/lang/String.html">String serverConfName =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("serverConfName");
1.5.0/docs/api/java/lang/String.html">String savePassword =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("savePassword");
1.5.0/docs/api/java/lang/String.html">String newFolder =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("newFolder");
1.5.0/docs/api/java/lang/String.html">String deleteFile =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("deleteFile");
1.5.0/docs/api/java/lang/String.html">String deleteFolder =
(1.5.0/docs/api/java/lang/String.html">String) request.
getAttribute("deleteFolder");
if (items2import.
size() > 0
||
(newFolder
!=
null && newFolder.
trim().
length() > 0
)
||
(deleteFile
!=
null && deleteFile.
trim().
length() > 0
)
||
(deleteFolder
!=
null && deleteFolder.
trim().
length() > 0
))
{
FtpRequestForm ftpRequestForm =
new FtpRequestForm
();
CourseUnitView courseUnitView =
(CourseUnitView
) request.
getAttribute("CourseUnitView");
if(courseUnitView
!=
null)
ftpRequestForm.
setCourseUnitView(courseUnitView
);
ftpRequestForm.
setServerConfName(serverConfName
);
ftpRequestForm.
setUsername(username
);
ftpRequestForm.
setPassword(password
);
if (savePassword
!=
null && savePassword.
trim().
length() > 0
)
ftpRequestForm.
setSavePassword(true);
ftpRequestForm.
setNewFolderName(newFolder
);
ftpRequestForm.
setFileToDelete(deleteFile
);
ftpRequestForm.
setFolderToDelete(deleteFolder
);
ftpRequestForm.
setServerUrl(server
);
ftpRequestForm.
setStartPath(startPath
);
ftpRequestForm.
setFilesToImport(items2import
);
IServiceManager sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{ftpRequestForm
};
try
{
1.5.0/docs/api/java/lang/String.html">String result =
(1.5.0/docs/api/java/lang/String.html">String) sm.
execute(RequestUtils.
getRequester(request, response
),
"FtpService", args, names
);
if(result.
indexOf("error") >= 0
)
messageBack.
addError(request, result
);
else
messageBack.
addMessage(request, result
);
}
catch (1.5.0/docs/api/java/lang/Exception.html">Exception e
)
{
response.
sendError(500,e.
toString());
return;
}
catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable throwable
)
{
logger.
error(throwable,throwable
);
}
}
else
{
logger.
info("Zero items to import");
}
}
}
catch (FileUploadException e
)
{
formUploadStyle =
"";
messageBack.
addError(request,
"errors.file.too.long",
""+maxMegas
);
}
catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
)
{
logger.
error(e,e
);
}
request.
setAttribute("formUploadStyle",formUploadStyle
);
}
}