Skip to main content
summaryrefslogblamecommitdiffstats
blob: a3021a21967e071b583a1c527fcfad45523903ee (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                                                            
                                                   







                                                                            

                                     
                                                    
                                                                         

                                                          

                                                     
                                                       
                                                     
                                                         
                                                            
                                        
 
                                              
                                                                
                                                   
 
                                                           
 
                                    
                                      
                                                
 

                            


                       
                                                                                                           
 
                                 
 
                                                             
   
                           
                                  
   
 



                                    
 




                                                   
















                                                        
                                                                           



                                          
                                                                       



                                                          
                                                                           

   
                                                                        
   
                                            
     

                                               
                                                         
                                             
 
                                                                                                            
                        
                                                               


     
           
                                               
   










                                                                        

       



                                                                                            



                                                                                 








                                       
   

           
                                                      

                                                                                        
                                                                            
   
 
/***************************************************************************
 * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *    Eike Stepper - initial API and implementation
 **************************************************************************/
package org.eclipse.emf.internal.cdo;

import org.eclipse.emf.cdo.CDOSessionPackageManager;
import org.eclipse.emf.cdo.internal.protocol.model.CDOPackageManagerImpl;
import org.eclipse.emf.cdo.protocol.id.CDOIDMetaRange;
import org.eclipse.emf.cdo.protocol.id.CDOIDObjectFactory;
import org.eclipse.emf.cdo.protocol.model.CDOClass;
import org.eclipse.emf.cdo.protocol.model.CDOFeature;
import org.eclipse.emf.cdo.protocol.model.CDOModelUtil;
import org.eclipse.emf.cdo.protocol.model.CDOPackage;
import org.eclipse.emf.cdo.protocol.model.CDOPackageInfo;
import org.eclipse.emf.cdo.protocol.util.TransportException;
import org.eclipse.emf.cdo.util.EMFUtil;

import org.eclipse.emf.internal.cdo.bundle.OM;
import org.eclipse.emf.internal.cdo.protocol.LoadPackageRequest;
import org.eclipse.emf.internal.cdo.util.ModelUtil;

import org.eclipse.net4j.signal.failover.IFailOverStrategy;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;

import java.util.Collection;

/**
 * @author Eike Stepper
 */
public class CDOSessionPackageManagerImpl extends CDOPackageManagerImpl implements CDOSessionPackageManager
{
  private CDOSessionImpl session;

  public CDOSessionPackageManagerImpl(CDOSessionImpl session)
  {
    this.session = session;
    ModelUtil.addModelInfos(this);
  }

  public CDOSessionImpl getSession()
  {
    return session;
  }

  public CDOIDObjectFactory getCDOIDObjectFactory()
  {
    return session;
  }

  public CDOPackage convert(EPackage ePackage)
  {
    return ModelUtil.getCDOPackage(ePackage, this);
  }

  public CDOClass convert(EClass eClass)
  {
    return ModelUtil.getCDOClass(eClass, this);
  }

  public CDOFeature convert(EStructuralFeature eFeature)
  {
    return ModelUtil.getCDOFeature(eFeature, this);
  }

  public EPackage convert(CDOPackage cdoPackage)
  {
    return ModelUtil.getEPackage(cdoPackage, session.getPackageRegistry());
  }

  public EClass convert(CDOClass cdoClass)
  {
    return ModelUtil.getEClass(cdoClass, session.getPackageRegistry());
  }

  public EStructuralFeature convert(CDOFeature cdoFeature)
  {
    return ModelUtil.getEFeature(cdoFeature, session.getPackageRegistry());
  }

  public void addPackageProxies(Collection<CDOPackageInfo> packageInfos)
  {
    for (CDOPackageInfo info : packageInfos)
    {
      String packageURI = info.getPackageURI();
      boolean dynamic = info.isDynamic();
      CDOIDMetaRange metaIDRange = info.getMetaIDRange();
      String parentURI = info.getParentURI();

      CDOPackage proxy = CDOModelUtil.createProxyPackage(this, packageURI, dynamic, metaIDRange, parentURI);
      addPackage(proxy);
      session.getPackageRegistry().putPackageDescriptor(proxy);
    }
  }

  @Override
  protected void resolve(CDOPackage cdoPackage)
  {
    if (!cdoPackage.isDynamic())
    {
      String uri = cdoPackage.getPackageURI();
      EPackage ePackage = session.getPackageRegistry().getEPackage(uri);
      if (ePackage != null)
      {
        ModelUtil.initializeCDOPackage(ePackage, cdoPackage);
        return;
      }
    }

    try
    {
      IFailOverStrategy failOverStrategy = session.getFailOverStrategy();
      LoadPackageRequest request = new LoadPackageRequest(session.getChannel(), cdoPackage);
      failOverStrategy.send(request);

      if (!cdoPackage.isDynamic())
      {
        OM.LOG.info("Dynamic package created for " + cdoPackage.getPackageURI());
      }
    }
    catch (RuntimeException ex)
    {
      throw ex;
    }
    catch (Exception ex)
    {
      throw new TransportException(ex);
    }
  }

  @Override
  protected String provideEcore(CDOPackage cdoPackage)
  {
    EPackage ePackage = ModelUtil.getEPackage(cdoPackage, session.getPackageRegistry());
    return EMFUtil.ePackageToString(ePackage, session.getPackageRegistry());
  }
}

Back to the top