IPlatformImporter importer = PentahoSystem.get( IPlatformImporter.class );
cachedImports = new HashMap<String, RepositoryFileImportBundle.Builder>();
//Process Manifest Settings
ExportManifest manifest = getImportSession().getManifest();
String manifestVersion = null;
if ( manifest != null ) {
manifestVersion = manifest.getManifestInformation().getManifestVersion();
}
// Process Metadata
if ( manifest != null ) {
List<ExportManifestMetadata> metadataList = manifest.getMetadataList();
for ( ExportManifestMetadata exportManifestMetadata : metadataList ) {
String domainId = exportManifestMetadata.getDomainId();
boolean overWriteInRepository = true;
RepositoryFileImportBundle.Builder bundleBuilder =
new RepositoryFileImportBundle.Builder().charSet( "UTF-8" ).hidden( false ).overwriteFile(
overWriteInRepository ).mime( "text/xmi+xml" ).withParam( "domain-id", domainId );
cachedImports.put( exportManifestMetadata.getFile(), bundleBuilder );
}
// Process Mondrian
List<ExportManifestMondrian> mondrianList = manifest.getMondrianList();
for ( ExportManifestMondrian exportManifestMondrian : mondrianList ) {
String catName = exportManifestMondrian.getCatalogName();
Parameters parametersMap = exportManifestMondrian.getParameters();
StringBuilder parametersStr = new StringBuilder();
for ( String s : parametersMap.keySet() ) {
parametersStr.append( s ).append( "=" ).append( parametersMap.get( s ) ).append( sep );
}
RepositoryFileImportBundle.Builder bundleBuilder =
new RepositoryFileImportBundle.Builder().charSet( "UTF_8" ).hidden( false ).name( catName ).overwriteFile(
true ).mime( "application/vnd.pentaho.mondrian+xml" )
.withParam( "parameters", parametersStr.toString() ).withParam( "domain-id", catName ); // TODO: this is
// definitely
// named wrong
// at the very
// least.
// pass as param if not in parameters string
String xmlaEnabled = "" + exportManifestMondrian.isXmlaEnabled();
bundleBuilder.withParam( "EnableXmla", xmlaEnabled );
cachedImports.put( exportManifestMondrian.getFile(), bundleBuilder );
}
}
for ( IRepositoryFileBundle file : importSource.getFiles() ) {
String fileName = file.getFile().getName();
String actualFilePath = file.getPath();
if ( manifestVersion != null ) {
fileName = ExportFileNameEncoder.decodeZipFileName( fileName );
actualFilePath = ExportFileNameEncoder.decodeZipFileName( actualFilePath );
}
String repositoryFilePath =
RepositoryFilenameUtils.concat( PentahoPlatformImporter.computeBundlePath( actualFilePath ), fileName );
if ( this.cachedImports.containsKey( repositoryFilePath ) ) {
byte[] bytes = IOUtils.toByteArray( file.getInputStream() );
RepositoryFileImportBundle.Builder builder = cachedImports.get( repositoryFilePath );
builder.input( new ByteArrayInputStream( bytes ) );
importer.importFile( build( builder ) );
continue;
}
RepositoryFileImportBundle.Builder bundleBuilder = new RepositoryFileImportBundle.Builder();
InputStream bundleInputStream = null;
String decodedFilePath = file.getPath();
RepositoryFile decodedFile = file.getFile();
if ( manifestVersion != null ) {
decodedFile = new RepositoryFile.Builder( decodedFile ).path( decodedFilePath ).name( fileName ).title( fileName ).build();
decodedFilePath = ExportFileNameEncoder.decodeZipFileName( file.getPath() );
}
if ( file.getFile().isFolder() ) {
bundleBuilder.mime( "text/directory" );
bundleBuilder.file( decodedFile );
fileName = repositoryFilePath;
repositoryFilePath = importBundle.getPath();
} else {
byte[] bytes = IOUtils.toByteArray( file.getInputStream() );
bundleInputStream = new ByteArrayInputStream( bytes );
// If is locale file store it for later processing.
if ( localeFilesProcessor.isLocaleFile( file, importBundle.getPath(), bytes ) ) {
log.trace( "Skipping [" + repositoryFilePath + "], it is a locale property file" );
continue;
}
bundleBuilder.input( bundleInputStream );
bundleBuilder.mime( solutionHelper.getMime( fileName ) );
String filePath =
( decodedFilePath.equals( "/" ) || decodedFilePath.equals( "\\" ) ) ? "" : decodedFilePath;
repositoryFilePath = RepositoryFilenameUtils.concat( importBundle.getPath(), filePath );
}
bundleBuilder.name( fileName );
bundleBuilder.path( repositoryFilePath );
String sourcePath;
if ( decodedFilePath.startsWith( "/" ) ) {
sourcePath = RepositoryFilenameUtils.concat( decodedFilePath.substring( 1 ), fileName );
} else {
if ( file.getFile().isFolder() ) {
sourcePath = fileName;
} else {
sourcePath = RepositoryFilenameUtils.concat( decodedFilePath, fileName );
}
}
//This clause was added for processing ivb files so that it would not try process acls on folders that the user
//may not have rights to such as /home or /public
if ( manifest != null && manifest.getExportManifestEntity( sourcePath ) == null && file.getFile().isFolder() ) {
continue;
}
getImportSession().setCurrentManifestKey( sourcePath );
bundleBuilder.charSet( bundle.getCharset() );
bundleBuilder.overwriteFile( bundle.overwriteInRepository() );
bundleBuilder.hidden( isFileHidden( bundle, sourcePath ) );
bundleBuilder.applyAclSettings( bundle.isApplyAclSettings() );
bundleBuilder.retainOwnership( bundle.isRetainOwnership() );
bundleBuilder.overwriteAclSettings( bundle.isOverwriteAclSettings() );
bundleBuilder.acl( getImportSession().processAclForFile( sourcePath ) );
IPlatformImportBundle platformImportBundle = build( bundleBuilder );
importer.importFile( platformImportBundle );
if ( bundleInputStream != null ) {
bundleInputStream.close();
bundleInputStream = null;
}
}
if ( manifest != null ) {
List<JobScheduleRequest> scheduleList = manifest.getScheduleList();
if ( scheduleList != null ) {
SchedulerResource schedulerResource = new SchedulerResource();
for ( JobScheduleRequest jobScheduleRequest : scheduleList ) {
try {
Response response = createSchedulerJob( schedulerResource, jobScheduleRequest );
if ( response.getStatus() == Response.Status.OK.getStatusCode() ) {
if ( response.getEntity() != null ) {
// get the schedule job id from the response and add it to the import session
ImportSession.getSession().addImportedScheduleJobId( response.getEntity().toString() );
}
}
} catch ( Exception e ) {
throw new PlatformImportException( Messages.getInstance()
.getString( "SolutionImportHandler.ERROR_0001_ERROR_CREATING_SCHEDULE", e.getMessage() ) );
}
}
}
// Add Pentaho Connections
List<org.pentaho.database.model.DatabaseConnection> datasourceList = manifest.getDatasourceList();
if ( datasourceList != null ) {
IDatasourceMgmtService datasourceMgmtSvc = PentahoSystem.get( IDatasourceMgmtService.class );
for ( org.pentaho.database.model.DatabaseConnection databaseConnection : datasourceList ) {
try {
IDatabaseConnection existingDBConnection =