X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2Feffective%2FDeviateEffectiveStatementImpl.java;h=40cc4263cbd87e8cb8e8fd6f8d1a7b88cffba570;hb=refs%2Fchanges%2F18%2F47318%2F5;hp=6365a71552387f0312718cbc70df80b828b512b9;hpb=30c55f9bed4209a1507d7da876748a8b49f5c966;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java index 6365a71552..40cc4263cb 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -7,14 +7,137 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; -import org.opendaylight.yangtools.yang.model.api.Deviation; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.Collection; +import java.util.Objects; +import java.util.Set; +import org.opendaylight.yangtools.yang.model.api.DeviateDefinition; +import org.opendaylight.yangtools.yang.model.api.DeviateKind; +import org.opendaylight.yangtools.yang.model.api.MustDefinition; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UniqueConstraint; import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class DeviateEffectiveStatementImpl extends - EffectiveStatementBase { - public DeviateEffectiveStatementImpl( - StmtContext ctx) { +public final class DeviateEffectiveStatementImpl + extends DeclaredEffectiveStatementBase implements DeviateDefinition { + + private final DeviateKind deviateType; + private final Boolean deviatedConfig; + private final String deviatedDefault; + private final Boolean deviatedMandatory; + private final Integer deviatedMaxElements; + private final Integer deviatedMinElements; + private final Set deviatedMustDefinitions; + private final TypeDefinition deviatedType; + private final Collection deviatedUniqueConstraints; + private final String deviatedUnits; + + + public DeviateEffectiveStatementImpl(final StmtContext ctx) { super(ctx); + + this.deviateType = argument(); + + final ConfigEffectiveStatement configStmt = firstEffective(ConfigEffectiveStatement.class); + this.deviatedConfig = configStmt == null ? null : configStmt.argument(); + final DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class); + this.deviatedDefault = defaultStmt == null ? null : defaultStmt.argument(); + final MandatoryEffectiveStatement mandatoryStmt = firstEffective(MandatoryEffectiveStatement.class); + this.deviatedMandatory = mandatoryStmt == null ? null : mandatoryStmt.argument(); + final MaxElementsEffectiveStatementImpl maxElementsStmt = firstEffective(MaxElementsEffectiveStatementImpl.class); + this.deviatedMaxElements = maxElementsStmt == null ? null : Integer.valueOf(maxElementsStmt.argument()); + final MinElementsEffectiveStatementImpl minElementsStmt = firstEffective(MinElementsEffectiveStatementImpl.class); + this.deviatedMinElements = minElementsStmt == null ? null : minElementsStmt.argument(); + final TypeEffectiveStatement typeStmt = firstEffective(TypeEffectiveStatement.class); + this.deviatedType = typeStmt == null ? null : typeStmt.getTypeDefinition(); + final UnitsEffectiveStatementImpl unitsStmt = firstEffective(UnitsEffectiveStatementImpl.class); + this.deviatedUnits = unitsStmt == null ? null : unitsStmt.argument(); + + this.deviatedMustDefinitions = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class)); + this.deviatedUniqueConstraints = ImmutableList.copyOf(allSubstatementsOfType(UniqueConstraint.class)); + } + + @Override + public DeviateKind getDeviateType() { + return deviateType; + } + + @Override + public Boolean getDeviatedConfig() { + return deviatedConfig; + } + + @Override + public String getDeviatedDefault() { + return deviatedDefault; + } + + @Override + public Boolean getDeviatedMandatory() { + return deviatedMandatory; + } + + @Override + public Integer getDeviatedMaxElements() { + return deviatedMaxElements; + } + + @Override + public Integer getDeviatedMinElements() { + return deviatedMinElements; + } + + @Override + public Set getDeviatedMusts() { + return deviatedMustDefinitions; + } + + @Override + public TypeDefinition getDeviatedType() { + return deviatedType; + } + + @Override + public Collection getDeviatedUniques() { + return deviatedUniqueConstraints; + } + + @Override + public String getDeviatedUnits() { + return deviatedUnits; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + DeviateEffectiveStatementImpl other = (DeviateEffectiveStatementImpl) obj; + return Objects.equals(deviateType, other.deviateType) && + Objects.equals(deviatedConfig, other.deviatedConfig) && + Objects.equals(deviatedDefault, other.deviatedDefault) && + Objects.equals(deviatedMandatory, other.deviatedMandatory) && + Objects.equals(deviatedMaxElements, other.deviatedMaxElements) && + Objects.equals(deviatedMinElements, other.deviatedMinElements) && + Objects.equals(deviatedMustDefinitions, other.deviatedMustDefinitions) && + Objects.equals(deviatedType, other.deviatedType) && + Objects.equals(deviatedUniqueConstraints, other.deviatedUniqueConstraints) && + Objects.equals(deviatedUnits, other.deviatedUnits); + } + + @Override + public int hashCode() { + return Objects.hash(deviateType, deviatedConfig, deviatedDefault, deviatedMandatory, deviatedMaxElements, + deviatedMinElements, deviatedMustDefinitions, deviatedType, deviatedUniqueConstraints, deviatedUnits); } -} \ No newline at end of file +}