blob: 64e7fe69a4e619ae8319e0cd3fd011608ccee94d [file] [log] [blame]
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.util.ArrayList;
20import java.util.HashMap;
21import java.util.List;
22import java.util.Map;
23
24import org.onosproject.yangutils.datamodel.YangNode;
25import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
26import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
27import org.onosproject.yangutils.translator.tojava.JavaImportData;
28import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
29
30import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
31import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.getTempJavaFragement;
32import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
33import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
34import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
35import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
36import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
37import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
38import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_REG;
39import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
40import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
41import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
42
43/**
44 * Represent the extends list for generated java classes. It holds the class details which needs
45 * to be extended by the generated java code.
46 */
47public class JavaExtendsListHolder {
48
49 /**
50 * Creates an instance of JavaExtendsListHolder.
51 */
52 public JavaExtendsListHolder() {
53 setExtendedClassStore(new HashMap<>());
54 setExtendsList(new ArrayList<>());
55 }
56
57 private Map<JavaQualifiedTypeInfo, Boolean> extendedClassStore;
58 private List<JavaQualifiedTypeInfo> extendsList;
59
60 /**
61 * Returns extends list.
62 *
63 * @return extends list
64 */
65 public Map<JavaQualifiedTypeInfo, Boolean> getExtendedClassStore() {
66 return extendedClassStore;
67 }
68
69 /**
70 * Sets extends list.
71 *
72 * @param extendsList list of classes need to be extended
73 */
74 private void setExtendedClassStore(Map<JavaQualifiedTypeInfo, Boolean> extendedClass) {
75 this.extendedClassStore = extendedClass;
76 }
77
78 /**
79 * Adds to the extends list.
80 *
81 * @param info java file info
82 * @param node YANG node
83 */
84 public void addToExtendsList(JavaQualifiedTypeInfo info, YangNode node) {
85 JavaFileInfo fileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
86
87 if (!fileInfo.getPackage().equals(info.getPkgInfo())) {
88 JavaImportData importData = getTempJavaFragement(node).getJavaImportData();
89 importData.addImportInfo(info);
90 /*true means import should be added*/
91 getExtendedClassStore().put(info, true);
92 }
93 getExtendedClassStore().put(info, false);
94 addToExtendsList(info);
95 }
96
97 /**
98 * Returns extends string for class.
99 *
100 * @param genFileType generated file type
101 * @param className class name
102 * @param isNotificationPresent if notification node is present
103 * @return extends string
104 */
105 public String getExtendsString(int genFileType, String className, boolean isNotificationPresent) {
106 String extend = EXTEND + SPACE;
107 if (genFileType == GENERATE_SERVICE_AND_MANAGER && isNotificationPresent) {
108 extend = extend + LISTENER_REG + DIAMOND_OPEN_BRACKET + className + EVENT_STRING + COMMA + SPACE
109 + className + EVENT_LISTENER_STRING + DIAMOND_CLOSE_BRACKET + NEW_LINE;
110 } else {
111 for (JavaQualifiedTypeInfo info : getExtendsList()) {
112 if (info.getClassInfo().equals(className)) {
113 if (!getExtendedClassStore().get(info)) {
114 return extend + info.getClassInfo();
115 } else {
116 return extend + info.getPkgInfo() + PERIOD + info.getClassInfo();
117 }
118 }
119 }
120 }
121 return null;
122 }
123
124 /**
125 * Returns extends list.
126 *
127 * @return the extendsList
128 */
129 public List<JavaQualifiedTypeInfo> getExtendsList() {
130 return extendsList;
131 }
132
133 /**
134 * Sets extends info list.
135 *
136 * @param classInfoList the extends List to set
137 */
138 private void setExtendsList(List<JavaQualifiedTypeInfo> classInfoList) {
139 this.extendsList = classInfoList;
140 }
141
142 /**
143 * Adds extends info to list.
144 *
145 * @param classInfo class info
146 */
147 private void addToExtendsList(JavaQualifiedTypeInfo classInfo) {
148 getExtendsList().add(classInfo);
149 }
150
151}