+ public static QName getQName(final Class<? extends BaseIdentity> context) {
+ return findQName(context);
+ }
+
+ public static boolean isAugmentationChild(final Class<?> clazz) {
+ // FIXME: Current resolver could be still confused when
+ // child node was added by grouping
+ checkArgument(clazz != null);
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ Class<?> parent = findHierarchicalParent((Class) clazz);
+ if (parent == null) {
+ LOG.debug("Did not find a parent for class {}", clazz);
+ return false;
+ }
+
+ String clazzModelPackage = getModelRootPackageName(clazz.getPackage());
+ String parentModelPackage = getModelRootPackageName(parent.getPackage());
+
+ return !clazzModelPackage.equals(parentModelPackage);
+ }
+
+ public static String getModelRootPackageName(final Package pkg) {
+ return getModelRootPackageName(pkg.getName());
+ }
+
+ public static String getModelRootPackageName(final String name) {
+ checkArgument(name != null, "Package name should not be null.");
+ checkArgument(name.startsWith(BindingMapping.PACKAGE_PREFIX), "Package name not starting with %s, is: %s",
+ BindingMapping.PACKAGE_PREFIX, name);
+ Matcher match = ROOT_PACKAGE_PATTERN.matcher(name);
+ checkArgument(match.find(),"Package name '%s' does not match required pattern '%s'",name,ROOT_PACKAGE_PATTERN_STRING);
+ return match.group(0);
+ }
+
+ public static YangModuleInfo getModuleInfo(final Class<?> cls) throws Exception {
+ checkArgument(cls != null);
+ String packageName = getModelRootPackageName(cls.getPackage());
+ final String potentialClassName = getModuleInfoClassName(packageName);
+ return withClassLoader(cls.getClassLoader(), new Callable<YangModuleInfo>() {
+
+ @Override
+ public YangModuleInfo call() throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+ Class<?> moduleInfoClass = Thread.currentThread().getContextClassLoader().loadClass(potentialClassName);
+ return (YangModuleInfo) moduleInfoClass.getMethod("getInstance").invoke(null);
+ }
+ });
+ }
+
+ public static String getModuleInfoClassName(final String packageName) {
+ return packageName + "." + BindingMapping.MODULE_INFO_CLASS_NAME;
+ }
+
+ public static boolean isBindingClass(final Class<?> cls) {
+ if (DataContainer.class.isAssignableFrom(cls) || Augmentation.class.isAssignableFrom(cls)) {
+ return true;
+ }
+ return (cls.getName().startsWith(BindingMapping.PACKAGE_PREFIX));