package com.yoghurt.crypto.transactions.client.widget;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Map.Entry;
import com.yoghurt.crypto.transactions.client.i18n.M;
import com.yoghurt.crypto.transactions.client.util.block.BlockUtil;
import com.yoghurt.crypto.transactions.client.util.misc.Color;
public class BitsTargetHexViewer extends HexViewer<byte[]> {
private Color color;
public static enum TYPE {
/**
* Pool difficulty, non-truncated; 0xFF after first 3 byte
*/
PDIFF,
/**
* Actual difficulty, truncated; 0x00 after first 3 byte
*/
BDIFF;
}
public BitsTargetHexViewer() {
this(null);
}
public BitsTargetHexViewer(final Color color) {
this(color, new TextContextFactory<Entry<byte[], byte[]>>(M.messages().blockBitsTargetExplain()));
}
public BitsTargetHexViewer(final Color color, final FieldContextFactory<Entry<byte[], byte[]>> factory) {
super(factory);
this.color = color;
}
public void setBits(final byte[] bits) {
setBits(bits, TYPE.PDIFF);
}
public void setBits(final byte[] bits, final TYPE type) {
if(bits == null || bits.length != BlockUtil.BITS_MANTISSA_LENGTH + 1) {
return;
}
final byte[] target;
switch(type) {
case BDIFF:
target = BlockUtil.getBitcoinDiffTarget(bits);
break;
default:
case PDIFF:
target = BlockUtil.getPoolDiffTarget(bits);
break;
}
final ArrayList<Entry<byte[], byte[]>> lst = new ArrayList<Entry<byte[], byte[]>>();
for(final byte bite : target) {
lst.add(new AbstractMap.SimpleEntry<byte[], byte[]>(target, new byte[] { bite }));
}
setValue(lst);
}
@Override
protected Color getFieldColor(final Entry<byte[], byte[]> value) {
return color;
}
@Override
protected byte[] getBytesForValue(final Entry<byte[], byte[]> value) {
return value.getValue();
}
public void setColor(final Color color) {
this.color = color;
}
}