Package org.exoplatform.services.jcr.impl.backup.rdbms

Source Code of org.exoplatform.services.jcr.impl.backup.rdbms.TableTransformationRuleGenerator

/*
* 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.impl.backup.rdbms;

import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.dataflow.serialization.ObjectReader;
import org.exoplatform.services.jcr.impl.dataflow.serialization.ObjectReaderImpl;
import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCDataContainerConfig;
import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCDataContainerConfig.DatabaseStructureType;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;

import java.io.File;
import java.io.IOException;
import java.sql.Types;
import java.util.HashSet;
import java.util.Set;

/**
* Keeps information required by table transformation process during
* backup/respore. Provides methods to aquire
* transformation rules for ITEM, REFERENCE and VALUE tables.
*
* @author <a href="mailto:dmitry.kuleshov@exoplatform.com">Dmitry Kuleshov</a>
* @version $Id: tableTransformationRule.java 34360 2009-07-22 23:58:59Z dkuleshov $
*/
public class TableTransformationRuleGenerator
{
   protected static final Log LOG = ExoLogger.getLogger("exo.jcr.component.core.TableTransformationRuleGenerator");

   private final DatabaseStructureType srcDbType;

   private final DatabaseStructureType dstDbType;

   private final String srcContainerName;

   private final String dstContainerName;

   private final String srcItemTableName;

   private final String srcValueTableName;

   private final String srcRefTableName;

   public TableTransformationRuleGenerator(JDBCDataContainerConfig containerConfig, File storageDir) throws IOException

   {
      ObjectReader backupInfoReader = null;
      try
      {
         this.dstDbType = containerConfig.dbStructureType;
         this.dstContainerName = containerConfig.containerName;

         backupInfoReader =
            new ObjectReaderImpl(PrivilegedFileHelper.fileInputStream(new File(storageDir,
               "JDBCWorkspaceDataContainer.info")));;

         this.srcContainerName = backupInfoReader.readString();
         this.srcDbType = DatabaseStructureType.valueOf(backupInfoReader.readString());
         this.srcItemTableName = backupInfoReader.readString();
         this.srcValueTableName = backupInfoReader.readString();
         this.srcRefTableName = backupInfoReader.readString();
      }
      finally
      {
         if (backupInfoReader != null)
         {
            try
            {
               backupInfoReader.close();
            }
            catch (IOException e)
            {
               LOG.error("Can't close object reader", e);
            }
         }
      }
   }

   private TableTransformationRule getBasicTransformationRule()
   {
      TableTransformationRule basicTableTransformationRule = new TableTransformationRule();
      basicTableTransformationRule.setSrcContainerName(srcContainerName);
      basicTableTransformationRule.setSrcMultiDb(srcDbType.isMultiDatabase());
      basicTableTransformationRule.setDstContainerName(dstContainerName);
      basicTableTransformationRule.setDstMultiDb(dstDbType.isMultiDatabase());

      return basicTableTransformationRule;
   }

   public TableTransformationRule getValueTableTransformationRule()
   {
      TableTransformationRule valueTableTransformationRule = getBasicTransformationRule();
      valueTableTransformationRule.setSrcTableName(srcValueTableName);

      // auto increment ID column
      valueTableTransformationRule.setSkipColumnIndex(0);

      if (srcDbType == DatabaseStructureType.SINGLE || dstDbType == DatabaseStructureType.SINGLE)
      {
         // PROPERTY_ID column index
         Set<Integer> convertColumnIndex = new HashSet<Integer>();
         convertColumnIndex.add(3);
         valueTableTransformationRule.setConvertColumnIndex(convertColumnIndex);
      }

      return valueTableTransformationRule;
   }

   public TableTransformationRule getRefTableTransformationRule()
   {
      TableTransformationRule refTableTransformationRule = getBasicTransformationRule();
      refTableTransformationRule.setSrcTableName(srcRefTableName);

      if (srcDbType == DatabaseStructureType.SINGLE || dstDbType == DatabaseStructureType.SINGLE)
      {
         // NODE_ID and PROPERTY_ID column indexes
         Set<Integer> convertColumnIndex = new HashSet<Integer>();
         convertColumnIndex.add(0);
         convertColumnIndex.add(1);
         refTableTransformationRule.setConvertColumnIndex(convertColumnIndex);
      }

      return refTableTransformationRule;
   }

   public TableTransformationRule getItemTableTransformationRule()
   {
      TableTransformationRule itemTableTransformationRule = getBasicTransformationRule();
      itemTableTransformationRule.setSrcTableName(srcItemTableName);

      if (dstDbType == DatabaseStructureType.MULTI || dstDbType == DatabaseStructureType.ISOLATED)
      {
         if (srcDbType == DatabaseStructureType.SINGLE)
         {
            // CONTAINER_NAME column index
            itemTableTransformationRule.setSkipColumnIndex(4);

            // ID and PARENT_ID column indexes
            Set<Integer> convertColumnIndex = new HashSet<Integer>();
            convertColumnIndex.add(0);
            convertColumnIndex.add(1);
            itemTableTransformationRule.setConvertColumnIndex(convertColumnIndex);
         }
      }
      // single-db
      else
      {
         if (srcDbType == DatabaseStructureType.MULTI || srcDbType == DatabaseStructureType.ISOLATED)
         {
            // CONTAINER_NAME column index
            itemTableTransformationRule.setNewColumnIndex(4);
            itemTableTransformationRule.setNewColumnName("CONTAINER_NAME");
            itemTableTransformationRule.setNewColumnType(Types.VARCHAR);

            // ID and PARENT_ID column indexes
            Set<Integer> convertColumnIndex = new HashSet<Integer>();
            convertColumnIndex.add(0);
            convertColumnIndex.add(1);
            itemTableTransformationRule.setConvertColumnIndex(convertColumnIndex);
         }
         else
         {
            // ID and PARENT_ID and CONTAINER_NAME column indexes
            Set<Integer> convertColumnIndex = new HashSet<Integer>();
            convertColumnIndex.add(0);
            convertColumnIndex.add(1);
            convertColumnIndex.add(4);
            itemTableTransformationRule.setConvertColumnIndex(convertColumnIndex);
         }
      }

      return itemTableTransformationRule;
   }
}
TOP

Related Classes of org.exoplatform.services.jcr.impl.backup.rdbms.TableTransformationRuleGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.