/** * Copyright 2011-2015 John Ericksen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.androidtransfuse.processor; import org.androidtransfuse.config.TransfuseAndroidModule; import org.androidtransfuse.model.manifest.Application; import org.androidtransfuse.model.manifest.Manifest; import org.androidtransfuse.transaction.AbstractCompletionTransactionWorker; import org.androidtransfuse.util.Logger; import org.androidtransfuse.util.ManifestSerializer; import javax.inject.Inject; import javax.inject.Named; import java.io.File; import java.util.Collections; /** * @author John Ericksen */ public class GenerateModuleProcessor extends AbstractCompletionTransactionWorker<Void, Void> { public static final String MANIFEST_PROCESSING_OPTION = "transfuseManifestProcessing"; private final ManifestManager manifestManager; private final Merger merger; private final Manifest originalManifest; private final Logger log; private final File manifestFile; private ManifestSerializer manifestParser; private final String manifestProcessingOption; @Inject public GenerateModuleProcessor(ManifestManager manifestManager, Merger merger, @Named(TransfuseAndroidModule.ORIGINAL_MANIFEST) Manifest originalManifest, Logger log, @Named(TransfuseAndroidModule.MANIFEST_FILE) File manifestFile, ManifestSerializer manifestParser, @Named(MANIFEST_PROCESSING_OPTION) String manifestProcessingOption) { this.manifestManager = manifestManager; this.merger = merger; this.originalManifest = originalManifest; this.log = log; this.manifestFile = manifestFile; this.manifestParser = manifestParser; this.manifestProcessingOption = manifestProcessingOption; } @Override public Void innerRun(Void value) { //assembling generated code Manifest updatedManifest = buildManifest(); if(!"off".equals(manifestProcessingOption)){ if("log".equals(manifestProcessingOption)){ log.info("Manifest generation piped to log"); manifestParser.writeManifest(updatedManifest, System.out); } else{ //write manifest back out, updating from processed classes manifestParser.writeManifest(updatedManifest, manifestFile); } } else{ log.info("Manifest generation disabled"); } return null; } private Manifest buildManifest() { try { Manifest manifest = manifestManager.getManifest(); Manifest mergedManifest = merger.merge(Manifest.class, originalManifest, manifest); for (Application application : mergedManifest.getApplications()) { Collections.sort(application.getActivities()); } mergedManifest.updatePackages(); return mergedManifest; } catch (MergerException e) { log.error("InstantiationException while merging manifest", e); return originalManifest; } } }