package edu.washington.cs.oneswarm.ui.gwt.client.newui.friends.wizard; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; public class PublicKeyColorPanel extends HorizontalPanel { private final int fieldNum; private final HorizontalPanel colorPanel = new HorizontalPanel(); public PublicKeyColorPanel(int fieldNum, String label) { // super(1, fieldNum); if (fieldNum > 16) { fieldNum = 16; } this.fieldNum = fieldNum; if (label != null) { super.add(new Label(label)); } colorPanel.setBorderWidth(1); super.add(colorPanel); super.setCellHorizontalAlignment(colorPanel, HorizontalPanel.ALIGN_RIGHT); } public void update(String publicKey) { publicKey = publicKey.replaceAll("\\s+", ""); colorPanel.clear(); int hash = publicKey.hashCode(); for (int i = 0; i < fieldNum * 2; i += 2) { int color = getBitValue(hash, i) + 2 * getBitValue(hash, i + 1); Label label = new Label("" + color); label.addStyleName("os-public-key-color-" + color); label.setWidth("100%"); label.setHeight("100%"); colorPanel.add(label); colorPanel.setCellWidth(label, "16px"); colorPanel.setCellHeight(label, "16px"); } } private static int getBitValue(int i, int pos) { int mask = 1; // (0b11); mask = mask << pos; i = i & mask; return i >> pos; } public static void main(String[] args) { test(0x0); test(0xFF); test(0xFFFF); test(0x7); test(0x3); } private static void test(int value) { System.out.print(value + ":\t 0b"); for (int j = 31; j >= 0; j--) { System.out.print("" + getBitValue(value, j)); } System.out.println(); } }