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;
 
 
 import java.io.File;
 import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
Created by The eXo Platform SARL .

Author(s):
Gennady Azarenkov
Version:
$Id: $
 
 
 public class BackupChainImpl implements BackupChain
 {
 
    private final BackupConfig config;
 
    private List<BackupJobjobs;
 
 
 
    private final BackupChainLog chainLog;
 
    private final String backupId;
 
    private int state;
 
 
    private Timer timer;
 
    private final Calendar timeStamp;
 
 
    public BackupChainImpl(BackupConfig configFile logDirectory,
             RepositoryService repositoryService,
             String fullBackupTypeString incrementalBackupTypeString backupIdFile rootDirCalendar startTime)
             throws BackupOperationException,
    {
       this. = config;
       this. = new ArrayList<BackupJob>();
       this. = startTime;
 
       this. =
                new BackupChainLog(logDirectoryconfigfullBackupTypeincrementalBackupTypebackupId,
                         repositoryService.getConfig(), rootDir);
 
       this. = backupId;
       
       ManageableRepository repository = null;
       try
       {
          repository = repositoryService.getRepository(config.getRepository());
      }
      catch (RepositoryConfigurationException e)
      {
         throw new BackupOperationException("Can not get repository \"" + config.getRepository() + "\""e);
      }
      catch (RepositoryException e)
      {
         throw new BackupOperationException("Can not get repository \"" + config.getRepository() + "\""e);
      }
      try
      {
         this. = (AbstractFullBackupJob)Class.forName(fullBackupType).newInstance();
      }
      catch (ClassNotFoundException e)
      {
         throw new BackupConfigurationException("FullBackupType error, " + ee);
      }
      catch (InstantiationException e)
      {
         throw new BackupConfigurationException("FullBackupType error, " + ee);
      }
      catch (IllegalAccessException e)
      {
         throw new BackupConfigurationException("FullBackupType error, " + ee);
      }
      .init(repositoryconfig.getWorkspace(), config);
      if (config.getBackupType() == .)
      {
         try
         {
            this. = (AbstractIncrementalBackupJob)Class.forName(incrementalBackupType).newInstance();
         }
         catch (ClassNotFoundException e)
         {
            throw new BackupConfigurationException("IncrementalBackupType error, " + ee);
         }
         catch (InstantiationException e)
         {
            throw new BackupConfigurationException("IncrementalBackupType error, " + ee);
         }
         catch (IllegalAccessException e)
         {
            throw new BackupConfigurationException("IncrementalBackupType error, " + ee);
         }
         .init(repositoryconfig.getWorkspace(), config);
          = new PeriodConroller(config.getIncrementalJobPeriod() * 1000); // sec --> ms
      }
      this. = ;
      this. =
         new Timer("BackupChain_" + getBackupConfig().getRepository() + "@" + getBackupConfig().getWorkspace()
            + "_PeriodTimer_" + new SimpleDateFormat("yyyyMMdd.HHmmss.SSS").format(new Date()), true);
   }

   
Add all listeners to a given job. Used in startBackup() which itself is synchronized.

Parameters:
job
   private void addJobListeners(BackupJob job)
   {
      for (BackupJobListener jl : )
         job.addListener(jl);
   }

   
Remove all listeners from a given job. Used in stoptBackup() which itself is synchronized.

Parameters:
job
   private void removeJobListeners(BackupJob job)
   {
      for (BackupJobListener jl : )
         job.removeListener(jl);
   }
   public void addListener(BackupJobListener listener)
   {
      if (listener != null)
      {
         synchronized ()
         {
            for (BackupJob job : )
               job.addListener(listener);
         }
         synchronized ()
         {
            .add(listener);
         }
      }
   }
   public void removeListener(BackupJobListener listener)
   {
      if (listener != null)
      {
         try
         {
            synchronized ()
            {
               for (BackupJob job : )
                  job.removeListener(listener);
            }
         }
         finally
         {
            // remove anyway
            synchronized ()
            {
               .remove(listener);
            }
         }
      }
   }
   public List<BackupJobgetBackupJobs()
   {
      return ;
   }
   public final synchronized void startBackup()
   {
      Thread fexecutor =
         new Thread(.getRepository() + "@" + .getWorkspace() + "-" + .getId());
      fexecutor.start();
       |= ;
      .add();
      if ( != null)
      {
         Thread iexecutor =
            new Thread(.getRepository() + "@" + .getWorkspace() + "-"
               + .getId());
         iexecutor.start();
          |= ;
         .add();
         if (.getIncrementalJobPeriod() > 0)
            .start();
      }
   }
   public final synchronized void stopBackup()
   {
      if (!.isFinilized())
      {
         .stop();
         .addJobEntry();
         removeJobListeners();
         if ( != null)
         {
            if (.getIncrementalJobPeriod() > 0)
               .stop();
            .stop();
            .addJobEntry();
            removeJobListeners();
         }
         this. |= ;
         .endLog();
      }
   }
   public void restartIncrementalBackup()
   {
   }
   {
      return ;
   }
   public int getFullBackupState()
   {
      return .getState();
   }
   
   public int getIncrementalBackupState()
   {
      if ( == null)
      {
         throw new IllegalStateException("The incremental bacup was not configured. Only full backup.");
      }
         
      return .getState();
   }
   public String getLogFilePath()
   {
      return .getLogFilePath();
   }
   private class PeriodConroller extends TimerTask
   {
      protected Log log = ExoLogger.getLogger("exo.jcr.component.ext.PeriodConroller");
      protected Long period;
      private boolean isFirst = false;
      public PeriodConroller(long period)
      {
         this. = period;
      }
      @Override
      public void run()
      {
         if (.getState() == .)
         {
            this.stop();
         }
         else if (!)
         {
             = true;
         }
         else
         {
            Thread starter = new Thread("IncrementalBackup Starter")
            {
               @Override
               public void run()
               {
                  restartIncrementalBackup();
                  if (.isDebugEnabled())
                     .debug("Restart incrementalBackup :" + new Date().toString());
               }
            };
            starter.start();
         }
      }
      public void start()
      {
         .schedule(thisnew Date(), );
      }
      public boolean stop()
      {
         .info("Stop period controller");
         return this.cancel();
      }
   }
   public int getState()
   {
      return ;
   }
   public boolean isFinished()
   {
      return (( & .) == . ? true : false);
   }
   public String getBackupId()
   {
      return ;
   }
   public Calendar getStartedTime()
   {
      return ;
   }
New to GrepCode? Check out our FAQ X