SyncArchiveActionBean.java

package sk.iway.iwcm.stripes;

import java.text.SimpleDateFormat;
import java.util.Date;

import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.FileBean;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.Resolution;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.io.IwcmFile;
import sk.iway.iwcm.io.IwcmFsDB;
import sk.iway.iwcm.system.zip.ZipEntry;
import sk.iway.iwcm.system.zip.ZipInputStream;
import sk.iway.iwcm.users.UsersDB;

/**
 *  SyncArchiveActionBean.java
 *
 *@Title        webjet4
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2009
 *@author       $Author: jeeff $
 *@version      $Revision: 1.2 $
 *@created      Date: 20.1.2009 11:50:27
 *@modified     $Date: 2009/05/04 09:26:01 $
 */
public class SyncArchiveActionBean implements ActionBean
{
	private ActionBeanContext context;
	private FileBean archive;

	public FileBean getArchive()
	{
		return archive;
	}

	public void setArchive(FileBean archive)
	{
		this.archive = archive;
	}
	@Override
	public ActionBeanContext getContext()
	{
		return context;
	}
	@Override
	public void setContext(ActionBeanContext cntxt)
	{
		context=cntxt;

	}
	@DefaultHandler
	public Resolution sync()
	{
		Identity user = UsersDB.getCurrentUser(getContext().getRequest());
		if (user == null || user.isAdmin()==false) return(new ForwardResolution("/components/maybeError.jsp"));

		try
		{
			String virtualDir="/WEB-INF/tmp/" + new SimpleDateFormat("dd.MM.yyyy-HHmm").format(new Date());
			/*if (Constants.getBoolean("multiDomainEnabled"))
			{
				virtualDir="/files/"+MultiDomainFilter.getDomainAlias(DocDB.getDomain(context.getRequest()))+"/protected/backup/"+ new SimpleDateFormat("dd.MM.yyyy-hhmm").format(new Date());
			}*/
			String backupDir = Tools.getRealPath(virtualDir);
			IwcmFile backupDirFile = new IwcmFile(backupDir);
			if (backupDirFile.exists()==false)
			{
				backupDirFile.mkdirs();
			}

			ZipInputStream zis = new ZipInputStream(archive.getInputStream());
			ZipEntry entry;
			IwcmFile outFile;

			while ((entry = zis.getNextEntry()) != null)
			{
				if (entry.getName().endsWith("/")) //je to adresar
				{
					outFile = new IwcmFile(backupDir + java.io.File.separatorChar + entry.getName());
					outFile.mkdirs();
				}
				else
				{
					if (entry.getName().contains("/"))
					{
						int index = entry.getName().lastIndexOf('/') + 1;
						String realDir = backupDir + java.io.File.separatorChar + entry.getName().substring(0, index).replace('/', java.io.File.separatorChar);
						String realPath = realDir + entry.getName().substring(index);
						IwcmFile outDir = new IwcmFile(realDir);
						outDir.mkdirs();
						outFile = new IwcmFile(realPath);
					}
					else
					{
						outFile = new IwcmFile(backupDir + java.io.File.separatorChar + entry.getName());
					}
					IwcmFsDB.writeFileToDisk(zis, new java.io.File(outFile.getPath()), false);
				}
				//new IwcmFile(outFile.getPath()).setLastModified(entry.getTime());//nastavime lastModified podla suboru zo zip archivu
			}
			zis.close();
			context.getRequest().setAttribute("syncDir",virtualDir);

			context.getRequest().setAttribute("compareBy", Tools.getParameter(context.getRequest(), "compareBy"));
		}
		catch (Exception ex)
		{
			sk.iway.iwcm.Logger.error(ex);
		}
		return new ForwardResolution("/components/maybeError.jsp");
	}
}