/**
* The contents of this file are subject to the Mozilla Public License
* Version 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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations under
* the License.
*
* The Original Code is OpenELIS code.
*
* Copyright (C) CIRG, University of Washington, Seattle WA. All Rights Reserved.
*
*/
package us.mn.state.health.lims.analyzerimport.action;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.validator.GenericValidator;
import us.mn.state.health.lims.analyzerimport.analyzerreaders.AnalyzerReader;
import us.mn.state.health.lims.analyzerimport.analyzerreaders.AnalyzerReaderFactory;
import us.mn.state.health.lims.login.dao.LoginDAO;
import us.mn.state.health.lims.login.daoimpl.LoginDAOImpl;
import us.mn.state.health.lims.login.valueholder.Login;
import us.mn.state.health.lims.systemuser.dao.SystemUserDAO;
import us.mn.state.health.lims.systemuser.daoimpl.SystemUserDAOImpl;
import us.mn.state.health.lims.systemuser.valueholder.SystemUser;
public class AnalyzerImportServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String USER = "user";
private static final String PASSWORD = "password";
private String systemUserId;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String password = null;
String user = null;
AnalyzerReader reader = null;
boolean fileRead = false;
InputStream stream = null;
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
stream = item.openStream();
String name = null;
if( item.isFormField()){
if(PASSWORD.equals(item.getFieldName())){
password = streamToString(stream);
}else if( USER.equals(item.getFieldName())){
user = streamToString(stream);
}
}else{
name = item.getName();
reader = AnalyzerReaderFactory.getReaderFor(name);
if( reader != null){
fileRead = reader.readStream(new InputStreamReader( stream ));
}
}
stream.close();
}
} catch (Exception ex) {
throw new ServletException(ex);
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// LOG.warning(e.toString());
}
}
}
if( GenericValidator.isBlankOrNull(user) || GenericValidator.isBlankOrNull(password)){
response.getWriter().print("missing user");
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
return;
}
if( !userValid(user, password)){
response.getWriter().print("invalid user/password");
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
if(fileRead){
boolean successful = reader.insertAnalyzerData(systemUserId);
if( successful){
response.getWriter().print("success");
response.setStatus(HttpServletResponse.SC_OK);
return;
}else{
response.getWriter().print(reader.getError());
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}else{
response.getWriter().print(reader.getError());
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
}
private boolean userValid(String user, String password) {
Login login = new Login();
login.setLoginName(user);
login.setPassword(password);
LoginDAO loginDAO = new LoginDAOImpl();
login = loginDAO.getValidateLogin(login);
if( login == null ){
return false;
}else{
SystemUserDAO systemUserDAO = new SystemUserDAOImpl();
SystemUser systemUser = systemUserDAO.getDataForLoginUser(login.getLoginName());
systemUserId = systemUser.getId();
}
return true;
}
private String streamToString(InputStream stream) throws IOException {
StringBuilder builder = new StringBuilder();
int len;
byte[] buffer = new byte[1024];
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
builder.append(new String(buffer, 0, len));
}
return builder.toString();
}
}