AbstractExtensionSerDe.java
/**
* Copyright (c) 2019, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.commons.extensions;
import java.io.InputStream;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Stream;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public abstract class AbstractExtensionSerDe<T extends Extendable, E extends Extension<T>> implements ExtensionSerDe<T, E> {
private final String extensionName;
private final String categoryName;
private final Class<? super E> extensionClass;
private final String xsdFileName;
private final String namespaceUri;
private final String namespacePrefix;
protected AbstractExtensionSerDe(String extensionName, String categoryName, Class<? super E> extensionClass,
String xsdFileName, String namespaceUri, String namespacePrefix) {
this.extensionName = Objects.requireNonNull(extensionName);
this.categoryName = Objects.requireNonNull(categoryName);
this.extensionClass = Objects.requireNonNull(extensionClass);
this.xsdFileName = Objects.requireNonNull(xsdFileName);
this.namespaceUri = Objects.requireNonNull(namespaceUri);
this.namespacePrefix = Objects.requireNonNull(namespacePrefix);
}
@Override
public String getExtensionName() {
return extensionName;
}
@Override
public final String getSerializationName(String extensionVersion) {
return getExtensionName();
}
@Override
public final Set<String> getSerializationNames() {
return Set.of(getExtensionName());
}
@Override
public String getCategoryName() {
return categoryName;
}
@Override
public Class<? super E> getExtensionClass() {
return extensionClass;
}
@Override
public InputStream getXsdAsStream() {
return getClass().getResourceAsStream("/xsd/" + xsdFileName);
}
@Override
public String getNamespaceUri() {
return namespaceUri;
}
@Override
public Stream<String> getNamespaceUriStream() {
return Stream.of(namespaceUri);
}
@Override
public String getNamespacePrefix() {
return namespacePrefix;
}
@Override
public String getNamespacePrefix(String extensionVersion) {
return getNamespacePrefix();
}
@Override
public String getVersion(String namespaceUri) {
return this.namespaceUri.equals(namespaceUri) ? getVersion() : null;
}
}