* @throws IOException If fails compressing the all the Bundle contents into the final Bundle file
*/
@SuppressWarnings ("unchecked")
private Map<String, Object> generateBundle ( String bundleId, PushPublisherConfig.Operation operation ) throws DotPublisherException, DotDataException, DotPublishingException, IllegalAccessException, InstantiationException, DotBundleException, IOException {
PushPublisherConfig pconf = new PushPublisherConfig();
PublisherAPI pubAPI = PublisherAPI.getInstance();
List<PublishQueueElement> tempBundleContents = pubAPI.getQueueElementsByBundleId( bundleId );
List<PublishQueueElement> assetsToPublish = new ArrayList<PublishQueueElement>(); // all assets but contentlets
for ( PublishQueueElement c : tempBundleContents ) {
if ( !c.getType().equals( "contentlet" ) ) {
assetsToPublish.add( c );
}
}
pconf.setDownloading( true );
pconf.setOperation(operation);
// all types of assets in the queue but contentlets are passed here, which are passed through lucene queries
pconf.setAssets( assetsToPublish );
//Queries creation
pconf.setLuceneQueries( PublisherUtil.prepareQueries( tempBundleContents ) );
pconf.setId( bundleId );
pconf.setUser( APILocator.getUserAPI().getSystemUser() );
//BUNDLERS
List<Class<IBundler>> bundlers = new ArrayList<Class<IBundler>>();
List<IBundler> confBundlers = new ArrayList<IBundler>();
Publisher publisher = new PushPublisher();
publisher.init( pconf );
//Add the bundles for this publisher
for ( Class clazz : publisher.getBundlers() ) {
if ( !bundlers.contains( clazz ) ) {
bundlers.add( clazz );
}
}
//Create a new bundle id for this generated bundle
String newBundleId = UUID.randomUUID().toString();
pconf.setId( newBundleId );
File bundleRoot = BundlerUtil.getBundleRoot( pconf );
// Run bundlers
BundlerUtil.writeBundleXML( pconf );
for ( Class<IBundler> c : bundlers ) {
IBundler bundler = c.newInstance();
confBundlers.add( bundler );
bundler.setConfig( pconf );
BundlerStatus bundlerStatus = new BundlerStatus( bundler.getClass().getName() );
//Generate the bundler
bundler.generate( bundleRoot, bundlerStatus );
}
pconf.setBundlers( confBundlers );
//Compressing bundle
ArrayList<File> list = new ArrayList<File>();
list.add( bundleRoot );
File bundle = new File( bundleRoot + File.separator + ".." + File.separator + pconf.getId() + ".tar.gz" );
Map<String, Object> bundleData = new HashMap<String, Object>();
bundleData.put( "id", newBundleId );
bundleData.put( "file", PushUtils.compressFiles( list, bundle, bundleRoot.getAbsolutePath() ) );
return bundleData;