Add XMLNamespace
[yangtools.git] / yang / yang-data-util / src / main / java / org / opendaylight / yangtools / yang / data / util / ModuleStringIdentityrefCodec.java
index d42bb3ac10e398da2d510d4dbbbae4df0544630e..30573d92574e5e0136d7c9bbb3e108303b3890af 100644 (file)
@@ -9,29 +9,42 @@ package org.opendaylight.yangtools.yang.data.util;
 
 import static java.util.Objects.requireNonNull;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.net.URI;
+import com.google.common.annotations.Beta;
 import java.util.Iterator;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
-public abstract class ModuleStringIdentityrefCodec extends AbstractModuleStringIdentityrefCodec {
-    // FIXME: 3.0.0: hide these fields
-    protected final SchemaContext context;
-    @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    protected final QNameModule parentModuleQname;
+/**
+ * Base class for implementing identityref codecs on based on module names.
+ */
+@Beta
+public abstract class ModuleStringIdentityrefCodec extends AbstractModuleStringIdentityrefCodec
+        implements EffectiveModelContextProvider {
+    private final EffectiveModelContext context;
+    private final QNameModule parentModule;
 
-    protected ModuleStringIdentityrefCodec(@Nonnull final SchemaContext context,
-            @Nonnull final QNameModule parentModule) {
+    protected ModuleStringIdentityrefCodec(final @NonNull EffectiveModelContext context,
+            final @NonNull QNameModule parentModule) {
         this.context = requireNonNull(context);
-        this.parentModuleQname = requireNonNull(parentModule);
+        this.parentModule = requireNonNull(parentModule);
+    }
+
+    @Override
+    public final EffectiveModelContext getEffectiveModelContext() {
+        return context;
+    }
+
+    protected final QNameModule getParentModule() {
+        return parentModule;
     }
 
     @Override
-    protected String prefixForNamespace(@Nonnull final URI namespace) {
-        final Iterator<Module> modules = context.findModules(namespace).iterator();
+    protected String prefixForNamespace(final XMLNamespace namespace) {
+        final Iterator<? extends Module> modules = context.findModules(namespace).iterator();
         return modules.hasNext() ? modules.next().getName() : null;
     }
 }