#!/usr/bin/env python

#
# File route descriptor.
#

from dm.common.utility.configurationManager import ConfigurationManager
from fileSessionController import FileSessionController

class FileRouteDescriptor:

    @classmethod
    def getRoutes(cls):
        contextRoot = ConfigurationManager.getInstance().getContextRoot()

        # Static instances shared between different routes
        fileSessionController = FileSessionController()

        # Define routes.
        routes = [

            # Add experiment file
            {
                'name' : 'addExperimentFile',
                'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'addExperimentFile',
                'method' : ['POST']
            },

            # Update file by id
            {
                'name' : 'updateFileById',
                'path' : '%s/files/:(id)' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'updateFileById',
                'method' : ['PUT']
            },

            # Update experiment file by name
            {
                'name' : 'updateExperimentFile',
                'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'updateExperimentFile',
                'method' : ['PUT']
            },

            # Get file info list
            {
                'name' : 'getFiles',
                'path' : '%s/files' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'getFiles',
                'method' : ['GET']
            },

            # Get experiment file info list 
            {
                'name' : 'getExperimentFiles',
                'path' : '%s/filesByExperiment/:(experimentName)' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'getExperimentFiles',
                'method' : ['GET']
            },

            # Get file by id
            {
                'name' : 'getFileById',
                'path' : '%s/files/:(id)' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'getFileById',
                'method' : ['GET']
            },

            # Get experiment file by name
            {
                'name' : 'getExperimentFile',
                'path' : '%s/filesByExperiment/:(experimentName)/:(fileName)' % contextRoot,
                'controller' : fileSessionController,
                'action' : 'getExperimentFile',
                'method' : ['GET']
            },

        ]
       
        return routes