/** * {@inheritDoc } * * @return {@inheritDoc } * @throws NotAvailableException {@inheritDoc } */ @Override protected ColorState getNextServiceState() throws NotAvailableException { return ColorState.newBuilder().setColor(Color.newBuilder().setHsbColor(HSBColorType.HSBColor.newBuilder() .setBrightness(RANDOM.nextInt(100)) .setSaturation(RANDOM.nextInt(100)) .setHue(RANDOM.nextInt(360)).build()).build()).build(); } }
public static ColorState transform(final HSBType.HSB hsbColor) throws CouldNotTransformException { try { HSBColor hsbColorBuilder = HSBColor.newBuilder().setHue(hsbColor.getHue()).setSaturation(hsbColor.getSaturation()).setBrightness(hsbColor.getBrightness()).build(); Color color = Color.newBuilder().setHsbColor(hsbColorBuilder).setType(Color.Type.HSB).build(); return ColorState.newBuilder().setColor(color).build(); } catch (Exception ex) { throw new CouldNotTransformException("Could not transform " + HSBType.HSB.class.getName() + " to " + ColorState.class.getName() + "!", ex); } }
@Override public ColorState getColorState(final UnitType unitType) throws NotAvailableException { try { double averageRed = 0; double averageGreen = 0; double averageBlue = 0; int amount = getColorStateOperationServices().size(); long timestamp = 0; Collection<ColorStateOperationService> colorStateOperationServiceCollection = getServices(unitType); for (ColorStateOperationService service : colorStateOperationServiceCollection) { if (!((UnitRemote) service).isDataAvailable()) { amount--; continue; } RGBColor rgbColor = HSBColorToRGBColorTransformer.transform(service.getColorState().getColor().getHsbColor()); averageRed += rgbColor.getRed(); averageGreen += rgbColor.getGreen(); averageBlue += rgbColor.getBlue(); timestamp = Math.max(timestamp, service.getColorState().getTimestamp().getTime()); } averageRed = averageRed / amount; averageGreen = averageGreen / amount; averageBlue = averageBlue / amount; HSBColor hsbColor = HSBColorToRGBColorTransformer.transform(RGBColor.newBuilder().setRed((int) averageRed).setGreen((int) averageGreen).setBlue((int) averageBlue).build()); return TimestampProcessor.updateTimestamp(timestamp, ColorState.newBuilder().setColor(ColorType.Color.newBuilder().setType(ColorType.Color.Type.HSB).setHsbColor(hsbColor)), TimeUnit.MICROSECONDS, logger).build(); } catch (CouldNotTransformException ex) { throw new NotAvailableException("Could not transform from HSB to RGB or vice-versa!", ex); } }
default public Future<ActionFuture> setColor(final Color color) throws CouldNotPerformException { return setColorState(ColorState.newBuilder().setColor(color).build()); }