CgmesMetadataModelImpl.java

/**
 * Copyright (c) 2024, 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.cgmes.model;

import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

/**
 * @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
 */
public class CgmesMetadataModelImpl implements CgmesMetadataModel {

    private final CgmesSubset subset;
    private String id;
    private String description;
    private int version;
    private String modelingAuthoritySet;
    private final Set<String> profiles = new HashSet<>();
    private final Set<String> dependentOn = new HashSet<>();
    private final Set<String> supersedes = new HashSet<>();

    public CgmesMetadataModelImpl(CgmesSubset subset, String modelingAuthoritySet) {
        this.subset = subset;
        this.modelingAuthoritySet = modelingAuthoritySet;
        this.version = 1;
        this.description = subset.getIdentifier() + " Model";
    }

    @Override
    public CgmesSubset getSubset() {
        return subset;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public String getDescription() {
        return description;
    }

    @Override
    public int getVersion() {
        return version;
    }

    @Override
    public String getModelingAuthoritySet() {
        return modelingAuthoritySet;
    }

    @Override
    public Set<String> getProfiles() {
        return profiles;
    }

    @Override
    public Set<String> getDependentOn() {
        return dependentOn;
    }

    @Override
    public Set<String> getSupersedes() {
        return supersedes;
    }

    @Override
    public CgmesMetadataModelImpl setVersion(int version) {
        this.version = version;
        return this;
    }

    @Override
    public CgmesMetadataModelImpl setId(String id) {
        this.id = id;
        return this;
    }

    @Override
    public CgmesMetadataModelImpl setProfile(String profile) {
        Objects.requireNonNull(profile);
        this.profiles.clear();
        this.profiles.add(profile);
        return this;
    }

    @Override
    public CgmesMetadataModelImpl addProfiles(Collection<String> profiles) {
        this.profiles.addAll(profiles);
        return this;
    }

    @Override
    public CgmesMetadataModelImpl setDescription(String description) {
        this.description = description;
        return this;
    }

    @Override
    public CgmesMetadataModelImpl addSupersedes(String id) {
        addIfNonEmpty(id, this.supersedes);
        return this;
    }

    @Override
    public CgmesMetadataModelImpl addDependentOn(String id) {
        addIfNonEmpty(id, this.dependentOn);
        return this;
    }

    @Override
    public CgmesMetadataModelImpl addDependentOn(Collection<String> dependentOn) {
        this.dependentOn.addAll(dependentOn);
        return this;
    }

    @Override
    public CgmesMetadataModelImpl addSupersedes(Collection<String> supersedes) {
        this.supersedes.addAll(supersedes);
        return this;
    }

    @Override
    public CgmesMetadataModelImpl setModelingAuthoritySet(String modelingAuthoritySet) {
        this.modelingAuthoritySet = modelingAuthoritySet;
        return this;
    }

    @Override
    public CgmesMetadataModelImpl clearDependencies() {
        this.dependentOn.clear();
        return this;
    }

    @Override
    public CgmesMetadataModelImpl clearSupersedes() {
        this.supersedes.clear();
        return this;
    }

    private static void addIfNonEmpty(String id, Collection<String> ids) {
        if (id != null && !id.isEmpty()) {
            ids.add(id);
        }
    }
}