Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2009 eXo Platform SAS.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.exoplatform.services.jcr.ext.backup.impl.fs;
 
 
 import java.io.File;
 import java.net.URL;
 import java.util.List;

Created by The eXo Platform SARL Author : Alex Reshetnyak alex.reshetnyak@exoplatform.com.ua Nov 20, 2007
 
 {
 
    protected static final Log LOG = ExoLogger.getLogger("exo.jcr.component.ext.IncrementalBackupJob");
 
 
    private FileCleaner fileCleaner;
 
    public IncrementalBackupJob()
    {
    }
 
    public void init(ManageableRepository repositoryString workspaceNameBackupConfig configCalendar timeStamp)
    {
       this. = repository;
       this. = workspaceName;
       this. = config;
       this. = timeStamp;
       this. =
          ((FileCleanerHolder)repository.getWorkspaceContainer(workspaceName).getComponent(FileCleanerHolder.class))
             .getFileCleaner();
 
       try
       {
           = createStorage();
       }
       catch (FileNotFoundException e)
       {
          .error("Incremental backup initialization failed "e);
          notifyError("Incremental backup initialization failed "e);
       }
       catch (IOException e)
       {
          .error("Incremental backup initialization failed "e);
          notifyError("Incremental backup initialization failed "e);
       }
    }
 
    public void stop()
    {
        = ;
       .info("Stop requested " + getStorageURL().getPath());
 
       notifyListeners();
    }
 
    @Override
    protected URL createStorage() throws FileNotFoundExceptionIOException
   {
      FileNameProducer fnp =
            PrivilegedFileHelper.getAbsolutePath(.getBackupDir()), super.false);
      File backupFileData = fnp.getNextFile();
       = new ObjectOutputStream(PrivilegedFileHelper.fileOutputStream(backupFileData));
      return new URL("file:" + backupFileData.getAbsoluteFile());
   }
   protected void save(ItemStateChangesLog persistentLogthrows IOException
   {
      TransactionChangesLog changesLog = (TransactionChangesLog)persistentLog;
      if (changesLog != null && !isSessionNull(changesLog))
      {
         long start = System.currentTimeMillis();
         writeExternal(changesLog);
         long total = System.currentTimeMillis() - start;
         if (.isDebugEnabled())
            .debug("Time : " + total + " ms" + "    Itemstates count : " + changesLog.getAllStates().size());
      }
   }
   public void writeExternal(ObjectOutputStream outTransactionChangesLog changesLogFileCleaner fileCleaner)
      throws IOException
   {
      PendingChangesLog pendingChangesLog = new PendingChangesLog(changesLogfileCleaner);
      synchronized (out)
      {
         if (pendingChangesLog.getConteinerType() == ..)
         {
            out.writeObject(changesLog);
            // Write FixupStream
            List<FixupStreamlistfs = pendingChangesLog.getFixupStreams();
            out.writeInt(listfs.size());
            for (int i = 0; i < listfs.size(); i++)
            {
               listfs.get(i).writeExternal(out);
            }
            // write stream data
            List<InputStreamlistInputList = pendingChangesLog.getInputStreams();
            // write file count
            out.writeInt(listInputList.size());
            for (int i = 0; i < listInputList.size(); i++)
            {
               File tempFile = getAsFile(listInputList.get(i));
               FileInputStream fis = PrivilegedFileHelper.fileInputStream(tempFile);
               // write file size
               out.writeLong(PrivilegedFileHelper.length(tempFile));
               // write file content
               writeContent(fisout);
               fis.close();
               fileCleaner.addFile(tempFile);
            }
         }
         else
         {
            out.writeObject(changesLog);
         }
         out.flush();
      }
   }
   private File getAsFile(InputStream isthrows IOException
   {
      byte[] buf = new byte[1024 * 20];
      File tempFile = PrivilegedFileHelper.createTempFile("" + System.currentTimeMillis(), "" + System.nanoTime());
      FileOutputStream fos = PrivilegedFileHelper.fileOutputStream(tempFile);
      int len;
      while ((len = is.read(buf)) > 0)
         fos.write(buf, 0, len);
      fos.flush();
      fos.close();
      return tempFile;
   }
   private void writeContent(InputStream isObjectOutputStream oosthrows IOException
   {
      byte[] buf = new byte[1024 * 8];
      int len;
      int size = 0;
      while ((len = is.read(buf)) > 0)
      {
         oos.write(buf, 0, len);
         size += len;
      }
      oos.flush();
   }
   private boolean isSessionNull(TransactionChangesLog changesLog)
   {
      boolean isSessionNull = false;
      ChangesLogIterator logIterator = changesLog.getLogIterator();
      while (logIterator.hasNextLog())
         if (logIterator.nextLog().getSessionId() == null)
         {
            isSessionNull = true;
            break;
         }
      return isSessionNull;
   }

   
   public boolean isTXAware()
   {
      return false;
   }
New to GrepCode? Check out our FAQ X