package com.openkm.frontend.client.widget; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.contants.service.RPCService; import com.openkm.frontend.client.contants.ui.UIDockPanelConstants; import com.openkm.frontend.client.extension.widget.userinfo.UserInfoExtension; import com.openkm.frontend.client.service.OKMChatService; import com.openkm.frontend.client.service.OKMChatServiceAsync; import com.openkm.frontend.client.util.OKMBundleResources; import com.openkm.frontend.client.util.Util; import com.openkm.frontend.client.widget.chat.ChatRoomDialogBox; import com.openkm.frontend.client.widget.chat.ChatRoomPopup; import com.openkm.frontend.client.widget.chat.OnlineUsersPopup; public class UserInfo extends Composite { private final OKMChatServiceAsync chatService = (OKMChatServiceAsync) GWT.create(OKMChatService.class); private static final int USERS_IN_ROOM_REFRESHING_TIME = 1000; private static final int NEW_ROOM_REFRESHING_TIME = 200; private HorizontalPanel panel; private Image advertisement; private HTML user; private String msg = ""; private Image img; private HTML userRepositorySize; private Image imgRepositorySize; private HTML lockedDocuments; private Image imgLockedDocuments; private HTML checkoutDocuments; private Image imgCheckoutDocuments; //added by vissu on feb19 for zohoapi private HTML zohoDocuments; private Image imgZohoDocuments; private HTML subscriptions; private Image imgSubscriptions; private HTML newDocuments; private Image imgNewsDocuments; private HTML newWorkflowTasks; private Image imgWorkflowTasks; private HTML newWorkflowPooledTasks; private Image imgWorkflowPooledTasks; private Image imgChat; private Image imgNewChatRoom; private Image imgChatSeparator; private boolean chatConnected = false; private HTML usersConnected; private List<String> connectUsersList; private List<ChatRoomDialogBox> chatRoomList; private Image imgUserQuota; private boolean userQuota = false; private long quotaLimit = 0; private boolean quotaExceeded = false; private HTML quotaUsed; private int percent = 0; private List<UserInfoExtension> widgetExtensionList; /** * UserInfo */ public UserInfo() { widgetExtensionList = new ArrayList<UserInfoExtension>(); connectUsersList = new ArrayList<String>(); chatRoomList = new ArrayList<ChatRoomDialogBox>(); img = new Image(OKMBundleResources.INSTANCE.openkmConnected()); panel = new HorizontalPanel(); panel.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER); panel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE); user = new HTML(""); userRepositorySize = new HTML(""); usersConnected = new HTML(""); lockedDocuments = new HTML(""); checkoutDocuments = new HTML(""); zohoDocuments = new HTML(""); //added by vissu on feb19 for zohoapi subscriptions = new HTML(""); newDocuments = new HTML(""); newWorkflowTasks = new HTML(""); newWorkflowPooledTasks = new HTML(""); quotaUsed = new HTML(""); quotaUsed.setVisible(false); imgRepositorySize = new Image(OKMBundleResources.INSTANCE.repositorySize()); imgUserQuota = new Image(OKMBundleResources.INSTANCE.quota1()); imgChat = new Image(OKMBundleResources.INSTANCE.chatDisconnected()); imgChatSeparator = new Image(OKMBundleResources.INSTANCE.separator()); imgNewChatRoom = new Image(OKMBundleResources.INSTANCE.newChatRoom()); imgLockedDocuments = new Image(OKMBundleResources.INSTANCE.lock()); imgCheckoutDocuments = new Image(OKMBundleResources.INSTANCE.checkout()); imgZohoDocuments = new Image(OKMBundleResources.INSTANCE.zoho()); //added by vissu on feb19 for zohoapi imgSubscriptions = new Image(OKMBundleResources.INSTANCE.subscribed()); imgNewsDocuments = new Image(OKMBundleResources.INSTANCE.news()); imgWorkflowTasks = new Image(OKMBundleResources.INSTANCE.workflowTasks()); imgWorkflowPooledTasks = new Image(OKMBundleResources.INSTANCE.workflowPooledTasks()); imgRepositorySize.setVisible(false); imgUserQuota.setVisible(false); imgChat.setVisible(false); imgChatSeparator.setVisible(false); usersConnected.setVisible(false); imgNewChatRoom.setVisible(false); imgLockedDocuments.setVisible(false); imgCheckoutDocuments.setVisible(false); imgZohoDocuments.setVisible(false); //added by vissu on feb19 for zohoapi imgSubscriptions.setVisible(false); imgNewsDocuments.setVisible(false); imgWorkflowTasks.setVisible(false); imgWorkflowPooledTasks.setVisible(false); imgChat.setTitle(Main.i18n("user.info.chat.connect")); imgUserQuota.setTitle(Main.i18n("user.info.user.quota")); imgNewChatRoom.setTitle(Main.i18n("user.info.chat.new.room")); imgLockedDocuments.setTitle(Main.i18n("user.info.locked.actual")); imgCheckoutDocuments.setTitle(Main.i18n("user.info.checkout.actual")); imgZohoDocuments.setTitle(Main.i18n("user.info.zoho.actual")); //added by vissu on feb19 for zohoapi imgSubscriptions.setTitle(Main.i18n("user.info.subscription.actual")); imgNewsDocuments.setTitle(Main.i18n("user.info.news.new")); imgWorkflowTasks.setTitle(Main.i18n("user.info.workflow.pending.tasks")); imgWorkflowPooledTasks.setTitle(Main.i18n("user.info.workflow.pending.pooled.tasks")); imgLockedDocuments.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().mainPanel.topPanel.tabWorkspace.changeSelectedTab(UIDockPanelConstants.DASHBOARD); Main.get().mainPanel.dashboard.horizontalToolBar.showUserView(); } }); imgCheckoutDocuments.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().mainPanel.topPanel.tabWorkspace.changeSelectedTab(UIDockPanelConstants.DASHBOARD); Main.get().mainPanel.dashboard.horizontalToolBar.showUserView(); } }); //added by vissu on feb19 for zohoapi imgZohoDocuments.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { } }); imgSubscriptions.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().mainPanel.topPanel.tabWorkspace.changeSelectedTab(UIDockPanelConstants.DASHBOARD); Main.get().mainPanel.dashboard.horizontalToolBar.showUserView(); } }); imgNewsDocuments.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().mainPanel.topPanel.tabWorkspace.changeSelectedTab(UIDockPanelConstants.DASHBOARD); Main.get().mainPanel.dashboard.horizontalToolBar.showNewsView(); } }); imgWorkflowTasks.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().mainPanel.topPanel.tabWorkspace.changeSelectedTab(UIDockPanelConstants.DASHBOARD); Main.get().mainPanel.dashboard.horizontalToolBar.showWorkflowView(); } }); imgWorkflowPooledTasks.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().mainPanel.topPanel.tabWorkspace.changeSelectedTab(UIDockPanelConstants.DASHBOARD); Main.get().mainPanel.dashboard.horizontalToolBar.showWorkflowView(); } }); imgChat.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (!chatConnected) { loginChat(); } else { chatConnected = false; // Trying disable other RPC calls logoutChat(); } } }); imgNewChatRoom.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().onlineUsersPopup.setAction(OnlineUsersPopup.ACTION_NEW_CHAT); Main.get().onlineUsersPopup.center(); Main.get().onlineUsersPopup.refreshOnlineUsers(); } }); advertisement = new Image(OKMBundleResources.INSTANCE.warning()); advertisement.setVisible(false); advertisement.addClickHandler( new ClickHandler() { @Override public void onClick(ClickEvent event) { Main.get().msgPopup.show("openkm.update.available", msg, 400, 200); } }); panel.add(advertisement); panel.add(new HTML(" ")); panel.add(img); panel.add(new HTML(" ")); panel.add(user); panel.add(new Image(OKMBundleResources.INSTANCE.separator())); //commented below by vissu on nov 20 to hide vault size /*panel.add(new HTML(" ")); panel.add(imgRepositorySize); panel.add(new HTML(" ")); panel.add(userRepositorySize); panel.add(new HTML(" ")); panel.add(imgUserQuota); panel.add(new HTML(" ")); panel.add(quotaUsed); panel.add(new HTML(" ")); panel.add(new Image(OKMBundleResources.INSTANCE.separator()));*/ panel.add(new HTML(" ")); panel.add(imgChat); panel.add(new HTML(" ")); panel.add(imgNewChatRoom); panel.add(new HTML(" ")); panel.add(usersConnected); panel.add(new HTML(" ")); panel.add(imgChatSeparator); panel.add(new HTML(" ")); panel.add(imgLockedDocuments); panel.add(new HTML(" ")); panel.add(lockedDocuments); panel.add(new HTML(" ")); panel.add(imgCheckoutDocuments); panel.add(new HTML(" ")); panel.add(checkoutDocuments); panel.add(new HTML(" ")); //added by vissu on feb19 for zohoapi panel.add(imgZohoDocuments); panel.add(new HTML(" ")); panel.add(zohoDocuments); panel.add(new HTML(" ")); panel.add(imgSubscriptions); panel.add(new HTML(" ")); panel.add(subscriptions); panel.add(new HTML(" ")); panel.add(imgNewsDocuments); panel.add(newDocuments); panel.add(new HTML(" ")); panel.add(imgWorkflowTasks); panel.add(newWorkflowTasks); panel.add(new HTML(" ")); panel.add(imgWorkflowPooledTasks); panel.add(newWorkflowPooledTasks); panel.add(new HTML(" ")); imgLockedDocuments.setStyleName("okm-Hyperlink"); imgCheckoutDocuments.setStyleName("okm-Hyperlink"); imgZohoDocuments.setStyleName("okm-Hyperlink"); //added by vissu on feb19 for zohoapi imgSubscriptions.setStyleName("okm-Hyperlink"); imgNewsDocuments.setStyleName("okm-Hyperlink"); imgWorkflowTasks.setStyleName("okm-Hyperlink"); imgWorkflowPooledTasks.setStyleName("okm-Hyperlink"); imgChat.setStyleName("okm-Hyperlink"); imgNewChatRoom.setStyleName("okm-Hyperlink"); initWidget(panel); } /** * Sets the user value * * @param user The user value */ public void setUser(String user, boolean isAdmin) { this.user.setHTML(" "+Main.i18n("general.connected")+" "+user+ " "); //below condition commnted by vissu on 27oct //if (isAdmin) { this.user.addStyleName("okm-Input-System"); // } } /** * Sets the repository size * * @param size */ public void setUserRepositorySize(double size) { imgRepositorySize.setVisible(true); userRepositorySize.setHTML(" "+Util.formatSize(size)+ " "); if (userQuota) { if (size>0) { if (size>=quotaLimit) { quotaExceeded = true; percent=100; imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota6()); } else { // Calculating % percent = new Double((size*100)/quotaLimit).intValue(); if (percent==0) { percent=1; } else if (percent>100) { percent=100; } if (percent<=20) { imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota1()); } else if (percent<=40) { imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota2()); } else if (percent<=60) { imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota3()); } else if (percent<=80) { imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota4()); } else { imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota5()); } } } else { quotaExceeded = false; imgUserQuota.setResource(OKMBundleResources.INSTANCE.quota1()); } quotaUsed.setHTML(percent + "%"); } } /** * Sets the locked documents * * @param value */ public void setLockedDocuments(int value) { imgLockedDocuments.setVisible(true); lockedDocuments.setHTML(" "+value+ " "); } /**e * Sets the checkout documents * * @param value */ public void setCheckoutDocuments(int value) { imgCheckoutDocuments.setVisible(true); checkoutDocuments.setHTML(" "+value+ " "); } //added by vissu on feb19 for zohoapi public void setZohoDocuments(int value) { imgZohoDocuments.setVisible(true); zohoDocuments.setHTML(" "+value+ " "); } /** * Sets the subscriptions documents and folders * * @param value */ public void setSubscriptions(int value) { imgSubscriptions.setVisible(true); subscriptions.setHTML(" "+value+ " "); } /** * Sets the news documents * * @param value */ public void setNewsDocuments(int value) { //vissu touch to hide news on oct'9th /* imgNewsDocuments.setVisible(true); newDocuments.setHTML(" "+value+ " "); if (value>0) { imgNewsDocuments.setResource(OKMBundleResources.INSTANCE.newsAlert()); } else { imgNewsDocuments.setResource(OKMBundleResources.INSTANCE.news()); } */ } /** * Sets the news workflows * * @param value */ public void setNewsWorkflows(int value) { //vissu touch to hide wrokflow on oct'9th /* imgWorkflowTasks.setVisible(true); newWorkflowTasks.setHTML(" " + value + " "); if (value > 0) { imgWorkflowTasks.setResource(OKMBundleResources.INSTANCE.workflowTasksAlert()); } else { imgWorkflowTasks.setResource(OKMBundleResources.INSTANCE.workflowTasks()); } */ } /** * Sets the pooled task instances * * @param value */ public void setPooledTaskInstances(int value) { //vissu touch to hide WorkflowPooledTasks on oct'11th /* imgWorkflowPooledTasks.setVisible(true); newWorkflowPooledTasks.setHTML(" " + value + " "); if (value > 0) { imgWorkflowPooledTasks.setResource(OKMBundleResources.INSTANCE.workflowPooledTasksAlert()); } else { imgWorkflowPooledTasks.setResource(OKMBundleResources.INSTANCE.workflowPooledTasks()); } */ } /** * Sets the msg value * * @param msg The msg value */ public void setUpdateMessage(String msg) { if (msg!=null && !msg.equals("")) { advertisement.setVisible(true); this.msg = msg; } } /** * langRefresh */ public void langRefresh() { user.setHTML(" "+ Main.i18n("general.connected")+" "+Main.get().workspaceUserProperties.getUser() + " "); if (chatConnected) { imgChat.setTitle(Main.i18n("user.info.chat.disconnect")); usersConnected.setHTML(connectUsersList.size() + ""); } else { imgChat.setTitle(Main.i18n("user.info.chat.connect")); usersConnected.setHTML(""); } imgUserQuota.setTitle(Main.i18n("user.info.user.quota")); imgNewChatRoom.setTitle(Main.i18n("user.info.chat.new.room")); imgLockedDocuments.setTitle(Main.i18n("user.info.locked.actual")); imgCheckoutDocuments.setTitle(Main.i18n("user.info.checkout.actual")); imgZohoDocuments.setTitle(Main.i18n("user.info.zoho.actual")); //added by vissu on feb19 for zohoapi imgSubscriptions.setTitle(Main.i18n("user.info.subscription.actual")); imgNewsDocuments.setTitle(Main.i18n("user.info.news.new")); imgWorkflowTasks.setTitle(Main.i18n("user.info.workflow.pending.tasks")); imgWorkflowPooledTasks.setTitle(Main.i18n("user.info.workflow.pending.pooled.tasks")); quotaUsed.setHTML(percent + "%"); // Resfreshing actual chatrooms for (Iterator<ChatRoomDialogBox> it = chatRoomList.iterator(); it.hasNext();) { it.next().langRefresh(); } } /** * refreshConnectedUsers */ private void refreshConnectedUsers() { if (chatConnected) { ServiceDefTarget endPoint = (ServiceDefTarget) chatService; endPoint.setServiceEntryPoint(RPCService.ChatService); chatService.getLoggedUsers(new AsyncCallback<List<String>>() { @Override public void onSuccess(List<String> result) { connectUsersList = result; usersConnected.setHTML(connectUsersList.size() + ""); Timer timer = new Timer() { @Override public void run() { refreshConnectedUsers(); } }; timer.schedule(USERS_IN_ROOM_REFRESHING_TIME); // Each minute seconds refreshing connected users } @Override public void onFailure(Throwable caught) { Main.get().showError("GetLoggedUsers", caught); } }); } } /** * getPendingChatRoomUser */ private void getPendingChatRoomUser() { if (chatConnected) { ServiceDefTarget endPoint = (ServiceDefTarget) chatService; endPoint.setServiceEntryPoint(RPCService.ChatService); chatService.getPendingChatRoomUser(new AsyncCallback<List<String>>() { @Override public void onSuccess(List<String> result) { for (Iterator<String> it = result.iterator(); it.hasNext();) { String room = it.next(); ChatRoomPopup chatRoomPopup = new ChatRoomPopup("",room); chatRoomPopup.center(); chatRoomPopup.getPendingMessage(room); addChatRoom(chatRoomPopup); } Timer timer = new Timer() { @Override public void run() { getPendingChatRoomUser(); } }; timer.schedule(NEW_ROOM_REFRESHING_TIME); // Each minute seconds refreshing connected users } @Override public void onFailure(Throwable caught) { Main.get().showError("GetLoggedUsers", caught); } }); } } /** * getConnectedUserList * * @return */ public List<String> getConnectedUserList() { return connectUsersList; } /** * addChatRoom * * @param chatRoom */ public void addChatRoom(ChatRoomDialogBox chatRoom) { if (!chatRoomList.contains(chatRoom)) { chatRoomList.add(chatRoom); } } /** * removeChatRoom * * @param chatRoom */ public void removeChatRoom(ChatRoomDialogBox chatRoom) { if (chatRoomList.contains(chatRoom)) { chatRoomList.remove(chatRoom); } } /** * isConnectedToChat * * @return */ public boolean isConnectedToChat() { return chatConnected; } /** * getChatRoomList * * @return */ public List<ChatRoomDialogBox> getChatRoomList() { return chatRoomList; } /** * disconnectChat * * Used before logout ( in logout popup is made disconnection ) */ public void disconnectChat() { chatConnected = false; usersConnected.setVisible(false); imgNewChatRoom.setVisible(false); usersConnected.setHTML(""); imgChat.setResource(OKMBundleResources.INSTANCE.chatDisconnected()); } /** * disconnectChat * * Recursivelly disconnecting chat rooms and chat before login out * */ private void logoutChat() { // Disconnect rooms if (getChatRoomList().size()>0) { final ChatRoomDialogBox chatRoom = getChatRoomList().get(0); chatRoom.setChatRoomActive(false); ServiceDefTarget endPoint = (ServiceDefTarget) chatService; endPoint.setServiceEntryPoint(RPCService.ChatService); chatService.closeRoom(chatRoom.getRoom(),new AsyncCallback<Object>() { @Override public void onSuccess(Object arg0) { removeChatRoom(chatRoom); logoutChat(); // Recursive call } @Override public void onFailure(Throwable caught) { Main.get().showError("CloseRoom", caught); // If happens some problem always we try continue disconnecting chat rooms removeChatRoom(chatRoom); logoutChat(); // Recursive call } }); } else { // Disconnect chat disconnectChat(); // Only used to change view and disabling some RPC ServiceDefTarget endPoint = (ServiceDefTarget) chatService; endPoint.setServiceEntryPoint(RPCService.ChatService); chatService.logout(new AsyncCallback<Object>() { @Override public void onSuccess(Object result) { } @Override public void onFailure(Throwable caught) { Main.get().showError("GetLogoutChat", caught); } }); } } /** * enableChat */ public void enableChat() { imgChat.setVisible(true); imgChatSeparator.setVisible(true); } /** * enableUserQuota */ public void enableUserQuota(long quotaLimit) { this.quotaLimit = quotaLimit; imgUserQuota.setVisible(true); quotaUsed.setVisible(true); userQuota = true; } /** * loginChat */ public void loginChat() { ServiceDefTarget endPoint = (ServiceDefTarget) chatService; endPoint.setServiceEntryPoint(RPCService.ChatService); chatService.login(new AsyncCallback<Object>() { @Override public void onSuccess(Object result) { chatConnected = true; imgChat.setResource(OKMBundleResources.INSTANCE.chatConnected()); imgChat.setTitle(Main.i18n("user.info.chat.disconnect")); usersConnected.setVisible(true); imgNewChatRoom.setVisible(true); refreshConnectedUsers(); getPendingChatRoomUser(); } @Override public void onFailure(Throwable caught) { Main.get().showError("GetLoginChat", caught); } }); } /** * isQuotaExceed * * @return */ public boolean isQuotaExceed() { return quotaExceeded; } /** * showExtensions */ public void showExtensions() { if (widgetExtensionList.size()>0) { panel.add(new Image(OKMBundleResources.INSTANCE.separator())); panel.add(new HTML(" ")); for (UserInfoExtension extension : widgetExtensionList) { panel.add(extension); panel.add(new HTML(" ")); } } } /** * addUserInfoExtension * * @param extension */ public void addUserInfoExtension(UserInfoExtension extension) { widgetExtensionList.add(extension); } }