/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.uberfire.backend.server.authz; import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import java.util.Comparator; import java.util.Properties; import java.util.TreeMap; /** * A {@link TreeMap} implementation that mimics the behaviour of the JDK's {@link Properties} class * preventing the '/' or ':' chars from being escaped. */ public class NonEscapedProperties extends TreeMap<String, String> { private static final long serialVersionUID = 1L; public NonEscapedProperties() { } public NonEscapedProperties(Comparator<? super String> comparator) { super(comparator); } public void load(Reader reader) throws IOException { BufferedReader br = new BufferedReader(reader); String line; while ((line = br.readLine()) != null) { putLine(line); } } public void load(Path file) throws IOException { for (String line : Files.readAllLines(file)) { putLine(line); } } public void store(Writer writer, String... comments) throws IOException { StringBuilder out = new StringBuilder(); if (comments != null) { for (String comment : comments) { out.append("# ").append(comment).append("\n"); } out.append("\n"); } this.forEach((key, value) -> { out.append(key).append("=").append(value).append("\n"); }); writer.write(out.toString()); writer.flush(); } private void putLine(String line) { if (line != null) { String _line = line.trim(); if (!_line.isEmpty() && !_line.startsWith("#")) { String[] tokens = _line.split("="); if (tokens.length == 1) { super.put(tokens[0], ""); } if (tokens.length == 2) { super.put(tokens[0], tokens[1]); } } } } }