import java.util.Collections;
import java.util.List;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement;
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DeclaredEffectiveStatementBase;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DescriptionEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ReferenceEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.StatusEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ValueEffectiveStatementImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class EnumEffectiveStatementImpl extends DeclaredEffectiveStatementBase<String, EnumStatement> implements EnumPair {
+
+ private static final Logger LOG = LoggerFactory.getLogger(EnumEffectiveStatementImpl.class);
+
private final SchemaPath path;
private String description;
private String reference;
private Status status = Status.CURRENT;
private Integer value;
+ private final QName maybeQNameArgument;
public EnumEffectiveStatementImpl(final StmtContext<String, EnumStatement, ?> ctx) {
super(ctx);
- path = ctx.getSchemaPath().get();
+ SchemaPath parentPath = ctx.getParentContext().getSchemaPath().get();
+ QNameModule moduleQName = parentPath.getLastComponent().getModule();
+ QName maybeQNameArgumentInit = null;
+ try {
+ maybeQNameArgumentInit = QName.create(moduleQName, argument());
+ } catch (IllegalArgumentException e) {
+ String localName = Utils.replaceIllegalCharsForQName(argument());
+ LOG.warn("{}. Enum argument '{}' has been replaced by '{}'.", e.getMessage(), argument(), localName, e);
+ maybeQNameArgumentInit = QName.create(moduleQName, localName);
+ }
+ this.maybeQNameArgument = maybeQNameArgumentInit;
+ this.path = parentPath.createChild(this.maybeQNameArgument);
- for (final EffectiveStatement<?,?> effectiveStatement : effectiveSubstatements()) {
+ for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
if (effectiveStatement instanceof DescriptionEffectiveStatementImpl) {
description = ((DescriptionEffectiveStatementImpl) effectiveStatement).argument();
}
@Override
public QName getQName() {
- return getPath().getLastComponent();
+ return maybeQNameArgument;
}
@Override