package com.yoghurt.crypto.transactions.client.widget; import java.util.Map.Entry; import com.googlecode.gwt.crypto.bouncycastle.util.encoders.Hex; import com.yoghurt.crypto.transactions.client.util.block.BlockUtil; import com.yoghurt.crypto.transactions.client.util.misc.Color; import com.yoghurt.crypto.transactions.client.util.misc.ColorBuilder; import com.yoghurt.crypto.transactions.shared.util.NumberParseUtil; public class TargettedHashHexViewer extends HashHexViewer { private final Color[] colors = new Color[] { ColorBuilder.interpret("green", 0.2), ColorBuilder.interpret("3FFF00", 0.5), ColorBuilder.interpret("7FFF00", 0.6), ColorBuilder.interpret("BFFF00", 0.7), ColorBuilder.interpret("FFFF00", 0.75), ColorBuilder.interpret("FFBF00", 0.75), ColorBuilder.interpret("FF7F00", 0.75), ColorBuilder.interpret("FF3F00", 0.75), ColorBuilder.interpret("FF0000", 0.75) }; private byte[] target; public TargettedHashHexViewer() { super(); } public TargettedHashHexViewer(final Color color) { super(color); } public TargettedHashHexViewer(final Color color, final FieldContextFactory<Entry<byte[], byte[]>> factory) { super(color, factory); } @Override protected ContextField<Entry<byte[], byte[]>> createContextField(final Entry<byte[], byte[]> value, final Color color, final String text) { final byte counterPart = (byte) (target[fields.size()] & 0xFF); final int counterPartOnes = NumberParseUtil.countOnes(counterPart); return new ContextField<Entry<byte[], byte[]>>(value, color, text) { @Override public void setContent(final String text, final boolean animate) { super.setContent(text, animate); final byte[] decode = Hex.decode(text.getBytes()); final byte bite = (byte) (decode[0] & 0xFF); final int numberOfOnes = (bite & 0xFF) < (counterPart & 0xFF) ? 0 : NumberParseUtil.countOnes(bite & 0xFF); getElement().getStyle().setBackgroundColor(colors[Math.max(0, numberOfOnes - counterPartOnes)].getValue()); } }; } public void setDifficulty(final byte[] bits) { target = BlockUtil.getPoolDiffTarget(bits); clear(); } }