1 package net.sf.cantina.datasource; 2 3 import net.sf.cantina.webgui.StrutsAction; 4 import net.sf.cantina.system.ChangeDocumentAction; 5 import net.sf.cantina.DataSource; 6 import net.sf.cantina.SearchEngine; 7 import org.apache.log4j.Logger; 8 import org.apache.struts.action.*; 9 import org.apache.struts.validator.DynaValidatorActionForm; 10 import org.apache.struts.upload.FormFile; 11 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import java.io.InputStream; 15 import java.io.OutputStream; 16 import java.io.FileOutputStream; 17 18 /*** 19 * @author Stephane JAIS 20 */ 21 public class ImportBackupAction 22 extends StrutsAction 23 { 24 private static final Logger logger = Logger.getLogger(ChangeDocumentAction.class); 25 26 /*** 27 * This action is synchronized, it will perform poorly if accessed simultaneously by many users. 28 */ 29 30 public synchronized ActionForward execute(ActionMapping mapping, 31 ActionForm form, 32 HttpServletRequest request, 33 HttpServletResponse response) 34 throws Exception 35 { 36 String workPath = getServlet().getServletContext().getRealPath("/WEB-INF/tmp"); 37 String hypersonicPath = workPath+"/import"; 38 String scriptPath = hypersonicPath+".script"; 39 ActionMessages messages = new ActionMessages(); 40 ActionErrors errors = new ActionErrors(); 41 DynaValidatorActionForm dynaform = (DynaValidatorActionForm)form; 42 try 43 { 44 InputStream is = ((FormFile)dynaform.get("data")).getInputStream(); 45 OutputStream os = new FileOutputStream(scriptPath); 46 byte[] buf = new byte[1024]; 47 int i=0; 48 while((i=is.read(buf)) != -1) 49 { 50 os.write(buf,0,i); 51 } 52 is.close(); 53 os.close(); 54 DataSource hypersonicBackup = new HypersonicDataSource(hypersonicPath,false); 55 BackupUtils.importDataSource(hypersonicBackup,DataSource.getInstance()); 56 SearchEngine.getInstance().indexAllDocuments(hypersonicBackup); 57 hypersonicBackup.release(); 58 } catch (Exception e) 59 { 60 errors.add("data",new ActionError("data.file.invalid")); 61 logger.error("Could not import backup",e); 62 saveErrors(request,errors); 63 return mapping.findForward(MAPPING_INPUT); 64 } 65 messages.add("data", new ActionMessage("data.imported.successfully")); 66 saveMessages(request,messages); 67 return mapping.findForward(MAPPING_SUCCESS); 68 } 69 }