import com.google.common.base.MoreObjects.ToStringHelper;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.yang.common.AbstractQName;
@NonNullByDefault
-final class CamelCaseNamingStrategy extends ClassNamingStrategy {
+final class CamelCaseNamingStrategy extends YangIdentifierClassNamingStrategy {
private final StatementNamespace namespace;
- private final AbstractQName nodeIdentifier;
CamelCaseNamingStrategy(final StatementNamespace namespace, final AbstractQName nodeIdentifier) {
+ super(nodeIdentifier);
this.namespace = requireNonNull(namespace);
- this.nodeIdentifier = requireNonNull(nodeIdentifier);
- }
-
- @Override
- AbstractQName nodeIdentifier() {
- return nodeIdentifier;
}
StatementNamespace namespace() {
return new CamelCaseWithNamespaceNamingStrategy(this);
}
- @Override
- String simpleClassName() {
- return BindingMapping.getClassName(nodeIdentifier.getLocalName());
- }
-
@Override
ToStringHelper addToStringAttributes(final ToStringHelper helper) {
- return helper.add("localName", nodeIdentifier.getLocalName()).add("namespace", namespace);
+ return super.addToStringAttributes(helper).add("namespace", namespace);
}
}
import static java.util.Objects.requireNonNull;
import com.google.common.base.MoreObjects.ToStringHelper;
-import org.opendaylight.yangtools.yang.common.AbstractQName;
final class CamelCaseWithNamespaceNamingStrategy extends ClassNamingStrategy {
private final CamelCaseNamingStrategy delegate;
this.delegate = requireNonNull(delegate);
}
- @Override
- AbstractQName nodeIdentifier() {
- return delegate.nodeIdentifier();
- }
-
@Override
String simpleClassName() {
return delegate.namespace().appendSuffix(delegate.simpleClassName());
return null;
}
+ @Override
+ String rootName() {
+ return delegate.rootName();
+ }
+
+ @Override
+ String childPackage() {
+ return delegate.childPackage();
+ }
+
@Override
ToStringHelper addToStringAttributes(final ToStringHelper helper) {
return helper.add("delegate", delegate);
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.concepts.Immutable;
-import org.opendaylight.yangtools.yang.common.AbstractQName;
/**
* Enumeration of known strategies for translating a YANG node identifier into a Java package name segment or a Java
* simple class name.
*/
abstract class ClassNamingStrategy implements Immutable {
- /**
- * Return the YANG node identifier backing this naming strategy. Only the {@link AbstractQName#getLocalName()} part
- * of the identifier is significant.
- *
- * @return YANG node identifier.
- */
- abstract @NonNull AbstractQName nodeIdentifier();
-
/**
* Return the simple Java class name assigned by this naming strategy.
*
*/
abstract @Nullable ClassNamingStrategy fallback();
+ // FIXME: document this method
+ abstract @NonNull String rootName();
+
+ /**
+ * Return the {@code Java package name} allocated for any classes generated as children of this strategy.
+ *
+ * @return A package fragment name, for example {@code "foo.bar.baz"}
+ */
+ abstract @NonNull String childPackage();
+
@Override
public final String toString() {
return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
@Override
final String computeCurrentPackage() {
- return packageString(strategy.nodeIdentifier());
+ return strategy.childPackage();
}
@Override
@Override
boolean equalRoot(final Member other) {
- return other instanceof Primary primary
- && strategy.nodeIdentifier().getLocalName().equals(primary.strategy.nodeIdentifier().getLocalName());
+ return other instanceof Primary primary && strategy.rootName().equals(primary.strategy.rootName());
}
}
return member;
}
- private static @NonNull String packageString(final AbstractQName component) {
- // Replace dashes with dots, as dashes are not allowed in package names
+ // Replace dashes with dots, as dashes are not allowed in package names
+ static @NonNull String packageString(final AbstractQName component) {
return component.getLocalName().replace('-', '.');
}
}
*/
package org.opendaylight.mdsal.binding.generator.impl.reactor;
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.base.MoreObjects.ToStringHelper;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.AbstractQName;
-final class ModuleNamingStrategy extends ClassNamingStrategy {
- private final @NonNull AbstractQName name;
-
+@NonNullByDefault
+final class ModuleNamingStrategy extends YangIdentifierClassNamingStrategy {
ModuleNamingStrategy(final AbstractQName name) {
- this.name = requireNonNull(name);
- }
-
- @Override
- AbstractQName nodeIdentifier() {
- return name;
+ super(name);
}
@Override
- String simpleClassName() {
- return BindingMapping.getClassName(name.getLocalName());
- }
-
- @Override
- ClassNamingStrategy fallback() {
+ @Nullable ClassNamingStrategy fallback() {
return null;
}
-
- @Override
- ToStringHelper addToStringAttributes(final ToStringHelper helper) {
- return helper.add("localName", name.getLocalName());
- }
}
--- /dev/null
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.binding.generator.impl.reactor;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.base.MoreObjects.ToStringHelper;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
+import org.opendaylight.yangtools.yang.common.AbstractQName;
+
+/**
+ * A {@link ClassNamingStrategy} which is based on a YANG node identifier as captured in
+ * {@link AbstractQName#getLocalName()}.
+ */
+@NonNullByDefault
+abstract class YangIdentifierClassNamingStrategy extends ClassNamingStrategy {
+ private final AbstractQName nodeIdentifier;
+
+ YangIdentifierClassNamingStrategy(final AbstractQName nodeIdentifier) {
+ this.nodeIdentifier = requireNonNull(nodeIdentifier);
+ }
+
+ @Override
+ final String simpleClassName() {
+ return BindingMapping.getClassName(rootName());
+ }
+
+ @Override
+ final String rootName() {
+ return nodeIdentifier.getLocalName();
+ }
+
+ @Override
+ final String childPackage() {
+ return CollisionDomain.packageString(nodeIdentifier);
+ }
+
+ @Override
+ ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return helper.add("localName", rootName());
+ }
+}