DELL
2024-02-21 4982b9614516dde101c3e44c60a612b3bfd8d6fe
iec61850_forFoShanAES_Model/src/org/openmuc/openiec61850/DataSet.java
@@ -1,154 +1,154 @@
/*
 * Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors
 *
 * 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.openmuc.openiec61850;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.openmuc.openiec61850.internal.mms.asn1.Identifier;
import org.openmuc.openiec61850.internal.mms.asn1.ObjectName;
public final class DataSet implements Iterable<FcModelNode> {
    private final String dataSetReference;
    private final List<FcModelNode> members;
    private final Map<Fc, Map<String, FcModelNode>> membersMap = new EnumMap<>(Fc.class);
    private final boolean deletable;
    private ObjectName mmsObjectName = null;
    public DataSet(String dataSetReference, List<FcModelNode> members) {
        this(dataSetReference, members, true);
    }
    public DataSet(String dataSetReference, List<FcModelNode> members, boolean deletable) {
        if (!dataSetReference.startsWith("@") && dataSetReference.indexOf('/') == -1) {
            throw new IllegalArgumentException("DataSet reference " + dataSetReference
                    + " is invalid. Must either start with @ or contain a slash.");
        }
        this.members = new LinkedList<>();
        this.dataSetReference = dataSetReference;
        this.deletable = deletable;
        for (Fc myfc : Fc.values()) {
            membersMap.put(myfc, new LinkedHashMap<String, FcModelNode>());
        }
        for (FcModelNode member : members) {
            this.members.add(member);
            membersMap.get(member.getFc()).put(member.getReference().toString(), member);
        }
    }
    public String getReferenceStr() {
        return dataSetReference;
    }
    public DataSet copy() {
        List<FcModelNode> membersCopy = new ArrayList<>(members.size());
        for (FcModelNode node : members) {
            membersCopy.add((FcModelNode) node.copy());
        }
        return new DataSet(dataSetReference, membersCopy, deletable);
    }
    public FcModelNode getMember(ObjectReference memberReference, Fc fc) {
        if (fc != null) {
            return membersMap.get(fc).get(memberReference.toString());
        }
        for (FcModelNode member : members) {
            if (member.getReference().toString().equals(memberReference.toString())) {
                return member;
            }
        }
        return null;
    }
    public FcModelNode getMember(int index) {
        return members.get(index);
    }
    public List<FcModelNode> getMembers() {
        return members;
    }
    /**
     * Those DataSets defined in the SCL file are not deletable. All other DataSets are deletable. Note that no
     * Reports/Logs may be using the DataSet otherwise it cannot be deleted (but this function will still return true).
     *
     * @return true if deletable
     */
    public boolean isDeletable() {
        return deletable;
    }
    @Override
    public Iterator<FcModelNode> iterator() {
        return members.iterator();
    }
    public List<BasicDataAttribute> getBasicDataAttributes() {
        List<BasicDataAttribute> subBasicDataAttributes = new LinkedList<>();
        for (ModelNode member : members) {
            subBasicDataAttributes.addAll(member.getBasicDataAttributes());
        }
        return subBasicDataAttributes;
    }
    ObjectName getMmsObjectName() {
        if (mmsObjectName != null) {
            return mmsObjectName;
        }
        if (dataSetReference.charAt(0) == '@') {
            mmsObjectName = new ObjectName();
            mmsObjectName.setAaSpecific(new Identifier(dataSetReference.getBytes()));
            return mmsObjectName;
        }
        int slash = dataSetReference.indexOf('/');
        String domainID = dataSetReference.substring(0, slash);
        String itemID = dataSetReference.substring(slash + 1, dataSetReference.length()).replace('.', '$');
        ObjectName.DomainSpecific domainSpecificObjectName = new ObjectName.DomainSpecific();
        domainSpecificObjectName.setDomainID(new Identifier(domainID.getBytes()));
        domainSpecificObjectName.setItemID(new Identifier(itemID.getBytes()));
        mmsObjectName = new ObjectName();
        mmsObjectName.setDomainSpecific(domainSpecificObjectName);
        return mmsObjectName;
    }
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getReferenceStr());
        for (FcModelNode member : members) {
            sb.append("\n");
            sb.append(member.toString());
        }
        return sb.toString();
    }
}
/*
 * Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors
 *
 * 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.openmuc.openiec61850;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.openmuc.openiec61850.internal.mms.asn1.Identifier;
import org.openmuc.openiec61850.internal.mms.asn1.ObjectName;
public final class DataSet implements Iterable<FcModelNode> {
    private final String dataSetReference;
    private final List<FcModelNode> members;
    private final Map<Fc, Map<String, FcModelNode>> membersMap = new EnumMap<>(Fc.class);
    private final boolean deletable;
    private ObjectName mmsObjectName = null;
    public DataSet(String dataSetReference, List<FcModelNode> members) {
        this(dataSetReference, members, true);
    }
    public DataSet(String dataSetReference, List<FcModelNode> members, boolean deletable) {
        if (!dataSetReference.startsWith("@") && dataSetReference.indexOf('/') == -1) {
            throw new IllegalArgumentException("DataSet reference " + dataSetReference
                    + " is invalid. Must either start with @ or contain a slash.");
        }
        this.members = new LinkedList<>();
        this.dataSetReference = dataSetReference;
        this.deletable = deletable;
        for (Fc myfc : Fc.values()) {
            membersMap.put(myfc, new LinkedHashMap<String, FcModelNode>());
        }
        for (FcModelNode member : members) {
            this.members.add(member);
            membersMap.get(member.getFc()).put(member.getReference().toString(), member);
        }
    }
    public String getReferenceStr() {
        return dataSetReference;
    }
    public DataSet copy() {
        List<FcModelNode> membersCopy = new ArrayList<>(members.size());
        for (FcModelNode node : members) {
            membersCopy.add((FcModelNode) node.copy());
        }
        return new DataSet(dataSetReference, membersCopy, deletable);
    }
    public FcModelNode getMember(ObjectReference memberReference, Fc fc) {
        if (fc != null) {
            return membersMap.get(fc).get(memberReference.toString());
        }
        for (FcModelNode member : members) {
            if (member.getReference().toString().equals(memberReference.toString())) {
                return member;
            }
        }
        return null;
    }
    public FcModelNode getMember(int index) {
        return members.get(index);
    }
    public List<FcModelNode> getMembers() {
        return members;
    }
    /**
     * Those DataSets defined in the SCL file are not deletable. All other DataSets are deletable. Note that no
     * Reports/Logs may be using the DataSet otherwise it cannot be deleted (but this function will still return true).
     *
     * @return true if deletable
     */
    public boolean isDeletable() {
        return deletable;
    }
    @Override
    public Iterator<FcModelNode> iterator() {
        return members.iterator();
    }
    public List<BasicDataAttribute> getBasicDataAttributes() {
        List<BasicDataAttribute> subBasicDataAttributes = new LinkedList<>();
        for (ModelNode member : members) {
            subBasicDataAttributes.addAll(member.getBasicDataAttributes());
        }
        return subBasicDataAttributes;
    }
    ObjectName getMmsObjectName() {
        if (mmsObjectName != null) {
            return mmsObjectName;
        }
        if (dataSetReference.charAt(0) == '@') {
            mmsObjectName = new ObjectName();
            mmsObjectName.setAaSpecific(new Identifier(dataSetReference.getBytes()));
            return mmsObjectName;
        }
        int slash = dataSetReference.indexOf('/');
        String domainID = dataSetReference.substring(0, slash);
        String itemID = dataSetReference.substring(slash + 1, dataSetReference.length()).replace('.', '$');
        ObjectName.DomainSpecific domainSpecificObjectName = new ObjectName.DomainSpecific();
        domainSpecificObjectName.setDomainID(new Identifier(domainID.getBytes()));
        domainSpecificObjectName.setItemID(new Identifier(itemID.getBytes()));
        mmsObjectName = new ObjectName();
        mmsObjectName.setDomainSpecific(domainSpecificObjectName);
        return mmsObjectName;
    }
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getReferenceStr());
        for (FcModelNode member : members) {
            sb.append("\n");
            sb.append(member.toString());
        }
        return sb.toString();
    }
}