001/* 002 * Syncany, www.syncany.org 003 * Copyright (C) 2011-2016 Philipp C. Heckel <philipp.heckel@gmail.com> 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU General Public License as published by 007 * the Free Software Foundation, either version 3 of the License, or 008 * (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU General Public License for more details. 014 * 015 * You should have received a copy of the GNU General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018package org.syncany.operations.daemon.messages.api; 019 020import java.util.logging.Level; 021import java.util.logging.Logger; 022 023import org.syncany.util.StringUtil; 024 025/** 026 * The message factory serializes and deserializes messages sent to 027 * or from the daemon via the REST/WS API. 028 * 029 * @author Philipp C. Heckel (philipp.heckel@gmail.com) 030 */ 031public abstract class MessageFactory { 032 protected static final Logger logger = Logger.getLogger(MessageFactory.class.getSimpleName()); 033 034 protected static Class<? extends Message> getMessageClass(String requestType) throws Exception { 035 String thisPackage = Message.class.getPackage().getName(); 036 String parentPackage = thisPackage.substring(0, thisPackage.lastIndexOf(".")); 037 String camelCaseMessageType = StringUtil.toCamelCase(requestType); 038 String fqMessageClassName = parentPackage + "." + camelCaseMessageType; 039 040 // Try to load! 041 try { 042 return Class.forName(fqMessageClassName).asSubclass(Message.class); 043 } 044 catch (Exception e) { 045 logger.log(Level.INFO, "Could not find FQCN " + fqMessageClassName, e); 046 throw new Exception("Cannot read request class from request type: " + requestType, e); 047 } 048 } 049}