Java tutorial
/* * 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.openmeetings.app.remote; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.openmeetings.app.OpenmeetingsVariables; import org.openmeetings.app.conference.session.RoomClient; import org.openmeetings.app.conference.whiteboard.WhiteboardManagement; import org.openmeetings.app.data.basic.AuthLevelmanagement; import org.openmeetings.app.data.basic.Sessionmanagement; import org.openmeetings.app.data.file.FileUtils; import org.openmeetings.app.data.file.dao.FileExplorerItemDaoImpl; import org.openmeetings.app.data.file.dto.LibraryPresentation; import org.openmeetings.app.data.user.Usermanagement; import org.openmeetings.app.documents.LibraryChartLoader; import org.openmeetings.app.documents.LibraryDocumentConverter; import org.openmeetings.app.documents.LibraryWmlLoader; import org.openmeetings.app.documents.LoadLibraryPresentation; import org.openmeetings.app.persistence.beans.files.FileExplorerItem; import org.openmeetings.app.remote.red5.ClientListManager; import org.openmeetings.app.remote.red5.ScopeApplicationAdapter; import org.openmeetings.utils.crypt.MD5; import org.red5.logging.Red5LoggerFactory; import org.red5.server.api.IConnection; import org.red5.server.api.Red5; import org.red5.server.api.service.IPendingServiceCall; import org.red5.server.api.service.IPendingServiceCallback; import org.red5.server.api.service.IServiceCapableConnection; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; /** * * @author swagner * */ public class ConferenceLibrary implements IPendingServiceCallback { private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLibrary.class, OpenmeetingsVariables.webAppRootKey); @Autowired private ClientListManager clientListManager = null; @Autowired private Sessionmanagement sessionManagement; @Autowired private Usermanagement userManagement; @Autowired private FileExplorerItemDaoImpl fileExplorerItemDao; @Autowired private AuthLevelmanagement authLevelManagement; @Autowired private LibraryWmlLoader libraryWmlLoader; @Autowired private FileUtils fileUtils; public LibraryPresentation getPresentationPreviewFileExplorer(String SID, String parentFolder) { try { Long users_id = sessionManagement.checkSession(SID); Long user_level = userManagement.getUserLevelByID(users_id); log.debug("#############users_id : " + users_id); log.debug("#############user_level : " + user_level); if (authLevelManagement.checkUserLevel(user_level)) { String current_dir = ScopeApplicationAdapter.webAppPath + File.separatorChar + OpenmeetingsVariables.UPLOAD_DIR; String working_dir = current_dir + File.separatorChar + "files" + File.separatorChar + parentFolder; log.debug("############# working_dir : " + working_dir); File file = new File(working_dir + File.separatorChar + "library.xml"); if (!file.exists()) { throw new Exception( "library.xml does not exist " + working_dir + File.separatorChar + "library.xml"); } return LoadLibraryPresentation.getInstance().parseLibraryFileToObject(file.getAbsolutePath()); } else { throw new Exception("not Authenticated"); } } catch (Exception e) { log.error("[getListOfFilesByAbsolutePath]", e); return null; } } /** * * Save an Object to the library and returns the file-explorer Id * * @param SID * @param room_id * @param fileName * @param tObjectRef * @return */ public Long saveAsObject(String SID, Long room_id, String fileName, Object tObjectRef) { try { Long users_id = sessionManagement.checkSession(SID); Long user_level = userManagement.getUserLevelByID(users_id); if (authLevelManagement.checkUserLevel(user_level)) { // LinkedHashMap tObject = (LinkedHashMap)t; // ArrayList tObject = (ArrayList)t; log.debug("saveAsObject :1: " + tObjectRef); log.debug("saveAsObject :2: " + tObjectRef.getClass().getName()); @SuppressWarnings("rawtypes") ArrayList tObject = (ArrayList) tObjectRef; log.debug("saveAsObject" + tObject.size()); String current_dir = ScopeApplicationAdapter.webAppPath + File.separatorChar + OpenmeetingsVariables.UPLOAD_DIR + File.separatorChar; log.debug("### this is my working directory: " + current_dir); String localFileName = MD5.do_checksum(new Date().toString()) + ".wml"; LibraryDocumentConverter.getInstance().writeToLocalFolder(current_dir, localFileName, tObject); // String wmlPath = current_dir + File.separatorChar+fileName // +".xml"; // OwnerID == null Long fileExplorerId = fileExplorerItemDao.add(fileName, "", 0L, null, room_id, users_id, false, // isFolder false, // isImage false, // isPresentation localFileName, // WML localFileName true, // isStoredWML file true, 0L, ""); return fileExplorerId; } } catch (Exception err) { log.error("[saveAsObject] ", err); } return -1L; } /** * * Loads a Object from the library into the whiteboard of all participant of * the current room * * @param SID * @param room_id * @param fileExplorerItemId * @param whiteboardId */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void loadWmlObject(String SID, Long room_id, Long fileExplorerItemId, Long whiteboardId) { try { Long users_id = sessionManagement.checkSession(SID); Long user_level = userManagement.getUserLevelByID(users_id); if (authLevelManagement.checkUserLevel(user_level)) { IConnection current = Red5.getConnectionLocal(); RoomClient currentClient = this.clientListManager.getClientByStreamId(current.getClient().getId()); if (currentClient == null) { return; } String current_dir = ScopeApplicationAdapter.webAppPath + File.separatorChar + OpenmeetingsVariables.UPLOAD_DIR + File.separatorChar; log.debug("### this is my working directory: " + current_dir); FileExplorerItem fileExplorerItem = fileExplorerItemDao .getFileExplorerItemsById(fileExplorerItemId); ArrayList roomItems = libraryWmlLoader.loadWmlFile(current_dir, fileExplorerItem.getWmlFilePath()); Map whiteboardObjClear = new HashMap(); whiteboardObjClear.put(2, "clear"); whiteboardObjClear.put(3, null); WhiteboardManagement.getInstance().addWhiteBoardObjectById(room_id, whiteboardObjClear, whiteboardId); for (int k = 0; k < roomItems.size(); k++) { ArrayList actionObject = (ArrayList) roomItems.get(k); Map whiteboardObj = new HashMap(); whiteboardObj.put(2, "draw"); whiteboardObj.put(3, actionObject); WhiteboardManagement.getInstance().addWhiteBoardObjectById(room_id, whiteboardObj, whiteboardId); } Map<String, Object> sendObject = new HashMap<String, Object>(); sendObject.put("id", whiteboardId); sendObject.put("roomitems", roomItems); // Notify all Clients of that Scope (Room) Collection<Set<IConnection>> conCollection = current.getScope().getConnections(); for (Set<IConnection> conset : conCollection) { for (IConnection conn : conset) { if (conn != null) { if (conn instanceof IServiceCapableConnection) { RoomClient rcl = this.clientListManager .getClientByStreamId(conn.getClient().getId()); if ((rcl == null) || (rcl.getIsScreenClient() != null && rcl.getIsScreenClient())) { continue; } else { // log.debug("*..*idremote: " + // rcl.getStreamid()); // log.debug("*..* sendVars room_id IS EQUAL: " // + currentClient.getStreamid() + " asd " + // rcl.getStreamid() + " IS eq? " // +currentClient.getStreamid().equals(rcl.getStreamid())); ((IServiceCapableConnection) conn).invoke("loadWmlToWhiteboardById", new Object[] { sendObject }, this); // log.debug("sending sendVarsToWhiteboard to " // + conn + " rcl " + rcl); } } } } } } } catch (Exception err) { log.error("[loadWmlObject] ", err); } } /** * * Loads a chart object * * @param SID * @param room_id * @param fileName * @return */ @SuppressWarnings("rawtypes") public ArrayList loadChartObject(String SID, Long room_id, String fileName) { try { Long users_id = sessionManagement.checkSession(SID); Long user_level = userManagement.getUserLevelByID(users_id); if (authLevelManagement.checkUserLevel(user_level)) { String roomName = room_id.toString(); String current_dir = ScopeApplicationAdapter.webAppPath + File.separatorChar + OpenmeetingsVariables.UPLOAD_DIR + File.separatorChar + roomName + File.separatorChar; log.debug("### this is my working directory: " + current_dir); return LibraryChartLoader.getInstance().loadChart(current_dir, fileName); } } catch (Exception err) { log.error("[loadChartObject] ", err); } return null; } /** * * Load all objects of a conference room * * @param SID * @param room_id * @return * * public FileExplorerObject getFileExplorerByRoom(String SID, Long * room_id) { try { Long users_id = * Sessionmanagement.getInstance().checkSession(SID); Long * user_level = userManagement.getUserLevelByID( users_id); if * (authLevelManagement.checkUserLevel(user_level)) { * * log.debug("room_id " + room_id); * * FileExplorerObject fileExplorerObject = new FileExplorerObject(); * * // Home File List FileExplorerItem[] fList = * FileExplorerItemDaoImpl .getInstance() * .getFileExplorerItemsByOwner(users_id, 0L); * * long homeFileSize = 0; * * for (FileExplorerItem homeChildExplorerItem : fList) { * log.debug("FileExplorerItem fList " + * homeChildExplorerItem.getFileName()); homeFileSize += * FileUtils.getInstance() * .getSizeOfDirectoryAndSubs(homeChildExplorerItem); } * * fileExplorerObject.setUserHome(fList); * fileExplorerObject.setUserHomeSize(homeFileSize); * * // Public File List FileExplorerItem[] rList = * FileExplorerItemDaoImpl * .getInstance().getFileExplorerItemsByRoom(room_id, 0L); * * long roomFileSize = 0; * * for (FileExplorerItem homeChildExplorerItem : rList) { * log.debug("FileExplorerItem rList " + * homeChildExplorerItem.getFileName()); roomFileSize += * FileUtils.getInstance() * .getSizeOfDirectoryAndSubs(homeChildExplorerItem); } * * fileExplorerObject.setRoomHome(rList); * fileExplorerObject.setRoomHomeSize(roomFileSize); * * return fileExplorerObject; * * } } catch (Exception err) { log.error("[getFileExplorerByRoom] ", * err); } return null; } * * public FileExplorerItem[] getFileExplorerByParent(String SID, * Long parentFileExplorerItemId, Long room_id, Boolean isOwner) { * try { Long users_id = * Sessionmanagement.getInstance().checkSession(SID); Long * user_level = userManagement.getUserLevelByID( users_id); if * (authLevelManagement.checkUserLevel(user_level)) { * * log.debug("parentFileExplorerItemId " + * parentFileExplorerItemId); * * if (parentFileExplorerItemId == 0) { if (isOwner) { return * FileExplorerItemDaoImpl.getInstance() * .getFileExplorerItemsByOwner(users_id, parentFileExplorerItemId); * } else { return FileExplorerItemDaoImpl.getInstance() * .getFileExplorerItemsByRoom(room_id, parentFileExplorerItemId); } * } else { return FileExplorerItemDaoImpl.getInstance() * .getFileExplorerItemsByParent( parentFileExplorerItemId); } * * } } catch (Exception err) { * log.error("[getFileExplorerByParent] ", err); } return null; } * * public Long addFolder(String SID, Long parentFileExplorerItemId, * String fileName, Long room_id, Boolean isOwner) { try { Long * users_id = Sessionmanagement.getInstance().checkSession(SID); * Long user_level = userManagement.getUserLevelByID( users_id); if * (authLevelManagement.checkUserLevel(user_level)) { * * log.debug("addFolder " + parentFileExplorerItemId); * * if (parentFileExplorerItemId == 0 && isOwner) { // users_id * (OwnerID) => only set if its directly root in // Owner Directory, * // other Folders and Files maybe are also in a Home // directory * // but just because their parent is return * FileExplorerItemDaoImpl.getInstance().add(fileName, "", * parentFileExplorerItemId, users_id, room_id, users_id, true, // * isFolder false, // isImage false, // isPresentation "", // WML * Path false, // isStoredWML file false // isXmlFile , 0L, ""); } * else { return FileExplorerItemDaoImpl.getInstance().add(fileName, * "", parentFileExplorerItemId, null, room_id, users_id, true, // * isFolder false, // isImage false, // isPresentation "", // WML * Paht false, // isStoredWML file false // isXmlFile , 0L, ""); } } * } catch (Exception err) { log.error("[getFileExplorerByParent] ", * err); } return null; } * * public Long deleteFileOrFolder(String SID, Long * fileExplorerItemId) { try { Long users_id = * Sessionmanagement.getInstance().checkSession(SID); Long * user_level = userManagement.getUserLevelByID( users_id); if * (authLevelManagement.checkUserLevel(user_level)) { * * log.debug("deleteFileOrFolder " + fileExplorerItemId); * * FileExplorerItemDaoImpl.getInstance().deleteFileExplorerItem( * fileExplorerItemId); * * } } catch (Exception err) { * log.error("[getFileExplorerByParent] ", err); } return null; } * * public Long updateFileOrFolderName(String SID, Long * fileExplorerItemId, String fileName) { try { Long users_id = * Sessionmanagement.getInstance().checkSession(SID); Long * user_level = userManagement.getUserLevelByID( users_id); if * (authLevelManagement.checkUserLevel(user_level)) { * * log.debug("deleteFileOrFolder " + fileExplorerItemId); * * FileExplorerItemDaoImpl.getInstance().updateFileOrFolderName( * fileExplorerItemId, fileName); * * } } catch (Exception err) { * log.error("[updateFileOrFolderName] ", err); } return null; } * * public Long moveFile(String SID, Long fileExplorerItemId, Long * newParentFileExplorerItemId, Long room_id, Boolean isOwner, * Boolean moveToHome) { try { Long users_id = * Sessionmanagement.getInstance().checkSession(SID); Long * user_level = userManagement.getUserLevelByID( users_id); if * (authLevelManagement.checkUserLevel(user_level)) { * * log.debug("deleteFileOrFolder " + fileExplorerItemId); * * FileExplorerItemDaoImpl.getInstance().moveFile( * fileExplorerItemId, newParentFileExplorerItemId, room_id, * isOwner, users_id); * * FileExplorerItem fileExplorerItem = FileExplorerItemDaoImpl * .getInstance().getFileExplorerItemsById( fileExplorerItemId); * * if (moveToHome) { // set this file and all subfiles and folders * the ownerId * FileUtils.getInstance().setFileToOwnerOrRoomByParent(fileExplorerItem * , users_id, null); * * } else { // set this file and all subfiles and folders the * room_id * FileUtils.getInstance().setFileToOwnerOrRoomByParent(fileExplorerItem * , null, room_id); * * } * * } } catch (Exception err) { * log.error("[updateFileOrFolderName] ", err); } return null; } */ public Long copyFileToCurrentRoom(String SID, Long flvFileExplorerId) { try { Long users_id = sessionManagement.checkSession(SID); Long user_level = userManagement.getUserLevelByID(users_id); if (authLevelManagement.checkUserLevel(user_level)) { IConnection current = Red5.getConnectionLocal(); String streamid = current.getClient().getId(); RoomClient currentClient = this.clientListManager.getClientByStreamId(streamid); Long room_id = currentClient.getRoom_id(); if (room_id != null) { String streamFolderName = ScopeApplicationAdapter.webAppPath + File.separatorChar + OpenmeetingsVariables.STREAMS_DIR + File.separatorChar + "hibernate" + File.separatorChar; String outputFullFlv = streamFolderName + "UPLOADFLV_" + flvFileExplorerId + ".flv"; String targetFolderName = ScopeApplicationAdapter.webAppPath + File.separatorChar + OpenmeetingsVariables.STREAMS_DIR + File.separatorChar + room_id + File.separatorChar; File targetFolder = new File(targetFolderName); if (!targetFolder.exists()) { targetFolder.mkdir(); } String targetFullFlv = targetFolderName + "UPLOADFLV_" + flvFileExplorerId + ".flv"; File outputFullFlvFile = new File(outputFullFlv); File targetFullFlvFile = new File(targetFullFlv); if (outputFullFlvFile.exists()) { if (!targetFullFlvFile.exists()) { fileUtils.copyFile(outputFullFlv, targetFullFlv); } } return 1L; } } } catch (Exception err) { log.error("[copyFileToCurrentRoom] ", err); } return -1L; } public void resultReceived(IPendingServiceCall arg0) { // TODO Auto-generated method stub } }