/** * 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; }
@SuppressWarnings({"rawtypes", "unchecked"}) private Configuration build(Object context) { Map<Integer, List<Rule>> priorityMap = new LinkedHashMap<Integer, List<Rule>>(); for (ConfigurationProvider provider : providers) { if (provider.handles(context)) { Configuration configuration = provider.getConfiguration(context); if (configuration != null) { List<Rule> rules = configuration.getRules(); if (rules != null) { for (Rule rule : rules) { if (rule != null) { if (rule instanceof RelocatableRule && ((RelocatableRule) rule).isRelocated()) addListValue(priorityMap, ((RelocatableRule) rule).priority(), rule); else addListValue(priorityMap, provider.priority(), rule); } else { log.debug( "Ignoring null Rule from ConfigurationProvider [" + provider.getClass().getName() + "]"); } } } else { log.debug( "Ignoring null List<Rule> from ConfigurationProvider [" + provider.getClass().getName() + "]"); } } else { log.debug( "Ignoring null Configuration from ConfigurationProvider [" + provider.getClass().getName() + "]."); } } } ConfigurationBuilder result = ConfigurationBuilder.begin(); ArrayList<Integer> sortedKeys = new ArrayList<Integer>(priorityMap.keySet()); Collections.sort(sortedKeys); for (Integer integer : sortedKeys) { List<Rule> list = priorityMap.get(integer); for (final Rule rule : list) { result.addRule(rule); if (rule instanceof ParameterizedRule) { ParameterizedCallback callback = new ParameterizedCallback() { @Override public void call(Parameterized parameterized) { Set<String> names = parameterized.getRequiredParameterNames(); ParameterStore store = ((ParameterizedRule) rule).getParameterStore(); if (names != null) for (String name : names) { Parameter<?> parameter = store.get(name, new DefaultParameter(name)); if (parameter instanceof ConfigurableParameter<?>) ((ConfigurableParameter<?>) parameter).bindsTo(Evaluation.property(name)); } parameterized.setParameterStore(store); } }; Visitor<Condition> conditionVisitor = new ParameterizedConditionVisitor(callback); new ConditionVisit(rule).accept(conditionVisitor); Visitor<Operation> operationVisitor = new ParameterizedOperationVisitor(callback); new OperationVisit(rule).accept(operationVisitor); } } } return result; }