⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 realtimeroomprocessor.java

📁 openfire whiteboard plugin
💻 JAVA
字号:
/* * * Copyright (C) GNU/GPL AVOIR 2008 * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */package org.avoir.realtime.plugins;import java.io.ByteArrayInputStream;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.Map;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.avoir.realtime.common.util.XmlUtils;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.QName;import org.jivesoftware.openfire.XMPPServer;import org.jivesoftware.openfire.muc.MUCRoom;import org.jivesoftware.openfire.muc.MultiUserChatService;import org.jivesoftware.openfire.muc.spi.LocalMUCRoom;import org.jivesoftware.openfire.user.User;import org.jivesoftware.openfire.user.UserNotFoundException;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xmpp.packet.IQ;import org.xmpp.packet.JID;import org.xmpp.packet.PacketError;/** * * @author developer */public class RealtimeRoomProcessor {    private XMPPServer server = XMPPServer.getInstance();    private AvoirRealtimePlugin pl;    public RealtimeRoomProcessor(AvoirRealtimePlugin pl) {        this.pl = pl;    }    private Collection<JID> getInvitees(IQ packet) {        Collection<JID> invitees = new ArrayList<JID>();        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();        String xmlContents = packet.toXML();        try {            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();            Document doc = documentBuilder.parse(                    new ByteArrayInputStream(xmlContents.getBytes(Constants.PREFERRED_ENCODING)));            NodeList users = doc.getElementsByTagName("user");            for (int i = 0; i < users.getLength(); i++) {                Node node = users.item(i);                if (node.getNodeType() == Node.ELEMENT_NODE) {                    org.w3c.dom.Element element = (org.w3c.dom.Element) node;                    String userId = XmlUtils.readString(element, "user-id");                    invitees.add(server.createJID(userId, null));                }            }        } catch (Exception ex) {            ex.printStackTrace();        }        return invitees;    }    public IQ getRooms(IQ packet) {        IQ replyPacket = IQ.createResultIQ(packet);        Element queryResult = DocumentHelper.createElement(QName.get("query", Constants.NAME_SPACE));        queryResult.addElement("packet-type").addText("user-list");        queryResult.addElement("mode").addText("create-room-success");        Element item = queryResult.addElement("rooms");        MultiUserChatService service = server.getMultiUserChatManager().getMultiUserChatServices().get(0);        List<MUCRoom> rooms = service.getChatRooms();        for (MUCRoom room : rooms) {            Element roomElement = item.addElement("room");            Element roomId = roomElement.addElement("room-jid");            roomId.addText(room.getJID().toString());            Element name = roomElement.addElement("room-name");            name.addText(room.getName());            Element sub = roomElement.addElement("room-subject");            sub.addText(room.getSubject());        }        replyPacket.setChildElement(queryResult);        return replyPacket;    }    /**     * get hold of admins     * @param packet     * @return     */    public IQ getAdmins(IQ packet) {        IQ replyPacket = IQ.createResultIQ(packet);        Collection<JID> admins = server.getAdmins();        Element queryResult = DocumentHelper.createElement(QName.get("query", Constants.NAME_SPACE));        queryResult.addElement("packet-type").addText("user-list");        queryResult.addElement("mode").addText("admins");        Element item = queryResult.addElement("users");        for (JID admin : admins) {            Element userElement = item.addElement("user");            Element userId = userElement.addElement("user-id");            userId.addText(admin.toBareJID());        }        replyPacket.setChildElement(queryResult);        return replyPacket;    }    public IQ makeInstructor(IQ packet) {        IQ replyPacket = IQ.createResultIQ(packet);        Collection<User> users = server.getUserManager().getUsers();        Element queryResult = DocumentHelper.createElement(QName.get("iq", Constants.NAME_SPACE));        queryResult.addElement("packet-type").addText("user-list");        queryResult.addElement("mode").addText("request-user-list");        Element item = queryResult.addElement("users");        for (User user : users) {            Element userElement = item.addElement("user");            Element userId = userElement.addElement("user-id");            user.getProperties().put("is-instructor", "true");            userId.addText(user.getUsername());            Element name = userElement.addElement("name");            name.addText(user.getName());            Map<String, String> props = user.getProperties();            Element inst = userElement.addElement("is-instructor");            inst.addText(props.get("is-instructor"));        }        replyPacket.setChildElement(queryResult);        return replyPacket;    }    public Element initUsers() {        Collection<User> users = server.getUserManager().getUsers();        Element queryResult = DocumentHelper.createElement(QName.get("realtime-ext2", Constants.NAME_SPACE));        queryResult.addElement("packet-type").addText("user-list");        queryResult.addElement("mode").addText("request-user-list");        Element item = queryResult.addElement("users");        for (User user : users) {            Element userElement = item.addElement("user");            Element userId = userElement.addElement("user-id");            userId.addText(user.getUsername());            Element name = userElement.addElement("name");            name.addText(user.getName());            Map<String, String> props = user.getProperties();            Element inst = userElement.addElement("is-instructor");            String val = props.get("is-instructor") == null ? "false" : props.get("is-instructor");            inst.addText(val);        }        return queryResult;    }    private String getFormatedUsers() {        Collection<User> users = server.getUserManager().getUsers();        StringBuilder sb = new StringBuilder();        for (User user : users) {            String name = "N/A";            if (user.getName() != null) {                if (!user.getName().trim().equals("")) {                    name = user.getName();                }            }            sb.append("<user>");            sb.append("<userid>").append(user.getUsername()).append("</userid>");            sb.append("<username>").append(name).append("</username>");            Map<String, String> props = user.getProperties();            String val = props.get("is-instructor") == null ? "false" : props.get("is-instructor");            sb.append("<instructor>").append(val).append("</instructor>");            sb.append("</user>");        }        return sb.toString();    }    public IQ getUsers(IQ packet, String mode) {        IQ replyPacket = IQ.createResultIQ(packet);        String replyMode = "";        if (mode.equals(Mode.REQUEST_USER_PROPERTIES)) {            replyMode = Mode.USER_PROPERTIES;        }        if (mode.equals(Mode.REQUEST_USER_LIST)) {            replyMode = Mode.USERLIST_ACCESSLEVEL_REPLY;        }        Element queryResult = DocumentHelper.createElement(QName.get("query", Constants.NAME_SPACE));        queryResult.addElement("mode").addText(replyMode);        Element item = queryResult.addElement("content");        item.addText(getFormatedUsers());        replyPacket.setChildElement(queryResult);        return replyPacket;    }    public void updateUserProperties(IQ packet) {        try {            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();            String xmlContents = packet.toXML();            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();            Document doc = documentBuilder.parse(                    new ByteArrayInputStream(xmlContents.getBytes(Constants.PREFERRED_ENCODING)));            NodeList usersNodeList = doc.getElementsByTagName("user");            for (int i = 0; i < usersNodeList.getLength(); i++) {                Node node = usersNodeList.item(i);                if (node.getNodeType() == Node.ELEMENT_NODE) {                    try {                        org.w3c.dom.Element element = (org.w3c.dom.Element) node;                        String userId = XmlUtils.readString(element, "userid");                        JID jid = server.createJID(userId, null);                        String isInstructor = XmlUtils.readString(element, "instructor");                        server.getUserManager().getUser(jid.toString()).getProperties().put("is-instructor", isInstructor);                    } catch (UserNotFoundException ex) {                        ex.printStackTrace();                    }                }            }        } catch (Exception ex) {            ex.printStackTrace();        }    }    public IQ initCreateRoom(IQ packet, Document doc) {        IQ copy = packet.createCopy();        String roomName = XmlUtils.readString(doc, "room-name");        if (createRoom(roomName, getInvitees(packet), "Join class for " + roomName, packet.getFrom())) {            return getRooms(packet);        } else {            IQ replyPacket = IQ.createResultIQ(copy);            Element queryResult = DocumentHelper.createElement(QName.get("query", Constants.NAME_SPACE));            queryResult.addElement("packet-type").addText("user-list");            queryResult.addElement("mode").addText(Mode.CREATE_ROOM_ERROR);            replyPacket.setError(new PacketError(PacketError.Condition.not_allowed));            replyPacket.setChildElement(queryResult);            return pl.getDefaultPacketProcessor().getFileView(packet, "questions", "teacher");        }    }    private boolean createRoom(String chatroomName, Collection<JID> invitees, String inviteReason, JID owner) {        try {            if (server.getMultiUserChatManager().getMultiUserChatServicesCount() == 0) {                server.getMultiUserChatManager().createMultiUserChatService("conference", null, false);            }            MultiUserChatService service = server.getMultiUserChatManager().getMultiUserChatServices().get(0);            LocalMUCRoom room = (LocalMUCRoom) service.getChatRoom(chatroomName, owner);            room.unlock(room.getRole());            for (JID j : invitees) {                room.sendInvitation(j, inviteReason, room.getRole(), null);            }            return true;        } catch (Exception e) {            e.printStackTrace();        }        return false;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -