import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.opendaylight.yangtools.concepts.SemVer;
+import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
import org.opendaylight.yangtools.yang.model.api.Module;
/**
"true", "try", "void", "volatile", "while");
public static final String QNAME_STATIC_FIELD_NAME = "QNAME";
- public static final String PACKAGE_PREFIX = "org.opendaylight.yang.gen.v2";
+
+ /**
+ * Package prefix for Binding v2 generated Java code structures
+ */
+ public static final String PACKAGE_PREFIX = "org.opendaylight.mdsal.gen.javav2";
private static final Splitter DOT_SPLITTER = Splitter.on('.');
private static final Interner<String> PACKAGE_INTERNER = Interners.newWeakInterner();
packageNameBuilder.append('.');
}
- final SemVer semVer = module.getSemanticVersion();
- if (semVer != null) {
- packageNameBuilder.append(semVer.toString());
- } else {
- packageNameBuilder.append("rev");
- packageNameBuilder.append(PACKAGE_DATE_FORMAT.get().format(module.getRevision()));
- }
- return normalizePackageName(packageNameBuilder.toString());
+ //TODO: per yangtools dev, semantic version not used yet
+// final SemVer semVer = module.getSemanticVersion();
+// if (semVer != null) {
+// packageNameBuilder.append(semVer.toString());
+// } else {
+// packageNameBuilder.append("rev");
+// packageNameBuilder.append(PACKAGE_DATE_FORMAT.get().format(module.getRevision()));
+// }
+
+ packageNameBuilder.append("rev");
+ packageNameBuilder.append(PACKAGE_DATE_FORMAT.get().format(module.getRevision()));
+
+ //seems to be duplicate call, because normalizing is run again on full packagename + localName
+ //return normalizePackageName(packageNameBuilder.toString(), null);
+ return packageNameBuilder.toString();
}
+ /**
+ * This method normalizes input package name to become valid package identifier
+ * and appends Binding v2 specific namespace type
+ *
+ * @param packageName package name
+ * @return normalized package name
+ */
public static String normalizePackageName(final String packageName) {
if (packageName == null) {
return null;
builder.append('.');
}
- //FIXME: don't use underscore in v2
+ //TODO: incorporate use of PackageNameNormalizer (impl in progress)
+ //TODO: to not to worry about various characters in identifiers,
+ //TODO: relying on https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
+
+ //FIXME: delete this custom check when naming convention patch above is merged
if (Character.isDigit(p.charAt(0)) || BindingMapping.JAVA_RESERVED_WORDS.contains(p)) {
builder.append('_');
}
+
builder.append(p);
}
return PACKAGE_INTERNER.intern(builder.toString());
}
+ /**
+ * Prepares valid Java class name
+ * @param localName
+ * @return class name
+ */
public static String getClassName(final String localName) {
Preconditions.checkArgument(localName != null, "Name should not be null.");
return toFirstUpper(toCamelCase(localName));
return s.substring(0, 1).toUpperCase() + s.substring(1);
}
+ /**
+ * Prepares Java property name for method getter code generation
+ * @param yangIdentifier given YANG element local name
+ * @return property name
+ */
+ public static String getPropertyName(final String yangIdentifier) {
+ final String potential = toFirstLower(toCamelCase(yangIdentifier));
+ if ("class".equals(potential)) {
+ return "xmlClass";
+ }
+ return potential;
+ }
+
+ /**
+ * Returns the {@link String} {@code s} with an
+ * {@link Character#isLowerCase(char) lower case} first character. This
+ * function is null-safe.
+ *
+ * @param s
+ * the string that should get an lower case first character. May
+ * be <code>null</code>.
+ * @return the {@link String} {@code s} with an lower case first character
+ * or <code>null</code> if the input {@link String} {@code s} was
+ * <code>null</code>.
+ */
+ private static String toFirstLower(final String s) {
+ if (s == null || s.length() == 0) {
+ return s;
+ }
+ if (Character.isLowerCase(s.charAt(0))) {
+ return s;
+ }
+ if (s.length() == 1) {
+ return s.toLowerCase();
+ }
+ return s.substring(0, 1).toLowerCase() + s.substring(1);
+ }
+
//TODO: further implementation of static util methods...
}