package org.jtheque.i18n;
import org.jtheque.utils.annotations.Immutable;
import org.jtheque.utils.annotations.ThreadSafe;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import java.io.File;
import java.net.URL;
/*
* Copyright JTheque (Baptiste Wicht)
*
* 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.
*/
/**
* An utility factory for I18NResource.
*
* @author Baptiste Wicht
*/
@ThreadSafe
public final class I18NResourceFactory {
/**
* Utility class, not instantiable.
*/
private I18NResourceFactory() {
throw new AssertionError();
}
/**
* Construct a new I18NResource from the given URL.
*
* @param name The name of the file.
* @param url The url to create the resource to.
*
* @return The I18NResource to the URL.
*/
public static I18NResource fromURL(String name, URL url) {
Resource resource = new UrlResource(url);
return new I18NResourceImpl(name, resource);
}
/**
* Construct a I18NResource from the path using the class (with the class loader) to load it.
*
* @param classz The class to get the class loader.
* @param path The resource path.
*
* @return The I18NResource corresponding to the given resource.
*/
public static I18NResource fromResource(Class<?> classz, String path) {
Resource resource = new InputStreamResource(classz.getClassLoader().getResourceAsStream(path));
return new I18NResourceImpl(path.substring(path.lastIndexOf('/')), resource);
}
/**
* Construct a I18NResource from the given file.
*
* @param file The file to use to create the I18NResource.
*
* @return The I18NResource corresponding to the given file.
*/
public static I18NResource fromFile(File file) {
return new I18NResourceImpl(file.getName(), new FileSystemResource(file));
}
/**
* An i18n resource implementation.
*
* @author Baptiste Wicht
*/
@Immutable
private static final class I18NResourceImpl implements I18NResource {
private final String fileName;
private final Resource resource;
/**
* Construct a new I18NResourceImpl.
*
* @param fileName The file name.
* @param resource The spring resource to the file.
*/
private I18NResourceImpl(String fileName, Resource resource) {
super();
this.fileName = fileName;
this.resource = resource;
}
@Override
public String getFileName() {
return fileName;
}
@Override
public Resource getResource() {
return resource;
}
@Override
public String toString() {
return "I18NResourceImpl{" +
"fileName='" + fileName + '\'' +
", resource=" + resource +
'}';
}
}
}