public void validatePlan() throws IOException, BindException, InjectionException { final Tang t = Tang.Factory.getTang(); // TODO Use the AvroClassHierarchySerializer final ClassHierarchyProto.Node root; try (final InputStream chin = new FileInputStream(this.ch)) { root = ClassHierarchyProto.Node.parseFrom(chin); } final ClassHierarchy classHierarchy = new ProtocolBufferClassHierarchy(root); final ConfigurationBuilder cb = t.newConfigurationBuilder(classHierarchy); if (!inConfig.canRead()) { throw new IOException("Cannot read input config file: " + inConfig); } ConfigurationFile.addConfiguration(cb, inConfig); if (target != null) { final Injector i = t.newInjector(cb.build()); final InjectionPlan<?> ip = i.getInjectionPlan(target); if (!ip.isInjectable()) { throw new InjectionException(target + " is not injectable: " + ip.toCantInjectString()); } } ConfigurationFile.writeConfigurationFile(cb.build(), outConfig); // Injector i = t.newInjector(cb.build()); // InjectionPlan<?> ip = i.getInjectionPlan(target); // try (final OutputStream ipout = new FileOutputStream(injectionPlan)) { // new ProtocolBufferInjectionPlan().serialize(ip).writeTo(ipout); // } }
/** * Writes driver configuration to disk. * * @param jobFolder The folder in which the job is staged. * @param jobId id of the job to be submitted * @param clientRemoteId The client remote id * @return the configuration * @throws IOException */ public Configuration writeConfiguration( final File jobFolder, final String jobId, final String clientRemoteId) throws IOException { final File driverFolder = new File(jobFolder, PreparedDriverFolderLauncher.DRIVER_FOLDER_NAME); final Configuration driverConfiguration1 = driverConfigurationProvider.getDriverConfiguration( jobFolder.toURI(), clientRemoteId, jobId, Constants.DRIVER_CONFIGURATION_WITH_HTTP_AND_NAMESERVER); final ConfigurationBuilder configurationBuilder = Tang.Factory.getTang().newConfigurationBuilder(); for (final ConfigurationProvider configurationProvider : this.configurationProviders) { configurationBuilder.addConfiguration(configurationProvider.getConfiguration()); } final Configuration providedConfigurations = configurationBuilder.build(); final Configuration driverConfiguration = Configurations.merge( driverConfiguration1, Tang.Factory.getTang() .newConfigurationBuilder() .bindNamedParameter(JobSubmissionDirectory.class, driverFolder.toString()) .build(), providedConfigurations); final File driverConfigurationFile = new File(driverFolder, fileNames.getDriverConfigurationPath()); configurationSerializer.toFile(driverConfiguration, driverConfigurationFile); return driverConfiguration; }
@Override public Configuration build() { return builder.build(); }
/** * a convenient constructor for Reflections, where given {@code Object...} parameter types can be * either: * * <ul> * <li>{@link String} - would add urls using {@link ClasspathHelper#forPackage(String, * ClassLoader...)} ()} * <li>{@link Class} - would add urls using {@link ClasspathHelper#forClass(Class, * ClassLoader...)} * <li>{@link ClassLoader} - would use this classloaders in order to find urls in {@link * ClasspathHelper#forPackage(String, ClassLoader...)} and {@link * ClasspathHelper#forClass(Class, ClassLoader...)} * <li>{@link Scanner} - would use given scanner, overriding the default scanners * <li>{@link URL} - would add the given url for scanning * <li>{@link Object[]} - would use each element as above * </ul> * * use any parameter type in any order. this constructor uses instanceof on each param and * instantiate a {@link ConfigurationBuilder} appropriately. if you prefer the usual statically * typed constructor, don't use this, although it can be very useful. <br> * <br> * for example: * * <pre> * new Reflections("my.package", classLoader); * //or * new Reflections("my.package", someScanner, anotherScanner, classLoader); * //or * new Reflections(myUrl, myOtherUrl); * </pre> */ public Reflections(final Object... params) { this(ConfigurationBuilder.build(params)); }