Merge "Fixed for bug : 1171 - issue while creating subnet"
[controller.git] / opendaylight / md-sal / sal-protocolbuffer-encoding / src / main / java / org / opendaylight / controller / cluster / datastore / node / utils / NodeIdentifierWithValueGenerator.java
1 package org.opendaylight.controller.cluster.datastore.node.utils;
2
3 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
4 import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
5 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
6 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
7
8 import java.util.regex.Matcher;
9 import java.util.regex.Pattern;
10
11 public class NodeIdentifierWithValueGenerator{
12         private final String id;
13     private final DataSchemaNode schemaNode;
14     private static final Pattern pattern = Pattern.compile("(.*)\\Q[\\E(.*)\\Q]\\E");
15         private final Matcher matcher;
16         private final boolean doesMatch;
17
18         public NodeIdentifierWithValueGenerator(String id, DataSchemaNode schemaNode){
19             this.id = id;
20             this.schemaNode = schemaNode;
21             matcher = pattern.matcher(this.id);
22             doesMatch = matcher.matches();
23         }
24
25         public boolean matches(){
26             return doesMatch;
27         }
28
29         public YangInstanceIdentifier.PathArgument getPathArgument(){
30             final String name = matcher.group(1);
31             final String value = matcher.group(2);
32
33             return new YangInstanceIdentifier.NodeWithValue(
34                 QNameFactory.create(name), getValue(value));
35         }
36
37         private Object getValue(String value){
38             if(schemaNode != null){
39                 if(schemaNode instanceof LeafListSchemaNode){
40                     return TypeDefinitionAwareCodec
41                         .from(LeafListSchemaNode.class.cast(schemaNode).getType()).deserialize(value);
42
43                 }
44             }
45         return value;
46         }
47
48     }