Binding v2 - Optimize acceptable condition for BuilderGenerator
[mdsal.git] / binding2 / mdsal-binding2-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / javav2 / java / api / generator / BuilderGenerator.java
1 /*
2  * Copyright (c) 2017 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
9 package org.opendaylight.mdsal.binding.javav2.java.api.generator;
10
11 import com.google.common.annotations.Beta;
12 import org.opendaylight.mdsal.binding.javav2.java.api.generator.renderers.BuilderRenderer;
13 import org.opendaylight.mdsal.binding.javav2.model.api.CodeGenerator;
14 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
15 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
16 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTypeForBuilder;
17 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
18 import org.opendaylight.mdsal.binding.javav2.model.api.UnitName;
19 import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable;
20 import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentation;
21 import org.opendaylight.yangtools.concepts.Identifier;
22
23 /**
24  * Transformer of the data from the virtual form to JAVA programming language.
25  * The result source code represent java class. For generation of the source
26  * code is used the template written in Twirl (Scala based) language.
27  */
28 @Beta
29 public final class BuilderGenerator implements CodeGenerator {
30
31     /**
32      * Constant used as suffix for builder name.
33      */
34     public static final String BUILDER = "Builder";
35
36     @Override
37     public String generate(Type type) {
38         if (type instanceof GeneratedTypeForBuilder) {
39             final GeneratedType genType = (GeneratedType) type;
40             return new BuilderRenderer(genType).generateTemplate();
41         } else {
42             return "";
43         }
44     }
45
46     @Override
47     public boolean isAcceptable(Type type) {
48         return type instanceof GeneratedTypeForBuilder;
49     }
50
51     @Override
52     public Identifier getUnitName(Type type) {
53         return new UnitName(type.getName() + BUILDER);
54     }
55 }