Skip to content

Commit

Permalink
Add MountPointContext.of(EffectiveModelContext)
Browse files Browse the repository at this point in the history
Rather than having a dedicated public class for the common case,
introduce a static of() method, which hides the implementation.

JIRA: YANGTOOLS-1172
Change-Id: Ib82d078c599f09f31de650aae0c096044c70847c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
  • Loading branch information
rovarga committed May 16, 2023
1 parent fc79881 commit 93e320e
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@
* 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.yangtools.yang.data.codec.xml;

import static java.util.Objects.requireNonNull;

import com.google.common.annotations.Beta;
import java.util.List;
import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext;
Expand Down Expand Up @@ -79,7 +77,7 @@ public static XmlCodecFactory create(final MountPointContext context) {
* @return A codec factory instance.
*/
public static XmlCodecFactory create(final EffectiveModelContext context) {
return create(new EmptyMountPointContext(context));
return create(MountPointContext.of(context));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public final MountPointContext createContext(final Map<ContainerName, MountPoint

final EffectiveModelContext schemaContext = bindLibrary(entry.getKey(), libContainer);
if (schemaMounts == null) {
return new EmptyMountPointContext(schemaContext);
return MountPointContext.of(schemaContext);
}

final NormalizedNode mountData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,16 @@ protected final MountPointContext createMountPointContext(final EffectiveModelCo
final ContainerNode mountData) {
checkArgument(SCHEMA_MOUNTS.equals(mountData.getIdentifier()), "Unexpected top-level container %s", mountData);

final DataContainerChild mountPoint = mountData.childByArg(MOUNT_POINT);
final var mountPoint = mountData.childByArg(MOUNT_POINT);
if (mountPoint == null) {
LOG.debug("mount-point list not present in {}", mountData);
return new EmptyMountPointContext(schemaContext);
return MountPointContext.of(schemaContext);
}
if (!(mountPoint instanceof MapNode mapMountPoint)) {
throw new IllegalArgumentException("mount-point list " + mountPoint + " is not a MapNode");
}
checkArgument(mountPoint instanceof MapNode, "mount-point list %s is not a MapNode", mountPoint);

return new ImmutableMountPointContext(schemaContext, ((MapNode) mountPoint).body().stream().map(entry -> {
return new ImmutableMountPointContext(schemaContext, mapMountPoint.body().stream().map(entry -> {
final String moduleName = entry.findChildByArg(MODULE).map(mod -> {
checkArgument(mod instanceof LeafNode, "Unexpected module leaf %s", mod);
final Object value = mod.body();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,18 @@
* 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.yangtools.rfc8528.data.util;
package org.opendaylight.yangtools.yang.data.api.schema;

import com.google.common.annotations.Beta;
import java.util.Optional;
import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext;
import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider;

/**
* A simple {@link MountPointContext} which does not contain any mount points.
*/
@Beta
public final class EmptyMountPointContext extends AbstractEffectiveModelContextProvider implements MountPointContext {
public EmptyMountPointContext(final EffectiveModelContext modelContext) {
final class EmptyMountPointContext extends AbstractEffectiveModelContextProvider implements MountPointContext {
EmptyMountPointContext(final EffectiveModelContext modelContext) {
super(modelContext);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;

/**
Expand Down Expand Up @@ -65,4 +66,14 @@ public interface MountPointContext extends EffectiveModelContextProvider {
* @throws NullPointerException if label is null
*/
Optional<MountPointContextFactory> findMountPoint(@NonNull MountPointLabel label);

/**
* Return an empty {@link MountPointContext} with the specified {@link EffectiveModelContext}.
*
* @param modelContext Backing {@link EffectiveModelContext}
* @return A {@link MountPointContext} containing no {@link MountPointContextFactory}.
*/
static @NonNull MountPointContext of(final @NonNull EffectiveModelContext modelContext) {
return new EmptyMountPointContext(modelContext);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@

import com.google.common.annotations.Beta;
import java.io.IOException;
import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext;
import org.opendaylight.yangtools.yang.data.api.schema.MountPointChild;
import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;

/**
Expand All @@ -22,9 +21,9 @@
public abstract class AbstractMountPointChild implements MountPointChild {
@Override
public final NormalizedNode normalizeTo(final EffectiveModelContext schemaContext) throws IOException {
final NormalizedNodeResult result = new NormalizedNodeResult();
final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
writeTo(streamWriter, new EmptyMountPointContext(schemaContext));
final var result = new NormalizedNodeResult();
final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
writeTo(streamWriter, MountPointContext.of(schemaContext));
return result.getResult();
}
}

0 comments on commit 93e320e

Please sign in to comment.