Coverage Report - org.kuali.student.common.util.spring.MergingPersistenceUnitManager
 
Classes in this File Line Coverage Branch Coverage Complexity
MergingPersistenceUnitManager
0%
0/20
0%
0/4
2.333
 
 1  
 package org.kuali.student.common.util.spring;
 2  
 
 3  
 import java.lang.reflect.Field;
 4  
 import java.util.Map;
 5  
 
 6  
 import javax.persistence.spi.PersistenceUnitTransactionType;
 7  
 
 8  
 import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager;
 9  
 import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;
 10  
 
 11  0
 public class MergingPersistenceUnitManager extends
 12  
                 DefaultPersistenceUnitManager {
 13  
 
 14  
         private String mergedPersistenceUnitName;
 15  0
         private PersistenceUnitTransactionType transactionTypeOverride = PersistenceUnitTransactionType.RESOURCE_LOCAL;
 16  
         
 17  
         public void setMergedPersistenceUnitName(String mergedPersistenceUnitName) {
 18  0
                 this.mergedPersistenceUnitName = mergedPersistenceUnitName;
 19  0
         }
 20  
 
 21  
         @Override
 22  
         protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
 23  
                 try {
 24  0
                         Field persistenceUnitInfosField = DefaultPersistenceUnitManager.class.getDeclaredField("persistenceUnitInfos");
 25  0
                         persistenceUnitInfosField.setAccessible(true);
 26  0
                         Map<String, MutablePersistenceUnitInfo> persistenceUnitInfos = (Map<String, MutablePersistenceUnitInfo>) persistenceUnitInfosField.get(this);
 27  
 
 28  0
                         if(persistenceUnitInfos.isEmpty()){
 29  0
                                 pui.setPersistenceUnitName(mergedPersistenceUnitName);
 30  0
                                 pui.setTransactionType(transactionTypeOverride);
 31  
                         }else{
 32  0
                                 MutablePersistenceUnitInfo currentlyMergedPui = persistenceUnitInfos.get(mergedPersistenceUnitName);
 33  0
                                 for(String className:pui.getManagedClassNames()){
 34  0
                                         currentlyMergedPui.getManagedClassNames().add(className);
 35  
                                 }
 36  
                         }
 37  
                         
 38  0
                 } catch (Exception e) {
 39  0
                         throw new RuntimeException("Error while merging persistence units.",e);
 40  0
                 }
 41  
                 
 42  0
                 super.postProcessPersistenceUnitInfo(pui);
 43  0
         }
 44  
 
 45  
         public void setTransactionTypeOverride(PersistenceUnitTransactionType transactionTypeOverride) {
 46  0
                 this.transactionTypeOverride = transactionTypeOverride;
 47  0
         }
 48  
 
 49  
 
 50  
 }