From: Robert Varga Date: Tue, 29 Aug 2017 08:28:56 +0000 (+0200) Subject: BUG-8043: eliminate ConstraintFactory X-Git-Tag: v2.0.0~261 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=fd047ce5daecc6d0f6a08aac66755cb765212264;p=yangtools.git BUG-8043: eliminate ConstraintFactory This factory is getting in the way and it really is a useless abstraction, as we can achieve the same with simple subclass contract. Change-Id: I3fb50c4bcce08ec79ac710d2ca0bb9e4292ffc53 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java index ff444a670f..3a6a674cf3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java @@ -7,16 +7,10 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type; -import com.google.common.collect.ImmutableList; -import java.util.ArrayList; -import java.util.List; import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; -import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DescriptionEffectiveStatementImpl; @@ -34,8 +28,7 @@ abstract class AbstractConstraintEffectiveStatement ctx, - final ConstraintFactory constraintFactory) { + public AbstractConstraintEffectiveStatement(final StmtContext ctx) { super(ctx); String descriptionInit = null; String referenceInit = null; @@ -66,7 +59,7 @@ abstract class AbstractConstraintEffectiveStatement { - abstract protected A createConstraints(AbstractConstraintEffectiveStatement stmt, A argument); -} - -abstract class ListConstraintFactory extends ConstraintFactory> { - @Override - protected List createConstraints(final AbstractConstraintEffectiveStatement, ?> stmt, - final List argument) { - if (!stmt.isCustomizedStatement()) { - return ImmutableList.copyOf(argument); - } - final List customizedConstraints = new ArrayList<>(argument.size()); - for (final A constraint : argument) { - customizedConstraints.add(createCustomizedConstraint(constraint, stmt)); - } - return ImmutableList.copyOf(customizedConstraints); - } - - abstract protected A createCustomizedConstraint(A constraint, AbstractConstraintEffectiveStatement, ?> stmt); + abstract A createConstraints(A argument); } -final class LengthConstraintFactory extends ListConstraintFactory { - @Override - protected LengthConstraint createCustomizedConstraint(final LengthConstraint lengthConstraint, - final AbstractConstraintEffectiveStatement, ?> stmt) { - return new LengthConstraintEffectiveImpl(lengthConstraint.getMin(), lengthConstraint.getMax(), - stmt.getDescription(), stmt.getReference(), stmt.getErrorAppTag(), stmt.getErrorMessage()); - } -} - -final class RangeConstraintFactory extends ListConstraintFactory { - @Override - protected RangeConstraint createCustomizedConstraint(final RangeConstraint rangeConstraint, - final AbstractConstraintEffectiveStatement, ?> stmt) { - return new RangeConstraintEffectiveImpl(rangeConstraint.getMin(), rangeConstraint.getMax(), - stmt.getDescription(), stmt.getReference(), stmt.getErrorAppTag(), stmt.getErrorMessage()); - } -} - -final class PatternConstraintFactory extends ConstraintFactory { - @Override - protected PatternConstraint createConstraints( - final AbstractConstraintEffectiveStatement stmt, final PatternConstraint argument) { - if (!stmt.isCustomizedStatement()) { - return argument; - } - - return createCustomizedConstraint(argument, stmt); - } - - private static PatternConstraint createCustomizedConstraint(final PatternConstraint patternConstraint, - final AbstractConstraintEffectiveStatement stmt) { - return new PatternConstraintEffectiveImpl(patternConstraint.getRegularExpression(), - patternConstraint.getRawRegularExpression(), stmt.getDescription(), stmt.getReference(), - stmt.getErrorAppTag(), stmt.getErrorMessage(), stmt.getModifier()); - } -} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractListConstraintEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractListConstraintEffectiveStatement.java new file mode 100644 index 0000000000..ef7ee9aa62 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractListConstraintEffectiveStatement.java @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type; + +import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +abstract class AbstractListConstraintEffectiveStatement>> + extends AbstractConstraintEffectiveStatement, D> { + + AbstractListConstraintEffectiveStatement(final StmtContext, D, ?> ctx) { + super(ctx); + } + + @Override + final List createConstraints(final List argument) { + if (!isCustomizedStatement()) { + return ImmutableList.copyOf(argument); + } + + final List customizedConstraints = new ArrayList<>(argument.size()); + for (final T constraint : argument) { + customizedConstraints.add(createCustomizedConstraint(constraint)); + } + return ImmutableList.copyOf(customizedConstraints); + } + + abstract T createCustomizedConstraint(T constraint); +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java index 19a71c04ae..4288fcc0a6 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java @@ -13,8 +13,15 @@ import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public class LengthEffectiveStatementImpl extends - AbstractConstraintEffectiveStatement, LengthStatement> { + AbstractListConstraintEffectiveStatement { + public LengthEffectiveStatementImpl(final StmtContext, LengthStatement, ?> ctx) { - super(ctx, new LengthConstraintFactory()); + super(ctx); + } + + @Override + final LengthConstraint createCustomizedConstraint(final LengthConstraint lengthConstraint) { + return new LengthConstraintEffectiveImpl(lengthConstraint.getMin(), lengthConstraint.getMax(), + getDescription(), getReference(), getErrorAppTag(), getErrorMessage()); } } \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java index eeb4d4c3ba..df6331fedc 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java @@ -14,6 +14,16 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public class PatternEffectiveStatementImpl extends AbstractConstraintEffectiveStatement { public PatternEffectiveStatementImpl(final StmtContext ctx) { - super(ctx, new PatternConstraintFactory()); + super(ctx); } -} \ No newline at end of file + + @Override + protected PatternConstraint createConstraints(final PatternConstraint argument) { + if (!isCustomizedStatement()) { + return argument; + } + + return new PatternConstraintEffectiveImpl(argument.getRegularExpression(), argument.getRawRegularExpression(), + getDescription(), getReference(), getErrorAppTag(), getErrorMessage(), getModifier()); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java index dec4c9ed22..3ffe1d6726 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java @@ -13,8 +13,14 @@ import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public class RangeEffectiveStatementImpl extends - AbstractConstraintEffectiveStatement, RangeStatement> { + AbstractListConstraintEffectiveStatement { public RangeEffectiveStatementImpl(final StmtContext, RangeStatement, ?> ctx) { - super(ctx, new RangeConstraintFactory()); + super(ctx); + } + + @Override + final RangeConstraint createCustomizedConstraint(final RangeConstraint rangeConstraint) { + return new RangeConstraintEffectiveImpl(rangeConstraint.getMin(), rangeConstraint.getMax(), + getDescription(), getReference(), getErrorAppTag(), getErrorMessage()); } }