package com.netifera.platform.host.filesystem.probe; import java.io.IOException; import com.netifera.platform.api.dispatcher.DispatchException; import com.netifera.platform.api.dispatcher.DispatchMismatchException; import com.netifera.platform.api.dispatcher.IMessageDispatcher; import com.netifera.platform.api.dispatcher.IMessageDispatcherService; import com.netifera.platform.api.dispatcher.IMessageHandler; import com.netifera.platform.api.dispatcher.IMessenger; import com.netifera.platform.api.dispatcher.IProbeMessage; import com.netifera.platform.api.dispatcher.MessengerException; import com.netifera.platform.api.log.ILogManager; import com.netifera.platform.api.log.ILogger; import com.netifera.platform.host.filesystem.LocalFileSystem; import com.netifera.platform.host.filesystem.File; import com.netifera.platform.host.filesystem.IFileSystem; public class FileSystem { private final static String PELUDO_ESCAPE_PATH = "/peludo/osfs/./"; private ILogger logger; private IFileSystem fileSystem; private final String rootPrefix; public FileSystem() { fileSystem = new LocalFileSystem(); if(System.getProperty("com.netifera.peludofs") != null) { rootPrefix = PELUDO_ESCAPE_PATH; } else { rootPrefix = ""; } } private void getDirectoryListing(IMessenger messenger, GetDirectoryListing message) { try { File[] files = fileSystem.getDirectoryList(rootPrefix + message.getDirectoryPath()); for(File f : files) { if(f.getAbsolutePath().startsWith(PELUDO_ESCAPE_PATH)) { String realPath = f.getAbsolutePath().substring(14); f.setPath(realPath); } } messenger.emitMessage(message.createResponse(files)); } catch(IOException e) { e.printStackTrace(); } catch (MessengerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void getRoots(IMessenger messenger, GetRoots message) { try { File[] files = fileSystem.getRoots(); messenger.emitMessage(message.createResponse(files)); } catch(MessengerException e) { e.printStackTrace(); } } private void registerHandlers(IMessageDispatcher dispatcher) { IMessageHandler handler = new IMessageHandler() { public void call(IMessenger messenger, IProbeMessage message) throws DispatchException { try { dispatch(messenger, message); } catch(MessengerException e) { logger.warning("Error sending message response " + e.getMessage()); } } }; dispatcher.registerMessageHandler(GetDirectoryListing.ID, handler); dispatcher.registerMessageHandler(GetRoots.ID, handler); } private void dispatch(IMessenger messenger, IProbeMessage message) throws DispatchMismatchException, MessengerException { if(message instanceof GetDirectoryListing) { getDirectoryListing(messenger, (GetDirectoryListing) message); } else if(message instanceof GetRoots) { getRoots(messenger, (GetRoots) message); } } protected void setLogManager(ILogManager logManager) { logger = logManager.getLogger("File System"); } protected void unsetLogManager(ILogManager logManager) { } protected void setDispatcher(IMessageDispatcherService dispatcher) { registerHandlers(dispatcher.getServerDispatcher()); } protected void unsetDispatcher(IMessageDispatcherService dispatcher) { } }