@Override public void erase() { //for export apps tiles are fully removed //tiles will be created during provisioning. tiles = EMPTY_DEVICE_TILES; if (templates != null) { for (TileTemplate tileTemplate : templates) { tileTemplate.erase(); } } }
private void preserveOldValueIfPossible(Tile[] existingTiles, Tile newTile) { for (Tile existingTile : existingTiles) { if (existingTile.templateId == newTile.templateId && newTile.updateIfSame(existingTile.deviceId, existingTile.dataStream)) { return; } } }
public boolean updateIfSame(int deviceId, short pin, PinType pinType, String value) { if (isSame(deviceId, pin, pinType)) { this.dataStream.value = value; return true; } return false; }
public static void messageReceived(ChannelHandlerContext ctx, MobileStateHolder state, StringMessage message) { String[] split = split3(message.body); if (split.length < 2) { throw new IllegalCommandException("Wrong income message format."); } int dashId = Integer.parseInt(split[0]); long widgetId = Long.parseLong(split[1]); long tileId = Long.parseLong(split[2]); User user = state.user; DashBoard dash = user.profile.getDashByIdOrThrow(dashId); Widget widget = dash.getWidgetByIdOrThrow(widgetId); if (!(widget instanceof DeviceTiles)) { throw new IllegalCommandException("Income widget id is not DeviceTiles."); } DeviceTiles deviceTiles = (DeviceTiles) widget; int existingTileIndex = deviceTiles.getTileTemplateIndexByIdOrThrow(tileId); log.debug("Deleting tile template dashId : {}, widgetId : {}, tileId : {}.", dash, widgetId, tileId); TileTemplate tileTemplate = deviceTiles.templates[existingTileIndex]; user.addEnergy(tileTemplate.getPrice()); deviceTiles.templates = ArrayUtil.remove(deviceTiles.templates, existingTileIndex, TileTemplate.class); deviceTiles.deleteDeviceTilesByTemplateId(tileId); user.profile.cleanPinStorageForTileTemplate(dash, tileTemplate, true); dash.updatedAt = System.currentTimeMillis(); ctx.writeAndFlush(ok(message.id), ctx.voidPromise()); }
@Override public int getPrice() { int sum = 1700; //price for DeviceTiles widget itself for (TileTemplate template : templates) { sum += template.getPrice(); } return sum; }
public TileTemplate getTileTemplateByIdOrThrow(long id) { return templates[getTileTemplateIndexByIdOrThrow(id)]; }
public Widget getWidgetByIdInDeviceTilesOrThrow(long id) { for (Widget widget : widgets) { if (widget instanceof DeviceTiles) { DeviceTiles deviceTiles = (DeviceTiles) widget; Widget widgetInDeviceTiles = deviceTiles.getWidgetById(id); if (widgetInDeviceTiles != null) { return widgetInDeviceTiles; } } } throw new IllegalCommandException("Widget with passed id not found."); }
private void processDeviceTile(Channel channel, DeviceTiles deviceTiles, int deviceId, long now) { for (Tile tile : deviceTiles.tiles) { if (tile.deviceId == deviceId && tile.isTicked(now)) { TileTemplate tileTemplate = deviceTiles.getTileTemplateById(tile.templateId); if (tileTemplate != null) { for (Widget tileWidget : tileTemplate.widgets) { if (tileWidget instanceof FrequencyWidget) { FrequencyWidget frequencyWidget = (FrequencyWidget) tileWidget; if (frequencyWidget.hasReadingInterval() && channel.isWritable()) { frequencyWidget.writeReadingCommand(channel); tickedWidgets++; } } } } } } }
Tile newTile = new Tile(deviceId, tileTemplate.id, null, newTileTemplate.dataStream == null ? null : new DataStream(newTileTemplate.dataStream) ); preserveOldValueIfPossible(existingTiles, newTile); list.add(newTile);
if (newTileTemplate.isEmptyTemplateId()) { newTileTemplate.templateId = "TMPL" + newTileTemplate.id; deviceTiles.recreateTilesIfNecessary(newTileTemplate, null);
private void cleanPinStorage(int dashId, DeviceTiles deviceTiles, boolean removeProperties) { for (Tile tile : deviceTiles.tiles) { if (tile != null && tile.isValidDataStream()) { DataStream dataStream = tile.dataStream; pinsStorage.remove(new DashPinStorageKey(dashId, tile.deviceId, dataStream.pinType, dataStream.pin)); if (removeProperties) { for (WidgetProperty widgetProperty : WidgetProperty.getValues()) { pinsStorage.remove(new DashPinPropertyStorageKey(dashId, tile.deviceId, dataStream.pinType, dataStream.pin, widgetProperty)); } } } } }
@Override public void updateValue(Widget oldWidget) { if (oldWidget instanceof DeviceTiles) { DeviceTiles oldDeviceTiles = (DeviceTiles) oldWidget; this.tiles = oldDeviceTiles.tiles; for (TileTemplate tileTemplate : templates) { TileTemplate oldTileTemplate = oldDeviceTiles.getTileTemplateById(tileTemplate.id); if (oldTileTemplate != null) { tileTemplate.deviceIds = oldTileTemplate.deviceIds; } } } }
@Override public void deleteDevice(int deviceId) { Tile[] localTiles = this.tiles; int index = getTileIndexByDeviceId(localTiles, deviceId); if (index != -1) { this.tiles = localTiles.length == 1 ? EMPTY_DEVICE_TILES : ArrayUtil.remove(localTiles, index, Tile.class); } for (TileTemplate tileTemplate : this.templates) { tileTemplate.deviceIds = ArrayUtil.deleteFromArray(tileTemplate.deviceIds, deviceId); } } }
private void sendTemplateIdEmail(ChannelHandlerContext ctx, User user, String[] split, int msgId) { int dashId = Integer.parseInt(split[1]); DashBoard dash = user.profile.getDashByIdOrThrow(dashId); long widgetId = Long.parseLong(split[2]); DeviceTiles deviceTiles = (DeviceTiles) dash.getWidgetById(widgetId); long templateId = Long.parseLong(split[3]); TileTemplate template = deviceTiles.getTileTemplateByIdOrThrow(templateId); String subj = "Template ID for " + template.name; String body = templateIdMailBody .replace(Placeholders.TEMPLATE_NAME, template.name) .replace(Placeholders.TEMPLATE_ID, template.templateId); log.trace("Sending template id mail for user {}, with id : '{}'.", user.email, templateId); mail(ctx.channel(), user.email, subj, body, msgId, true); }
public boolean updateIfSame(int deviceId, DataStream dataStream) { if (dataStream != null) { return updateIfSame(deviceId, dataStream.pin, dataStream.pinType, dataStream.value); } return false; }
@Override public boolean isSame(int deviceId, short pin, PinType pinType) { for (Tile tile : tiles) { if (tile.isSame(deviceId, pin, pinType)) { return true; } } return false; }
@Override public void sendHardSync(ChannelHandlerContext ctx, int msgId, int deviceId) { for (Tile tile : tiles) { if (tile.deviceId == deviceId && tile.isValidDataStream() && tile.dataStream.isNotEmpty()) { String body = tile.dataStream.makeHardwareBody(); if (body != null) { ctx.write(makeUTF8StringMessage(HARDWARE, msgId, body), ctx.voidPromise()); } } } }
@Override public boolean updateIfSame(int deviceId, short pin, PinType pinType, String value) { for (Tile tile : tiles) { if (tile.updateIfSame(deviceId, pin, pinType, value)) { return true; } } return false; }
public String getValue(int deviceId, short pin, PinType pinType) { for (Tile tile : tiles) { if (tile.isSame(deviceId, pin, pinType)) { return tile.dataStream.value; } } return null; }
@Override public void sendAppSync(Channel appChannel, int dashId, int targetId, boolean useNewSyncFormat) { for (Tile tile : tiles) { if ((targetId == ANY_TARGET || tile.deviceId == targetId) && tile.isValidDataStream() && tile.dataStream.isNotEmpty()) { String hardBody = tile.dataStream.makeHardwareBody(); String body = prependDashIdAndDeviceId(dashId, tile.deviceId, hardBody); appChannel.write(makeUTF8StringMessage(APP_SYNC, SYNC_DEFAULT_MESSAGE_ID, body)); } } }