package org.pentaho.platform.plugin.services.exporter; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.core.plugins.RepositoryPluginType; import org.pentaho.di.repository.RepositoriesMeta; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.RepositoryMeta; import org.pentaho.platform.engine.core.system.PentahoSessionHolder; import org.pentaho.platform.engine.core.system.PentahoSystem; import java.io.ByteArrayInputStream; public class MetaStoreExportUtil { private static final String SINGLE_DI_SERVER_INSTANCE = "singleDiServerInstance"; //$NON-NLS-1$ public static Repository connectToRepository( String repositoryName ) throws KettleException { RepositoriesMeta repositoriesMeta = new RepositoriesMeta(); boolean singleDiServerInstance = "true".equals( PentahoSystem.getSystemSetting( SINGLE_DI_SERVER_INSTANCE, "true" ) ); //$NON-NLS-1$ //$NON-NLS-2$ try { if ( singleDiServerInstance ) { // only load a default enterprise repository. If this option is set, then you cannot load // transformations or jobs from anywhere but the local server. String repositoriesXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><repositories>" //$NON-NLS-1$ + "<repository><id>PentahoEnterpriseRepository</id>" //$NON-NLS-1$ + "<name>" + SINGLE_DI_SERVER_INSTANCE + "</name>" //$NON-NLS-1$ //$NON-NLS-2$ + "<description>" + SINGLE_DI_SERVER_INSTANCE + "</description>" //$NON-NLS-1$ //$NON-NLS-2$ + "<repository_location_url>" + PentahoSystem.getApplicationContext().getFullyQualifiedServerURL() + "</repository_location_url>" //$NON-NLS-1$ //$NON-NLS-2$ + "<version_comment_mandatory>N</version_comment_mandatory>" //$NON-NLS-1$ + "</repository>" //$NON-NLS-1$ + "</repositories>"; //$NON-NLS-1$ ByteArrayInputStream sbis = new ByteArrayInputStream( repositoriesXml.getBytes( "UTF8" ) ); repositoriesMeta.readDataFromInputStream( sbis ); } else { // TODO: add support for specified repositories.xml files... repositoriesMeta.readData(); // Read from the default $HOME/.kettle/repositories.xml file. } } catch ( Exception e ) { throw new KettleException( "Meta repository not populated", e ); //$NON-NLS-1$ } // Find the specified repository. RepositoryMeta repositoryMeta = null; try { if ( singleDiServerInstance ) { repositoryMeta = repositoriesMeta.findRepository( SINGLE_DI_SERVER_INSTANCE ); } else { repositoryMeta = repositoriesMeta.findRepository( repositoryName ); } } catch ( Exception e ) { throw new KettleException( "Repository not found", e ); //$NON-NLS-1$ } if ( repositoryMeta == null ) { throw new KettleException( "RepositoryMeta is null" ); //$NON-NLS-1$ } Repository repository = null; try { repository = PluginRegistry.getInstance().loadClass( RepositoryPluginType.class, repositoryMeta.getId(), Repository.class ); repository.init( repositoryMeta ); } catch ( Exception e ) { throw new KettleException( "Could not get repository instance", e ); //$NON-NLS-1$ } // Two scenarios here: internal to server or external to server. If internal, you are already authenticated. If // external, you must provide a username and additionally specify that the IP address of the machine running this // code is trusted. repository.connect( PentahoSessionHolder.getSession().getName(), "password" ); return repository; } }