com.alibaba.nacos.common.pathencoder.PathEncoderManager Maven / Gradle / Ivy
/*
* Copyright 1999-2023 Alibaba Group Holding Ltd.
*
* 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 com.alibaba.nacos.common.pathencoder;
import com.alibaba.nacos.common.spi.NacosServiceLoader;
import java.nio.charset.Charset;
import java.util.Collection;
/**
* To expose interface from {@link PathEncoder}.
*
* @author daydreamer-ia
*/
public class PathEncoderManager {
/**
* singleton.
*/
private static final PathEncoderManager INSTANCE = new PathEncoderManager();
/**
* encoder.
*/
private PathEncoder targetEncoder = null;
private PathEncoderManager() {
// load path encoder
Collection load = NacosServiceLoader.load(PathEncoder.class);
if (!load.isEmpty()) {
String currentOs = System.getProperty("os.name").toLowerCase();
for (PathEncoder pathEncoder : load) {
// match first
if (currentOs.contains(pathEncoder.name())) {
targetEncoder = pathEncoder;
break;
}
}
}
}
/**
* encode path if necessary.
*
* @param path origin path
* @param charset charset of origin path
* @return encoded path
*/
public String encode(String path, String charset) {
if (path == null || charset == null) {
return path;
}
if (targetEncoder != null && targetEncoder.needEncode(path)) {
return targetEncoder.encode(path, charset);
}
return path;
}
/**
* encode path if necessary.
*
* @param path origin path
* @return encoded path
*/
public String encode(String path) {
return encode(path, Charset.defaultCharset().name());
}
/**
* decode path.
*
* @param path encoded path
* @param charset charset of encoded path
* @return origin path
*/
public String decode(String path, String charset) {
if (path == null || charset == null) {
return path;
}
if (targetEncoder != null) {
return targetEncoder.decode(path, charset);
}
return path;
}
/**
* decode path.
*
* @param path encoded path
* @return origin path
*/
public String decode(String path) {
return decode(path, Charset.defaultCharset().name());
}
/**
* get singleton.
*
* @return singleton.
*/
public static PathEncoderManager getInstance() {
return INSTANCE;
}
}