blob: dd0be684c1f6aaab79ea993483634368e744ceff [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.rep.utilint;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ByteChannel;
import com.sleepycat.je.rep.net.DataChannel;
import com.sleepycat.je.rep.impl.node.NameIdPair;
/**
* Packages a DataChannel and a NameIdPair together so that logging
* messages can show the node name instead of the channel toString();
*/
public class NamedChannel implements ByteChannel {
private NameIdPair nameIdPair;
protected final DataChannel channel;
public NamedChannel(DataChannel channel, NameIdPair nameIdPair) {
this.channel = channel;
this.nameIdPair = nameIdPair;
}
/*
* NameIdPair unknown at this time.
*/
public NamedChannel(DataChannel channel) {
this.channel = channel;
this.nameIdPair = NameIdPair.NULL;
ensureChannelBlocking();
}
public void setNameIdPair(NameIdPair nameIdPair) {
this.nameIdPair = nameIdPair;
ensureChannelBlocking();
}
public NameIdPair getNameIdPair() {
return nameIdPair;
}
public DataChannel getChannel() {
return channel;
}
@Override
public String toString() {
if (getNameIdPair() == null) {
return getChannel().toString();
}
return "(" + getNameIdPair() + ")" + getChannel();
}
/*
* The following ByteChannel implementation methods delegate to the wrapped
* channel object.
*/
@Override
public int read(ByteBuffer dst) throws IOException {
return channel.read(dst);
}
@Override
public void close() throws IOException {
channel.close();
}
@Override
public boolean isOpen() {
return channel.isOpen();
}
@Override
public int write(ByteBuffer src) throws IOException {
return channel.write(src);
}
private void ensureChannelBlocking() {
if (!channel.isBlocking()) {
throw new IllegalStateException(
"Only blocking channel can be used to " +
"construct NamedChannel");
}
}
}