import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.io.BaseEncoding;
import java.io.Serializable;
import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
-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.StringTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
import org.opendaylight.yangtools.yang.model.util.ModuleDependencySort;
abstract void addCodegenInformation(GeneratedTypeBuilderBase<?> genTOBuilder, TypeDefinition<?> typeDef);
+ /**
+ * Converts the pattern constraints from <code>typedef</code> to the list of
+ * the strings which represents these constraints.
+ *
+ * @param typedef
+ * extended type in which are the pattern constraints sought
+ * @return list of strings which represents the constraint patterns
+ * @throws IllegalArgumentException
+ * if <code>typedef</code> equals null
+ *
+ */
+ abstract Map<String, String> resolveRegExpressionsFromTypedef(TypeDefinition<?> typedef);
+
/**
* Converts <code>dataNode</code> to JAVA <code>Type</code>.
*
return null;
}
- /**
- * Converts the pattern constraints from <code>typedef</code> to the list of
- * the strings which represents these constraints.
- *
- * @param typedef
- * extended type in which are the pattern constraints sought
- * @return list of strings which represents the constraint patterns
- * @throws IllegalArgumentException
- * if <code>typedef</code> equals null
- *
- */
- private static Map<String, String> resolveRegExpressionsFromTypedef(final TypeDefinition<?> typedef) {
- if (!(typedef instanceof StringTypeDefinition)) {
- return ImmutableMap.of();
- }
-
- // TODO: run diff against base ?
- final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) typedef).getPatternConstraints();
- final Map<String, String> regExps = Maps.newHashMapWithExpectedSize(patternConstraints.size());
- for (PatternConstraint patternConstraint : patternConstraints) {
- String regEx = patternConstraint.getJavaPatternString();
-
- // The pattern can be inverted
- final Optional<ModifierKind> optModifier = patternConstraint.getModifier();
- if (optModifier.isPresent()) {
- regEx = applyModifier(optModifier.get(), regEx);
- }
-
- regExps.put(regEx, patternConstraint.getRegularExpressionString());
- }
-
- return regExps;
- }
-
- private static String applyModifier(final ModifierKind modifier, final String pattern) {
- switch (modifier) {
- case INVERT_MATCH:
- return BindingMapping.negatePatternString(pattern);
- default:
- LOG.warn("Ignoring unhandled modifier {}", modifier);
- return pattern;
- }
- }
-
/**
*
* Adds to the <code>genTOBuilder</code> the constant which contains regular
import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.encodeAngleBrackets;
import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
import java.util.Optional;
import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
+import org.opendaylight.yangtools.yang.binding.BindingMapping;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
+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.StringTypeDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* {@link AbstractTypeProvider} which generates full metadata, suitable for codegen purposes. For runtime purposes,
@Beta
// FIXME: make this class final after TypeProviderImpl is gone
public class CodegenTypeProvider extends AbstractTypeProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(CodegenTypeProvider.class);
+
/**
* Creates new instance of class <code>TypeProviderImpl</code>.
*
}
typeDef.getReference().ifPresent(genTOBuilder::setReference);
}
+
+ @Override
+ Map<String, String> resolveRegExpressionsFromTypedef(final TypeDefinition<?> typedef) {
+ if (!(typedef instanceof StringTypeDefinition)) {
+ return ImmutableMap.of();
+ }
+
+ // TODO: run diff against base ?
+ final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) typedef).getPatternConstraints();
+ final Map<String, String> regExps = Maps.newHashMapWithExpectedSize(patternConstraints.size());
+ for (PatternConstraint patternConstraint : patternConstraints) {
+ String regEx = patternConstraint.getJavaPatternString();
+
+ // The pattern can be inverted
+ final Optional<ModifierKind> optModifier = patternConstraint.getModifier();
+ if (optModifier.isPresent()) {
+ regEx = applyModifier(optModifier.get(), regEx);
+ }
+
+ regExps.put(regEx, patternConstraint.getRegularExpressionString());
+ }
+
+ return regExps;
+ }
+
+ private static String applyModifier(final ModifierKind modifier, final String pattern) {
+ switch (modifier) {
+ case INVERT_MATCH:
+ return BindingMapping.negatePatternString(pattern);
+ default:
+ LOG.warn("Ignoring unhandled modifier {}", modifier);
+ return pattern;
+ }
+ }
}