Abstract infrastructure for normalized nodes translation.
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / transform / base / parser / LeafSetEntryNodeBaseParser.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser;
9
10 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
11 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
12 import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParser;
13 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
14
15 import com.google.common.base.Preconditions;
16 import com.google.common.collect.Iterables;
17
18 /**
19  * Abstract(base) parser for LeafSetEntryNodes, parses elements of type E.
20  *
21  * @param <E> type of elements to be parsed
22  */
23 public abstract class LeafSetEntryNodeBaseParser<E> implements
24         ToNormalizedNodeParser<E, LeafSetEntryNode<?>, LeafListSchemaNode> {
25
26     @Override
27     public final LeafSetEntryNode<Object> parse(Iterable<E> elements, LeafListSchemaNode schema) {
28         final int size = Iterables.size(elements);
29         Preconditions.checkArgument(size == 1, "Xml elements mapped to leaf node illegal count: %s", size);
30         Object value = parseLeafListEntry(elements.iterator().next(),schema);
31         return Builders.leafSetEntryBuilder(schema).withValue(value).build();
32     }
33
34     /**
35      *
36      * Parse the inner value of a LeafSetEntryNode from element of type E.
37      *
38      * @param element to be parsed
39      * @param schema schema for leaf-list
40      * @return parsed element as an Object
41      */
42     protected abstract Object parseLeafListEntry(E element, LeafListSchemaNode schema);
43 }