public static void messageReceived(ChannelHandlerContext ctx, MobileStateHolder state, StringMessage message, int maxWidgetSize) { var appString = message.body; if (appString == null || appString.isEmpty()) { throw new IllegalCommandException("Income app message is empty."); } if (appString.length() > maxWidgetSize) { throw new NotAllowedException("App is larger then limit.", message.id); } var newApp = JsonParser.parseApp(appString, message.id); newApp.id = AppNameUtil.generateAppId(); if (newApp.isNotValid()) { throw new NotAllowedException("App is not valid.", message.id); } log.debug("Creating new app {}.", newApp); var user = state.user; if (user.profile.apps.length > 25) { throw new NotAllowedException("App limit is reached.", message.id); } for (App app : user.profile.apps) { if (app.id.equals(newApp.id)) { throw new NotAllowedException("App with same id already exists.", message.id); } } user.profile.apps = ArrayUtil.add(user.profile.apps, newApp, App.class); user.lastModifiedTs = System.currentTimeMillis(); ctx.writeAndFlush(makeUTF8StringMessage(CREATE_APP, message.id, JsonParser.toJson(newApp)), ctx.voidPromise()); }