/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.karaf.tools.utils; import org.apache.karaf.tools.utils.model.KarafPropertyEdit; import org.apache.karaf.tools.utils.model.KarafPropertyEdits; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Apply a set of edits, reading files from a stock etc dir. */ public class KarafPropertiesEditor { private File inputEtc; private File outputEtc; private KarafPropertyEdits edits; public KarafPropertiesEditor setInputEtc(File inputEtc) { this.inputEtc = inputEtc; return this; } public KarafPropertiesEditor setOutputEtc(File outputEtc) { this.outputEtc = outputEtc; return this; } public KarafPropertiesEditor setEdits(KarafPropertyEdits edits) { this.edits = edits; return this; } public void run() throws IOException { Map<String, List<KarafPropertyEdit>> editsByFile = new HashMap<>(); // organize edits by file. for (KarafPropertyEdit edit : edits.getEdits()) { List<KarafPropertyEdit> thisFileEdits = editsByFile.get(edit.getFile()); if (thisFileEdits == null) { thisFileEdits = new ArrayList<>(); editsByFile.put(edit.getFile(), thisFileEdits); } thisFileEdits.add(edit); } for (Map.Entry<String, List<KarafPropertyEdit>> fileOps : editsByFile.entrySet()) { File input = new File(inputEtc, fileOps.getKey()); KarafPropertiesFile propsFile = new KarafPropertiesFile(input); propsFile.load(); List<KarafPropertyEdit> edits = fileOps.getValue(); for (KarafPropertyEdit edit : edits) { propsFile.apply(edit); } File outputFile = new File(outputEtc, fileOps.getKey()); propsFile.store(outputFile); } } }