/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.zeppelin.notebook.repo.zeppelinhub.websocket.utils; import java.util.HashMap; import org.apache.commons.lang.StringUtils; import org.apache.zeppelin.notebook.repo.zeppelinhub.model.UserTokenContainer; import org.apache.zeppelin.notebook.repo.zeppelinhub.websocket.ZeppelinhubClient; import org.apache.zeppelin.notebook.repo.zeppelinhub.websocket.protocol.ZeppelinHubOp; import org.apache.zeppelin.notebook.repo.zeppelinhub.websocket.protocol.ZeppelinhubMessage; import org.apache.zeppelin.notebook.socket.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Helper class. * */ public class ZeppelinhubUtils { private static final Logger LOG = LoggerFactory.getLogger(ZeppelinhubUtils.class); public static String liveMessage(String token) { if (StringUtils.isBlank(token)) { LOG.error("Cannot create Live message: token is null or empty"); return ZeppelinhubMessage.EMPTY.serialize(); } HashMap<String, Object> data = new HashMap<>(); data.put("token", token); return ZeppelinhubMessage .newMessage(ZeppelinHubOp.LIVE, data, new HashMap<String, String>()) .serialize(); } public static String deadMessage(String token) { if (StringUtils.isBlank(token)) { LOG.error("Cannot create Dead message: token is null or empty"); return ZeppelinhubMessage.EMPTY.serialize(); } HashMap<String, Object> data = new HashMap<>(); data.put("token", token); return ZeppelinhubMessage .newMessage(ZeppelinHubOp.DEAD, data, new HashMap<String, String>()) .serialize(); } public static String pingMessage(String token) { if (StringUtils.isBlank(token)) { LOG.error("Cannot create Ping message: token is null or empty"); return ZeppelinhubMessage.EMPTY.serialize(); } HashMap<String, Object> data = new HashMap<>(); data.put("token", token); return ZeppelinhubMessage .newMessage(ZeppelinHubOp.PING, data, new HashMap<String, String>()) .serialize(); } public static ZeppelinHubOp toZeppelinHubOp(String text) { ZeppelinHubOp hubOp = null; try { hubOp = ZeppelinHubOp.valueOf(text); } catch (IllegalArgumentException e) { // in case of non Hub op } return hubOp; } public static boolean isZeppelinHubOp(String text) { return (toZeppelinHubOp(text) != null); } public static Message.OP toZeppelinOp(String text) { Message.OP zeppelinOp = null; try { zeppelinOp = Message.OP.valueOf(text); } catch (IllegalArgumentException e) { // in case of non Hub op } return zeppelinOp; } public static boolean isZeppelinOp(String text) { return (toZeppelinOp(text) != null); } public static void userLoginRoutine(String username) { LOG.debug("Executing user login routine"); String token = UserTokenContainer.getInstance().getUserToken(username); UserTokenContainer.getInstance().setUserToken(username, token); String msg = ZeppelinhubUtils.liveMessage(token); ZeppelinhubClient.getInstance() .send(msg, token); } public static void userLogoutRoutine(String username) { LOG.debug("Executing user logout routine"); String token = UserTokenContainer.getInstance().removeUserToken(username); String msg = ZeppelinhubUtils.deadMessage(token); ZeppelinhubClient.getInstance() .send(msg, token); ZeppelinhubClient.getInstance().removeSession(token); } public static void userSwitchTokenRoutine(String username, String originToken, String targetToken) { String offMsg = ZeppelinhubUtils.deadMessage(originToken); ZeppelinhubClient.getInstance().send(offMsg, originToken); ZeppelinhubClient.getInstance().removeSession(originToken); String onMsg = ZeppelinhubUtils.liveMessage(targetToken); ZeppelinhubClient.getInstance().send(onMsg, targetToken); } }