package mil.nga.giat.geowave.adapter.vector.render; import java.awt.AlphaComposite; import java.awt.Composite; import java.nio.ByteBuffer; import org.geotools.renderer.composite.BlendComposite; import org.geotools.renderer.composite.BlendComposite.BlendingMode; import mil.nga.giat.geowave.core.index.Persistable; public class PersistableComposite implements Persistable { private boolean isBlend = true; private int blendModeOrAlphaRule = 0; private float alpha = 1f; protected PersistableComposite() {} public PersistableComposite( final Composite composite ) { if (composite instanceof BlendComposite) { isBlend = true; blendModeOrAlphaRule = ((BlendComposite) composite).getBlend().ordinal(); alpha = ((BlendComposite) composite).getAlpha(); } else if (composite instanceof AlphaComposite) { isBlend = false; blendModeOrAlphaRule = ((AlphaComposite) composite).getRule(); alpha = ((AlphaComposite) composite).getAlpha(); } } public Composite getComposite() { if (isBlend) { return BlendComposite.getInstance( BlendingMode.values()[blendModeOrAlphaRule], alpha); } else { return AlphaComposite.getInstance( blendModeOrAlphaRule, alpha); } } @Override public byte[] toBinary() { final ByteBuffer buf = ByteBuffer.allocate(9); buf.put(isBlend ? (byte) 0 : (byte) 1); buf.putInt(blendModeOrAlphaRule); buf.putFloat(alpha); return buf.array(); } @Override public void fromBinary( final byte[] bytes ) { final ByteBuffer buf = ByteBuffer.wrap(bytes); isBlend = (buf.get() == 0); blendModeOrAlphaRule = buf.getInt(); alpha = buf.getFloat(); } }