http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/FileTransferServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/FileTransferServiceImpl.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/FileTransferServiceImpl.java
index 7558d4b..b5ab8fb 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/FileTransferServiceImpl.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/FileTransferServiceImpl.java
@@ -29,7 +29,7 @@ import 
org.apache.airavata.file.manager.core.remote.client.scp.SCPStorageClient;
 import 
org.apache.airavata.file.manager.core.remote.client.sftp.SFTPStorageClient;
 import org.apache.airavata.file.manager.cpi.FileManagerException;
 import org.apache.airavata.file.manager.cpi.FileTransferService;
-import org.apache.airavata.model.file.*;
+import org.apache.airavata.model.file.transfer.*;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,6 +55,8 @@ public class FileTransferServiceImpl implements 
FileTransferService {
     /**
      * Method to upload the give bytes to the destination storage system
      *
+     * @param gatewayId
+     * @param username
      * @param fileData
      * @param destHostName
      * @param destLoginName
@@ -66,7 +68,7 @@ public class FileTransferServiceImpl implements 
FileTransferService {
      * @throws FileManagerException
      */
     @Override
-    public String uploadFile(byte[] fileData, String destHostName, String 
destLoginName, int destPort,
+    public String uploadFile(String gatewayId, String username, byte[] 
fileData, String destHostName, String destLoginName, int destPort,
                              StorageResourceProtocol destProtocol,
                              String destinationPath, String destHostCredToken) 
throws FileManagerException {
         long transferTime = System.currentTimeMillis();
@@ -77,7 +79,7 @@ public class FileTransferServiceImpl implements 
FileTransferService {
                 sshCredential = (SSHCredential) credential;
                 File srcFile = null;
                 FileWriter fileWriter = null;
-                FileTransferRequest fileTransferRequest = null;
+                FileTransferRequestModel fileTransferRequestModel = null;
                 try {
                     String srcFilePath = 
System.getProperty("java.io.tmpdir")+File.separator+ 
UUID.randomUUID().toString();
                     srcFile = new File(srcFilePath);
@@ -94,31 +96,33 @@ public class FileTransferServiceImpl implements 
FileTransferService {
                                 sshCredential.getPrivateKey(),
                                 sshCredential.getPublicKey(), 
sshCredential.getPassphrase().getBytes());
 
-                    fileTransferRequest = new FileTransferRequest();
-                    
fileTransferRequest.setSrcHostname(InetAddress.getLocalHost().getHostName());
-                    
fileTransferRequest.setSrcProtocol(StorageResourceProtocol.LOCAL);
-                    fileTransferRequest.setDestHostname(destHostName);
-                    fileTransferRequest.setDestLoginName(destLoginName);
-                    fileTransferRequest.setDestPort(destPort);
-                    fileTransferRequest.setDestProtocol(destProtocol);
-                    fileTransferRequest.setDestFilePath(destinationPath);
-                    
fileTransferRequest.setDestHostCredToken(destHostCredToken);
-                    
fileTransferRequest.setFileTransferMode(FileTransferMode.SYNC);
+                    fileTransferRequestModel = new FileTransferRequestModel();
+                    fileTransferRequestModel.setGatewayId(gatewayId);
+                    fileTransferRequestModel.setUsername(username);
+                    
fileTransferRequestModel.setSrcHostname(InetAddress.getLocalHost().getHostName());
+                    
fileTransferRequestModel.setSrcProtocol(StorageResourceProtocol.LOCAL);
+                    fileTransferRequestModel.setDestHostname(destHostName);
+                    fileTransferRequestModel.setDestLoginName(destLoginName);
+                    fileTransferRequestModel.setDestPort(destPort);
+                    fileTransferRequestModel.setDestProtocol(destProtocol);
+                    fileTransferRequestModel.setDestFilePath(destinationPath);
+                    
fileTransferRequestModel.setDestHostCredToken(destHostCredToken);
+                    
fileTransferRequestModel.setFileTransferMode(FileTransferMode.SYNC);
                     remoteStorageClient.writeFile(srcFile, destinationPath);
                     transferTime = System.currentTimeMillis() - transferTime;
-                    fileTransferRequest.setTransferTime(transferTime);
-                    
fileTransferRequest.setTransferStatus(FileTransferStatus.COMPLETED);
-                    
fileTransferRequest.setCreatedTime(System.currentTimeMillis());
-                    
fileTransferRequest.setLastModifiedType(fileTransferRequest.getCreatedTime());
-                    fileTransferRequest.setFileSize(srcFile.length());
-                    String transferId = 
fileTransferRequestDao.createFileTransferRequest(fileTransferRequest);
+                    fileTransferRequestModel.setTransferTime(transferTime);
+                    
fileTransferRequestModel.setTransferStatus(FileTransferStatus.COMPLETED);
+                    
fileTransferRequestModel.setCreatedTime(System.currentTimeMillis());
+                    
fileTransferRequestModel.setLastModifiedType(fileTransferRequestModel.getCreatedTime());
+                    fileTransferRequestModel.setFileSize(srcFile.length());
+                    String transferId = 
fileTransferRequestDao.createFileTransferRequest(fileTransferRequestModel);
                     return transferId;
                 } catch (Exception e) {
                     logger.error(e.getMessage(), e);
-                    if(fileTransferRequest != null) {
-                        
fileTransferRequest.setTransferStatus(FileTransferStatus.FAILED);
+                    if(fileTransferRequestModel != null) {
+                        
fileTransferRequestModel.setTransferStatus(FileTransferStatus.FAILED);
                         try {
-                            
fileTransferRequestDao.createFileTransferRequest(fileTransferRequest);
+                            
fileTransferRequestDao.createFileTransferRequest(fileTransferRequestModel);
                         } catch (JsonProcessingException e1) {
                             logger.error(e.getMessage(), e);
                             throw new FileManagerException(e);
@@ -147,6 +151,8 @@ public class FileTransferServiceImpl implements 
FileTransferService {
     /**
      * Transfer file between two storage resources synchronously. Returns the 
file transfer request id
      *
+     * @param gatewayId
+     * @param username
      * @param srcHostname
      * @param srcLoginName
      * @param srcPort
@@ -163,30 +169,32 @@ public class FileTransferServiceImpl implements 
FileTransferService {
      * @throws FileManagerException
      */
     @Override
-    public String transferFile(String srcHostname, String srcLoginName, int 
srcPort, StorageResourceProtocol srcProtocol,
+    public String transferFile(String gatewayId, String username, String 
srcHostname, String srcLoginName, int srcPort, StorageResourceProtocol 
srcProtocol,
                                String srcPath, String srcHostCredToken, String 
destHostname, String destLoginName, int destPort,
                                StorageResourceProtocol destProtocol, String 
destinationPath, String destHostCredToken)
             throws FileManagerException {
         long transferTime = System.currentTimeMillis();
         File srcFile = null;
-        FileTransferRequest fileTransferRequest = null;
+        FileTransferRequestModel fileTransferRequestModel = null;
         try{
-            fileTransferRequest = new FileTransferRequest();
-            fileTransferRequest.setSrcHostname(srcHostname);
-            fileTransferRequest.setSrcPort(srcPort);
-            fileTransferRequest.setSrcLoginName(srcLoginName);
-            fileTransferRequest.setSrcFilePath(srcPath);
-            fileTransferRequest.setSrcProtocol(srcProtocol);
-            fileTransferRequest.setSrcHostCredToken(srcHostCredToken);
-            fileTransferRequest.setDestHostname(destHostname);
-            fileTransferRequest.setDestPort(destPort);
-            fileTransferRequest.setDestLoginName(destLoginName);
-            fileTransferRequest.setDestFilePath(destinationPath);
-            fileTransferRequest.setDestProtocol(destProtocol);
-            fileTransferRequest.setDestHostCredToken(destHostCredToken);
-            fileTransferRequest.setCreatedTime(System.currentTimeMillis());
-            
fileTransferRequest.setLastModifiedType(fileTransferRequest.getCreatedTime());
-            fileTransferRequest.setFileTransferMode(FileTransferMode.SYNC);
+            fileTransferRequestModel = new FileTransferRequestModel();
+            fileTransferRequestModel.setGatewayId(gatewayId);
+            fileTransferRequestModel.setUsername(username);
+            fileTransferRequestModel.setSrcHostname(srcHostname);
+            fileTransferRequestModel.setSrcPort(srcPort);
+            fileTransferRequestModel.setSrcLoginName(srcLoginName);
+            fileTransferRequestModel.setSrcFilePath(srcPath);
+            fileTransferRequestModel.setSrcProtocol(srcProtocol);
+            fileTransferRequestModel.setSrcHostCredToken(srcHostCredToken);
+            fileTransferRequestModel.setDestHostname(destHostname);
+            fileTransferRequestModel.setDestPort(destPort);
+            fileTransferRequestModel.setDestLoginName(destLoginName);
+            fileTransferRequestModel.setDestFilePath(destinationPath);
+            fileTransferRequestModel.setDestProtocol(destProtocol);
+            fileTransferRequestModel.setDestHostCredToken(destHostCredToken);
+            
fileTransferRequestModel.setCreatedTime(System.currentTimeMillis());
+            
fileTransferRequestModel.setLastModifiedType(fileTransferRequestModel.getCreatedTime());
+            
fileTransferRequestModel.setFileTransferMode(FileTransferMode.SYNC);
 
             if(srcProtocol == StorageResourceProtocol.HTTP || srcProtocol == 
StorageResourceProtocol.HTTPS ||
                     srcProtocol == StorageResourceProtocol.SCP || srcProtocol 
== StorageResourceProtocol.SFTP){
@@ -214,7 +222,7 @@ public class FileTransferServiceImpl implements 
FileTransferService {
                         throw new FileManagerException("Only support 
SSHCredentials for SFTP host");
                     }
                 }
-                
fileTransferRequest.setTransferStatus(FileTransferStatus.RUNNING);
+                
fileTransferRequestModel.setTransferStatus(FileTransferStatus.RUNNING);
                 srcFile = srcClient.readFile(srcPath);
             }else{
                 throw new FileManagerException("Unsupported src protocol " + 
srcProtocol);
@@ -243,20 +251,20 @@ public class FileTransferServiceImpl implements 
FileTransferService {
                 }
                 destClient.writeFile(srcFile, destinationPath);
                 transferTime = System.currentTimeMillis() - transferTime;
-                fileTransferRequest.setTransferTime(transferTime);
-                fileTransferRequest.setFileSize(srcFile.length());
-                
fileTransferRequest.setTransferStatus(FileTransferStatus.COMPLETED);
-                String transferId = 
fileTransferRequestDao.createFileTransferRequest(fileTransferRequest);
+                fileTransferRequestModel.setTransferTime(transferTime);
+                fileTransferRequestModel.setFileSize(srcFile.length());
+                
fileTransferRequestModel.setTransferStatus(FileTransferStatus.COMPLETED);
+                String transferId = 
fileTransferRequestDao.createFileTransferRequest(fileTransferRequestModel);
                 return transferId;
             }else{
                 throw new FileManagerException("Unsupported src protocol " + 
srcProtocol);
             }
         }catch (Exception e){
             logger.error(e.getMessage(), e);
-            if(fileTransferRequest != null) {
-                
fileTransferRequest.setTransferStatus(FileTransferStatus.FAILED);
+            if(fileTransferRequestModel != null) {
+                
fileTransferRequestModel.setTransferStatus(FileTransferStatus.FAILED);
                 try {
-                    
fileTransferRequestDao.createFileTransferRequest(fileTransferRequest);
+                    
fileTransferRequestDao.createFileTransferRequest(fileTransferRequestModel);
                 } catch (JsonProcessingException ex) {
                     logger.error(ex.getMessage(), ex);
                     throw new FileManagerException(ex);
@@ -272,6 +280,8 @@ public class FileTransferServiceImpl implements 
FileTransferService {
     /**
      * Transfer file between two storage resources asynchronously. Returns the 
file transfer request id
      *
+     * @param gatewayId
+     * @param username
      * @param srcHostname
      * @param srcLoginName
      * @param srcPort
@@ -289,7 +299,7 @@ public class FileTransferServiceImpl implements 
FileTransferService {
      * @throws FileManagerException
      */
     @Override
-    public String transferFileAsync(String srcHostname, String srcLoginName, 
int srcPort, StorageResourceProtocol srcProtocol,
+    public String transferFileAsync(String gatewayId, String username, String 
srcHostname, String srcLoginName, int srcPort, StorageResourceProtocol 
srcProtocol,
                                     String srcPath, String srcHostCredToken, 
String destHostname, String destLoginName,
                                     int destPort, StorageResourceProtocol 
destProtocol, String destinationPath,
                                     String destHostCredToken, String[] 
callbackEmails) throws FileManagerException {
@@ -309,7 +319,7 @@ public class FileTransferServiceImpl implements 
FileTransferService {
      * @throws FileManagerException
      */
     @Override
-    public List<FileNode> getDirectoryListing(String hostname, String 
loginName, int port, StorageResourceProtocol protocol,
+    public List<LSEntryModel> getDirectoryListing(String hostname, String 
loginName, int port, StorageResourceProtocol protocol,
                                               String path, String 
hostCredential) throws FileManagerException {
         return null;
     }
@@ -428,7 +438,7 @@ public class FileTransferServiceImpl implements 
FileTransferService {
      * @throws FileManagerException
      */
     @Override
-    public FileTransferRequest getFileTransferRequestStatus(String transferId) 
throws FileManagerException {
+    public FileTransferRequestModel getFileTransferRequestStatus(String 
transferId) throws FileManagerException {
         try{
             return fileTransferRequestDao.getFileTransferRequest(transferId);
         }catch (Exception ex){
@@ -460,15 +470,15 @@ public class FileTransferServiceImpl implements 
FileTransferService {
     public static void main(String[] args) throws IOException, 
FileManagerException {
         FileTransferServiceImpl fileTransferService = new 
FileTransferServiceImpl();
         String sourceFile = "fsgsdgsdgsdgsdg";
-        String transferId = 
fileTransferService.uploadFile(sourceFile.getBytes(), "gw75.iu.xsede.org", 
"pga", 22,
-                StorageResourceProtocol.SCP, "/var/www/portals/test.file", 
null);
-        FileTransferRequest fileTransferRequest = 
fileTransferService.fileTransferRequestDao.getFileTransferRequest(transferId);
-        System.out.println("file transfer id:" + 
fileTransferRequest.getTransferId());
+        String transferId = fileTransferService.uploadFile("default", "supun", 
sourceFile.getBytes(), "gw75.iu.xsede.org",
+                "pga", 22, StorageResourceProtocol.SCP, 
"/var/www/portals/test.file", null);
+        FileTransferRequestModel fileTransferRequestModel = 
fileTransferService.fileTransferRequestDao.getFileTransferRequest(transferId);
+        System.out.println("file transfer id:" + 
fileTransferRequestModel.getTransferId());
 
-        transferId = fileTransferService.transferFile("gw75.iu.xsede.org", 
"pga", 22, StorageResourceProtocol.SCP,
+        transferId = fileTransferService.transferFile("default", "supun", 
"gw75.iu.xsede.org", "pga", 22, StorageResourceProtocol.SCP,
                 "/var/www/portals/test.file", null, "gw75.iu.xsede.org", 
"pga", 22, StorageResourceProtocol.SCP,
                 "/var/www/portals/test2.file", null);
-        fileTransferRequest = 
fileTransferService.fileTransferRequestDao.getFileTransferRequest(transferId);
-        System.out.println("file transfer id:" + 
fileTransferRequest.getTransferId());
+        fileTransferRequestModel = 
fileTransferService.fileTransferRequestDao.getFileTransferRequest(transferId);
+        System.out.println("file transfer id:" + 
fileTransferRequestModel.getTransferId());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogService.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogService.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogService.java
new file mode 100644
index 0000000..db00d98
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogService.java
@@ -0,0 +1,76 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core;
+
+import org.apache.airavata.file.manager.cpi.FileManagerException;
+import org.apache.airavata.model.file.metadata.MetadataModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MetadataCatalogService implements 
org.apache.airavata.file.manager.cpi.MetadataCatalogService{
+    private final static Logger logger = 
LoggerFactory.getLogger(MetadataCatalogService.class);
+
+    /**
+     * Create new metadata model
+     *
+     * @param metadataModel
+     * @return
+     * @throws FileManagerException
+     */
+    @Override
+    public String createMetadata(MetadataModel metadataModel) throws 
FileManagerException {
+        return null;
+    }
+
+    /**
+     * Update exisiting metadata model
+     *
+     * @param metadataModel
+     * @throws FileManagerException
+     */
+    @Override
+    public void updateMetadata(MetadataModel metadataModel) throws 
FileManagerException {
+
+    }
+
+    /**
+     * Delete existing metadata model
+     *
+     * @param metadataId
+     * @throws FileManagerException
+     */
+    @Override
+    public void deleteMetadata(String metadataId) throws FileManagerException {
+
+    }
+
+    /**
+     * Retrieve metadata model
+     *
+     * @param metadataId
+     * @return
+     * @throws FileManagerException
+     */
+    @Override
+    public MetadataModel getMetadata(String metadataId) throws 
FileManagerException {
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogServiceImpl.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogServiceImpl.java
new file mode 100644
index 0000000..b2a3dda
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/MetadataCatalogServiceImpl.java
@@ -0,0 +1,105 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core;
+
+import org.apache.airavata.file.manager.core.db.dao.MetadataDao;
+import org.apache.airavata.file.manager.cpi.FileManagerException;
+import org.apache.airavata.model.file.metadata.MetadataModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public class MetadataCatalogServiceImpl extends MetadataCatalogService {
+    private final static Logger logger = 
LoggerFactory.getLogger(MetadataCatalogServiceImpl.class);
+
+    private MetadataDao metadataDao;
+
+    public MetadataCatalogServiceImpl() throws IOException {
+        this.metadataDao = new MetadataDao();
+    }
+
+    /**
+     * Create new metadata model
+     *
+     * @param metadataModel
+     * @return
+     * @throws FileManagerException
+     */
+    @Override
+    public String createMetadata(MetadataModel metadataModel) throws 
FileManagerException {
+        try{
+            return metadataDao.createMetadata(metadataModel);
+        }catch (Exception e){
+            logger.error(e.getMessage(), e);
+            throw new FileManagerException(e);
+        }
+    }
+
+    /**
+     * Update exisiting metadata model
+     *
+     * @param metadataModel
+     * @throws FileManagerException
+     */
+    @Override
+    public void updateMetadata(MetadataModel metadataModel) throws 
FileManagerException {
+        try{
+            metadataDao.updateMetadata(metadataModel);
+        }catch (Exception e){
+            logger.error(e.getMessage(), e);
+            throw new FileManagerException(e);
+        }
+    }
+
+    /**
+     * Delete existing metadata model
+     *
+     * @param metadataId
+     * @throws FileManagerException
+     */
+    @Override
+    public void deleteMetadata(String metadataId) throws FileManagerException {
+        try{
+            metadataDao.deleteMetadata(metadataId);
+        }catch (Exception e){
+            logger.error(e.getMessage(), e);
+            throw new FileManagerException(e);
+        }
+    }
+
+    /**
+     * Retrieve metadata model
+     *
+     * @param metadataId
+     * @return
+     * @throws FileManagerException
+     */
+    @Override
+    public MetadataModel getMetadata(String metadataId) throws 
FileManagerException {
+        try{
+            return metadataDao.getMetadata(metadataId);
+        }catch (Exception e){
+            logger.error(e.getMessage(), e);
+            throw new FileManagerException(e);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/ReplicaCatalogServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/ReplicaCatalogServiceImpl.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/ReplicaCatalogServiceImpl.java
new file mode 100644
index 0000000..119e0ae
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/ReplicaCatalogServiceImpl.java
@@ -0,0 +1,172 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core;
+
+import org.apache.airavata.file.manager.core.db.dao.FileCollectionDao;
+import org.apache.airavata.file.manager.core.db.dao.FileDao;
+import org.apache.airavata.file.manager.cpi.FileManagerException;
+import org.apache.airavata.file.manager.cpi.ReplicaCatalogService;
+import org.apache.airavata.model.file.replica.FileCollectionModel;
+import org.apache.airavata.model.file.replica.FileModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public class ReplicaCatalogServiceImpl implements ReplicaCatalogService {
+    private final static Logger logger = 
LoggerFactory.getLogger(ReplicaCatalogServiceImpl.class);
+
+    private FileDao fileDao;
+    private FileCollectionDao fileCollectionDao;
+
+    public ReplicaCatalogServiceImpl() throws IOException {
+        this.fileDao = new FileDao();
+        this.fileCollectionDao = new FileCollectionDao();
+    }
+
+    /**
+     * Creates a new file entry in the replica catalog
+     *
+     * @param fileModel
+     * @return
+     */
+    @Override
+    public String registerFileDetails(FileModel fileModel) throws 
FileManagerException {
+        try{
+            return fileDao.createFile(fileModel);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Updates an existing file information
+     *
+     * @param fileModel
+     */
+    @Override
+    public void updateFileDetails(FileModel fileModel) throws 
FileManagerException {
+        try{
+            fileDao.updateFile(fileModel);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Deletes the specified file details entry
+     *
+     * @param fileId
+     */
+    @Override
+    public void deleteFileDetails(String fileId) throws FileManagerException {
+        try{
+            fileDao.deleteFile(fileId);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Retrieves file details for the specified file id
+     *
+     * @param fileId
+     * @return
+     */
+    @Override
+    public FileModel getFileDetails(String fileId) throws FileManagerException 
{
+        try{
+            return fileDao.getFile(fileId);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Create new file collection entry
+     *
+     * @param fileCollectionModel
+     * @return
+     * @throws FileManagerException
+     */
+    @Override
+    public String registerFileCollection(FileCollectionModel 
fileCollectionModel) throws FileManagerException {
+        try{
+            return fileCollectionDao.createFileCollection(fileCollectionModel);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Update existing file collection
+     *
+     * @param fileCollectionModel
+     * @throws FileManagerException
+     */
+    @Override
+    public void updateFileCollection(FileCollectionModel fileCollectionModel) 
throws FileManagerException {
+        try{
+            fileCollectionDao.updateFileCollection(fileCollectionModel);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Delete exisiting file collection
+     *
+     * @param collectionId
+     * @throws FileManagerException
+     */
+    @Override
+    public void deleteFileCollection(String collectionId) throws 
FileManagerException {
+        try{
+            fileCollectionDao.deleteFileCollection(collectionId);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+
+    /**
+     * Retrieve file collection specifying the collection id
+     *
+     * @param collectionId
+     * @return
+     * @throws FileManagerException
+     */
+    @Override
+    public FileCollectionModel getFileCollection(String collectionId) throws 
FileManagerException {
+        try{
+            return fileCollectionDao.getFileCollection(collectionId);
+        }catch (Exception ex){
+            logger.error(ex.getMessage(), ex);
+            throw new FileManagerException(ex);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestDeserializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestDeserializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestDeserializer.java
deleted file mode 100644
index 8b7e481..0000000
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestDeserializer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * 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.apache.airavata.file.manager.core.db.conversion;
-
-import org.apache.airavata.model.file.FileTransferRequest;
-import org.apache.thrift.TException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FileTransferRequestDeserializer extends
-        AbstractThriftDeserializer<FileTransferRequest._Fields, 
FileTransferRequest> {
-
-    @Override
-    protected FileTransferRequest._Fields getField(final String fieldName) {
-        return FileTransferRequest._Fields.valueOf(fieldName);
-    }
-
-    @Override
-    protected FileTransferRequest newInstance() {
-        return new FileTransferRequest();
-    }
-
-    @Override
-    protected void validate(final FileTransferRequest instance) throws 
TException {
-        instance.validate();
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestSerializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestSerializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestSerializer.java
deleted file mode 100644
index 64114e0..0000000
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/FileTransferRequestSerializer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * 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.apache.airavata.file.manager.core.db.conversion;
-
-import org.apache.airavata.model.file.FileTransferRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FileTransferRequestSerializer extends
-        AbstractThriftSerializer<FileTransferRequest._Fields, 
FileTransferRequest> {
-    private final static Logger logger = 
LoggerFactory.getLogger(FileTransferRequestSerializer.class);
-
-    @Override
-    protected FileTransferRequest._Fields[] getFieldValues() {
-        return FileTransferRequest._Fields.values();
-    }
-
-    @Override
-    protected Class<FileTransferRequest> getThriftClass() {
-        return null;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/ModelConversionHelper.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/ModelConversionHelper.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/ModelConversionHelper.java
index f307d2d..9aac5af 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/ModelConversionHelper.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/ModelConversionHelper.java
@@ -24,7 +24,18 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.Version;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.module.SimpleModule;
-import org.apache.airavata.model.file.FileTransferRequest;
+import 
org.apache.airavata.file.manager.core.db.conversion.metadata.MetadataDeserializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.metadata.MetadataSerializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.transfer.FileTransferRequestDeserializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.transfer.FileTransferRequestSerializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.replica.FileCollectionDeserializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.replica.FileCollectionSerializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.replica.FileDeserializer;
+import 
org.apache.airavata.file.manager.core.db.conversion.replica.FileSerializer;
+import org.apache.airavata.model.file.metadata.MetadataModel;
+import org.apache.airavata.model.file.transfer.FileTransferRequestModel;
+import org.apache.airavata.model.file.replica.FileCollectionModel;
+import org.apache.airavata.model.file.replica.FileModel;
 import org.apache.thrift.TBase;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,8 +63,17 @@ public class ModelConversionHelper {
         SimpleModule module = new SimpleModule("FileManager",
                 new Version(1,0,0,null,null,null));
 
-        module.addSerializer(FileTransferRequest.class, new 
FileTransferRequestSerializer());
-        module.addDeserializer(FileTransferRequest.class, new 
FileTransferRequestDeserializer());
+        module.addSerializer(FileTransferRequestModel.class, new 
FileTransferRequestSerializer());
+        module.addDeserializer(FileTransferRequestModel.class, new 
FileTransferRequestDeserializer());
+
+        module.addSerializer(FileModel.class, new FileSerializer());
+        module.addDeserializer(FileModel.class, new FileDeserializer());
+
+        module.addSerializer(FileCollectionModel.class, new 
FileCollectionSerializer());
+        module.addDeserializer(FileCollectionModel.class, new 
FileCollectionDeserializer());
+
+        module.addSerializer(MetadataModel.class, new MetadataSerializer());
+        module.addDeserializer(MetadataModel.class, new 
MetadataDeserializer());
 
         objectMapper.registerModule(module);
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataDeserializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataDeserializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataDeserializer.java
new file mode 100644
index 0000000..8323957
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataDeserializer.java
@@ -0,0 +1,45 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.metadata;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftDeserializer;
+import org.apache.airavata.model.file.metadata.MetadataModel;
+import org.apache.airavata.model.file.transfer.FileTransferRequestModel;
+import org.apache.thrift.TException;
+
+public class MetadataDeserializer extends
+        AbstractThriftDeserializer<MetadataModel._Fields, MetadataModel> {
+
+    @Override
+    protected MetadataModel._Fields getField(final String fieldName) {
+        return MetadataModel._Fields.valueOf(fieldName);
+    }
+
+    @Override
+    protected MetadataModel newInstance() {
+        return new MetadataModel();
+    }
+
+    @Override
+    protected void validate(final MetadataModel instance) throws TException {
+        instance.validate();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataSerializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataSerializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataSerializer.java
new file mode 100644
index 0000000..d527290
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/metadata/MetadataSerializer.java
@@ -0,0 +1,42 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.metadata;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftSerializer;
+import org.apache.airavata.model.file.metadata.MetadataModel;
+import org.apache.airavata.model.file.transfer.FileTransferRequestModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MetadataSerializer extends
+        AbstractThriftSerializer<MetadataModel._Fields, MetadataModel> {
+    private final static Logger logger = 
LoggerFactory.getLogger(MetadataSerializer.class);
+
+    @Override
+    protected MetadataModel._Fields[] getFieldValues() {
+        return MetadataModel._Fields.values();
+    }
+
+    @Override
+    protected Class<MetadataModel> getThriftClass() {
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionDeserializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionDeserializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionDeserializer.java
new file mode 100644
index 0000000..2953c70
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionDeserializer.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.replica;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftDeserializer;
+import org.apache.airavata.model.file.replica.FileCollectionModel;
+import org.apache.thrift.TException;
+
+public class FileCollectionDeserializer extends
+        AbstractThriftDeserializer<FileCollectionModel._Fields, 
FileCollectionModel> {
+
+    @Override
+    protected FileCollectionModel._Fields getField(final String fieldName) {
+        return FileCollectionModel._Fields.valueOf(fieldName);
+    }
+
+    @Override
+    protected FileCollectionModel newInstance() {
+        return new FileCollectionModel();
+    }
+
+    @Override
+    protected void validate(final FileCollectionModel instance) throws 
TException {
+        instance.validate();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionSerializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionSerializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionSerializer.java
new file mode 100644
index 0000000..a57363c
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileCollectionSerializer.java
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.replica;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftSerializer;
+import org.apache.airavata.model.file.replica.FileCollectionModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FileCollectionSerializer extends
+        AbstractThriftSerializer<FileCollectionModel._Fields, 
FileCollectionModel> {
+    private final static Logger logger = 
LoggerFactory.getLogger(FileCollectionSerializer.class);
+
+    @Override
+    protected FileCollectionModel._Fields[] getFieldValues() {
+        return FileCollectionModel._Fields.values();
+    }
+
+    @Override
+    protected Class<FileCollectionModel> getThriftClass() {
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileDeserializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileDeserializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileDeserializer.java
new file mode 100644
index 0000000..ba43ca1
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileDeserializer.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.replica;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftDeserializer;
+import org.apache.airavata.model.file.replica.FileModel;
+import org.apache.thrift.TException;
+
+public class FileDeserializer extends
+        AbstractThriftDeserializer<FileModel._Fields, FileModel> {
+
+    @Override
+    protected FileModel._Fields getField(final String fieldName) {
+        return FileModel._Fields.valueOf(fieldName);
+    }
+
+    @Override
+    protected FileModel newInstance() {
+        return new FileModel();
+    }
+
+    @Override
+    protected void validate(final FileModel instance) throws TException {
+        instance.validate();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileSerializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileSerializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileSerializer.java
new file mode 100644
index 0000000..eeb5c01
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/replica/FileSerializer.java
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.replica;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftSerializer;
+import org.apache.airavata.model.file.replica.FileModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FileSerializer extends
+        AbstractThriftSerializer<FileModel._Fields, FileModel> {
+    private final static Logger logger = 
LoggerFactory.getLogger(FileSerializer.class);
+
+    @Override
+    protected FileModel._Fields[] getFieldValues() {
+        return FileModel._Fields.values();
+    }
+
+    @Override
+    protected Class<FileModel> getThriftClass() {
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestDeserializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestDeserializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestDeserializer.java
new file mode 100644
index 0000000..93d200c
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestDeserializer.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.transfer;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftDeserializer;
+import org.apache.airavata.model.file.transfer.FileTransferRequestModel;
+import org.apache.thrift.TException;
+
+public class FileTransferRequestDeserializer extends
+        AbstractThriftDeserializer<FileTransferRequestModel._Fields, 
FileTransferRequestModel> {
+
+    @Override
+    protected FileTransferRequestModel._Fields getField(final String 
fieldName) {
+        return FileTransferRequestModel._Fields.valueOf(fieldName);
+    }
+
+    @Override
+    protected FileTransferRequestModel newInstance() {
+        return new FileTransferRequestModel();
+    }
+
+    @Override
+    protected void validate(final FileTransferRequestModel instance) throws 
TException {
+        instance.validate();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestSerializer.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestSerializer.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestSerializer.java
new file mode 100644
index 0000000..4e4dc70
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/conversion/transfer/FileTransferRequestSerializer.java
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.conversion.transfer;
+
+import 
org.apache.airavata.file.manager.core.db.conversion.AbstractThriftSerializer;
+import org.apache.airavata.model.file.transfer.FileTransferRequestModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FileTransferRequestSerializer extends
+        AbstractThriftSerializer<FileTransferRequestModel._Fields, 
FileTransferRequestModel> {
+    private final static Logger logger = 
LoggerFactory.getLogger(FileTransferRequestSerializer.class);
+
+    @Override
+    protected FileTransferRequestModel._Fields[] getFieldValues() {
+        return FileTransferRequestModel._Fields.values();
+    }
+
+    @Override
+    protected Class<FileTransferRequestModel> getThriftClass() {
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileCollectionDao.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileCollectionDao.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileCollectionDao.java
new file mode 100644
index 0000000..c9d29d6
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileCollectionDao.java
@@ -0,0 +1,93 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.dao;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.mongodb.*;
+import com.mongodb.util.JSON;
+import 
org.apache.airavata.file.manager.core.db.conversion.ModelConversionHelper;
+import org.apache.airavata.file.manager.core.db.utils.MongoUtils;
+import org.apache.airavata.file.manager.cpi.FileManagerConstants;
+import org.apache.airavata.model.file.replica.FileCollectionModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.UUID;
+
+public class FileCollectionDao {
+    private final static Logger logger = 
LoggerFactory.getLogger(FileCollectionDao.class);
+
+    private static final String FILE_COLLECTION_COLLECTION_NAME = 
"collection-models";
+    private DBCollection collection;
+    private ModelConversionHelper modelConversionHelper;
+
+    private static final String COLLECTION_ID = "collection_id";
+
+    public FileCollectionDao() throws IOException {
+        collection = 
MongoUtils.getFileManagerRegistry().getCollection(FILE_COLLECTION_COLLECTION_NAME);
+        modelConversionHelper = new ModelConversionHelper();
+        collection.dropIndexes();
+        initIndexes();
+    }
+
+    /**
+     * If indexes are already defined this will simply ignore them
+     */
+    private void initIndexes() {
+        collection.createIndex(new BasicDBObject(COLLECTION_ID, 1), new 
BasicDBObject("unique", true));
+    }
+
+    public String createFileCollection(FileCollectionModel 
fileCollectionModel) throws JsonProcessingException {
+        
fileCollectionModel.setCollectionId(FileManagerConstants.AIRAVATA_COLLECTION_ID_PREFIX
 + UUID.randomUUID().toString());
+        WriteResult result = collection.insert((DBObject) JSON.parse(
+                modelConversionHelper.serializeObject(fileCollectionModel)));
+        logger.debug("No of inserted results " + result.getN());
+        return fileCollectionModel.getCollectionId();
+    }
+
+    public void updateFileCollection(FileCollectionModel fileCollectionModel) 
throws JsonProcessingException {
+        DBObject query = BasicDBObjectBuilder.start().add(
+                COLLECTION_ID, fileCollectionModel.getCollectionId()).get();
+        WriteResult result = collection.update(query, (DBObject) JSON.parse(
+                modelConversionHelper.serializeObject(fileCollectionModel)));
+        logger.debug("No of updated results " + result.getN());
+    }
+
+    public void deleteFileCollection(String collectionId){
+        DBObject query = BasicDBObjectBuilder.start().add(
+                COLLECTION_ID,collectionId).get();
+        WriteResult result = collection.remove(query);
+        logger.debug("No of removed file model requests " + result.getN());
+    }
+
+    public FileCollectionModel getFileCollection(String collectionId) throws 
IOException {
+
+        DBObject criteria = new BasicDBObject(COLLECTION_ID, collectionId);
+        DBObject doc = collection.findOne(criteria);
+        if (doc != null) {
+            String json = doc.toString();
+            return (FileCollectionModel) 
modelConversionHelper.deserializeObject(
+                    FileCollectionModel.class, json);
+        }
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileDao.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileDao.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileDao.java
new file mode 100644
index 0000000..ac6a1df
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileDao.java
@@ -0,0 +1,93 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.dao;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.mongodb.*;
+import com.mongodb.util.JSON;
+import 
org.apache.airavata.file.manager.core.db.conversion.ModelConversionHelper;
+import org.apache.airavata.file.manager.core.db.utils.MongoUtils;
+import org.apache.airavata.file.manager.cpi.FileManagerConstants;
+import org.apache.airavata.model.file.replica.FileModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.UUID;
+
+public class FileDao {
+    private final static Logger logger = 
LoggerFactory.getLogger(FileDao.class);
+
+    private static final String FILE_MODELS_COLLECTION_NAME = "file-models";
+    private DBCollection collection;
+    private ModelConversionHelper modelConversionHelper;
+
+    private static final String FILE_ID = "file_id";
+
+    public FileDao() throws IOException {
+        collection = 
MongoUtils.getFileManagerRegistry().getCollection(FILE_MODELS_COLLECTION_NAME);
+        modelConversionHelper = new ModelConversionHelper();
+        collection.dropIndexes();
+        initIndexes();
+    }
+
+    /**
+     * If indexes are already defined this will simply ignore them
+     */
+    private void initIndexes() {
+        collection.createIndex(new BasicDBObject(FILE_ID, 1), new 
BasicDBObject("unique", true));
+    }
+
+    public String createFile(FileModel fileModel) throws 
JsonProcessingException {
+        fileModel.setFileId(FileManagerConstants.AIRAVATA_FILE_ID_PREFIX + 
UUID.randomUUID().toString());
+        WriteResult result = collection.insert((DBObject) JSON.parse(
+                modelConversionHelper.serializeObject(fileModel)));
+        logger.debug("No of inserted results " + result.getN());
+        return fileModel.getFileId();
+    }
+
+    public void updateFile(FileModel fileModel) throws JsonProcessingException 
{
+        DBObject query = BasicDBObjectBuilder.start().add(
+                FILE_ID, fileModel.getFileId()).get();
+        WriteResult result = collection.update(query, (DBObject) JSON.parse(
+                modelConversionHelper.serializeObject(fileModel)));
+        logger.debug("No of updated results " + result.getN());
+    }
+
+    public void deleteFile(String fileId){
+        DBObject query = BasicDBObjectBuilder.start().add(
+                FILE_ID,fileId).get();
+        WriteResult result = collection.remove(query);
+        logger.debug("No of removed file model requests " + result.getN());
+    }
+
+    public FileModel getFile(String fileId) throws IOException {
+
+        DBObject criteria = new BasicDBObject(FILE_ID, fileId);
+        DBObject doc = collection.findOne(criteria);
+        if (doc != null) {
+            String json = doc.toString();
+            return (FileModel) modelConversionHelper.deserializeObject(
+                    FileModel.class, json);
+        }
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileTransferRequestDao.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileTransferRequestDao.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileTransferRequestDao.java
index 142fa13..afae6d0 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileTransferRequestDao.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/FileTransferRequestDao.java
@@ -25,16 +25,11 @@ import com.mongodb.*;
 import com.mongodb.util.JSON;
 import 
org.apache.airavata.file.manager.core.db.conversion.ModelConversionHelper;
 import org.apache.airavata.file.manager.core.db.utils.MongoUtils;
-import org.apache.airavata.model.file.FileTransferRequest;
-import org.apache.airavata.registry.core.experiment.catalog.model.Gateway;
-import org.apache.airavata.registry.cpi.RegistryException;
+import org.apache.airavata.model.file.transfer.FileTransferRequestModel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.UUID;
 
 public class FileTransferRequestDao {
@@ -60,58 +55,48 @@ public class FileTransferRequestDao {
         collection.createIndex(new BasicDBObject(TRANSFER_ID, 1), new 
BasicDBObject("unique", true));
     }
 
-    public List<FileTransferRequest> getAllFileTransferRequests() throws 
IOException {
-        List<FileTransferRequest> fileTransferRequestList = new ArrayList();
-        DBCursor cursor = collection.find();
-        for (DBObject document : cursor) {
-            fileTransferRequestList.add((FileTransferRequest) 
modelConversionHelper.deserializeObject(
-                    FileTransferRequest.class, document.toString()));
-        }
-        return fileTransferRequestList;
-    }
-
-    public String createFileTransferRequest(FileTransferRequest 
fileTransferRequest) throws JsonProcessingException {
-        fileTransferRequest.setTransferId(UUID.randomUUID().toString());
+    public String createFileTransferRequest(FileTransferRequestModel 
fileTransferRequestModel) throws JsonProcessingException {
+        fileTransferRequestModel.setTransferId(UUID.randomUUID().toString());
         WriteResult result = collection.insert((DBObject) JSON.parse(
-                modelConversionHelper.serializeObject(fileTransferRequest)));
+                
modelConversionHelper.serializeObject(fileTransferRequestModel)));
         logger.debug("No of inserted results " + result.getN());
-        return fileTransferRequest.getTransferId();
+        return fileTransferRequestModel.getTransferId();
     }
 
-    public void updateFileTransferRequest(FileTransferRequest 
fileTransferRequest) throws JsonProcessingException {
+    public void updateFileTransferRequest(FileTransferRequestModel 
fileTransferRequestModel) throws JsonProcessingException {
         DBObject query = BasicDBObjectBuilder.start().add(
-                TRANSFER_ID, fileTransferRequest.getTransferId()).get();
+                TRANSFER_ID, fileTransferRequestModel.getTransferId()).get();
         WriteResult result = collection.update(query, (DBObject) JSON.parse(
-                modelConversionHelper.serializeObject(fileTransferRequest)));
+                
modelConversionHelper.serializeObject(fileTransferRequestModel)));
         logger.debug("No of updated results " + result.getN());
     }
 
-    public void deleteFileTransferRequest(FileTransferRequest 
fileTransferRequest){
+    public void deleteFileTransferRequest(String trasnferId){
         DBObject query = BasicDBObjectBuilder.start().add(
-                TRANSFER_ID, fileTransferRequest.getTransferId()).get();
+                TRANSFER_ID, trasnferId).get();
         WriteResult result = collection.remove(query);
         logger.debug("No of removed file transfer requests " + result.getN());
     }
 
-    public FileTransferRequest getFileTransferRequest(String transferId) 
throws IOException {
+    public FileTransferRequestModel getFileTransferRequest(String transferId) 
throws IOException {
 
         DBObject criteria = new BasicDBObject(TRANSFER_ID, transferId);
         DBObject doc = collection.findOne(criteria);
         if (doc != null) {
             String json = doc.toString();
-            return (FileTransferRequest) 
modelConversionHelper.deserializeObject(
-                    FileTransferRequest.class, json);
+            return (FileTransferRequestModel) 
modelConversionHelper.deserializeObject(
+                    FileTransferRequestModel.class, json);
         }
         return null;
     }
 
     public static void main(String[] args) throws IOException {
-        FileTransferRequest fileTransferRequest = new FileTransferRequest();
-        fileTransferRequest.setSrcHostCredToken("djkalbsbdaslfbalsfbslf");
-        fileTransferRequest.setSrcFilePath("test-file-path");
+        FileTransferRequestModel fileTransferRequestModel = new 
FileTransferRequestModel();
+        fileTransferRequestModel.setSrcHostCredToken("djkalbsbdaslfbalsfbslf");
+        fileTransferRequestModel.setSrcFilePath("test-file-path");
         FileTransferRequestDao fileTransferRequestDao = new 
FileTransferRequestDao();
-        String transferId = 
fileTransferRequestDao.createFileTransferRequest(fileTransferRequest);
-        fileTransferRequest = 
fileTransferRequestDao.getFileTransferRequest(transferId);
-        System.out.println("Transfer Id:" + 
fileTransferRequest.getTransferId());
+        String transferId = 
fileTransferRequestDao.createFileTransferRequest(fileTransferRequestModel);
+        fileTransferRequestModel = 
fileTransferRequestDao.getFileTransferRequest(transferId);
+        System.out.println("Transfer Id:" + 
fileTransferRequestModel.getTransferId());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/MetadataDao.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/MetadataDao.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/MetadataDao.java
new file mode 100644
index 0000000..9f9d494
--- /dev/null
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/db/dao/MetadataDao.java
@@ -0,0 +1,94 @@
+/*
+ *
+ * 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.apache.airavata.file.manager.core.db.dao;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.mongodb.*;
+import com.mongodb.util.JSON;
+import 
org.apache.airavata.file.manager.core.db.conversion.ModelConversionHelper;
+import org.apache.airavata.file.manager.core.db.utils.MongoUtils;
+import org.apache.airavata.file.manager.cpi.FileManagerConstants;
+import org.apache.airavata.model.file.metadata.MetadataModel;
+import org.apache.airavata.model.file.replica.FileModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.UUID;
+
+public class MetadataDao {
+    private final static Logger logger = 
LoggerFactory.getLogger(MetadataDao.class);
+
+    private static final String METADATA_COLLECTION_NAME = "metadata-models";
+    private DBCollection collection;
+    private ModelConversionHelper modelConversionHelper;
+
+    private static final String METADATA_ID = "metadata_id";
+
+    public MetadataDao() throws IOException {
+        collection = 
MongoUtils.getFileManagerRegistry().getCollection(METADATA_COLLECTION_NAME);
+        modelConversionHelper = new ModelConversionHelper();
+        collection.dropIndexes();
+        initIndexes();
+    }
+
+    /**
+     * If indexes are already defined this will simply ignore them
+     */
+    private void initIndexes() {
+        collection.createIndex(new BasicDBObject(METADATA_ID, 1), new 
BasicDBObject("unique", true));
+    }
+
+    public String createMetadata(MetadataModel metadataModel) throws 
JsonProcessingException {
+        
metadataModel.setMetadataId(FileManagerConstants.AIRAVATA_METADATA_ID_PREFIX + 
UUID.randomUUID().toString());
+        WriteResult result = collection.insert((DBObject) JSON.parse(
+                modelConversionHelper.serializeObject(metadataModel)));
+        logger.debug("No of inserted results " + result.getN());
+        return metadataModel.getMetadataId();
+    }
+
+    public void updateMetadata(MetadataModel metadataModel) throws 
JsonProcessingException {
+        DBObject query = BasicDBObjectBuilder.start().add(
+                METADATA_ID, metadataModel.getMetadataId()).get();
+        WriteResult result = collection.update(query, (DBObject) JSON.parse(
+                modelConversionHelper.serializeObject(metadataModel)));
+        logger.debug("No of updated results " + result.getN());
+    }
+
+    public void deleteMetadata(String metadataId){
+        DBObject query = BasicDBObjectBuilder.start().add(
+                METADATA_ID,metadataId).get();
+        WriteResult result = collection.remove(query);
+        logger.debug("No of removed metadata model requests " + result.getN());
+    }
+
+    public MetadataModel getMetadata(String metadataId) throws IOException {
+
+        DBObject criteria = new BasicDBObject(METADATA_ID, metadataId);
+        DBObject doc = collection.findOne(criteria);
+        if (doc != null) {
+            String json = doc.toString();
+            return (MetadataModel) modelConversionHelper.deserializeObject(
+                    MetadataModel.class, json);
+        }
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/RemoteStorageClient.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/RemoteStorageClient.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/RemoteStorageClient.java
index 4293e2e..a9e743c 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/RemoteStorageClient.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/RemoteStorageClient.java
@@ -20,8 +20,7 @@
 */
 package org.apache.airavata.file.manager.core.remote.client;
 
-
-import org.apache.airavata.model.file.FileNode;
+import org.apache.airavata.model.file.transfer.LSEntryModel;
 
 import java.io.File;
 import java.util.List;
@@ -50,7 +49,7 @@ public interface RemoteStorageClient {
      * @return
      * @throws Exception
      */
-    List<FileNode> getDirectoryListing(String directoryPath) throws Exception;
+    List<LSEntryModel> getDirectoryListing(String directoryPath) throws 
Exception;
 
     /**
      * Move the specified file from source to destination within the same 
storage resource

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/http/HTTPStorageClient.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/http/HTTPStorageClient.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/http/HTTPStorageClient.java
index 85d2056..e829c3b 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/http/HTTPStorageClient.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/http/HTTPStorageClient.java
@@ -21,7 +21,7 @@
 package org.apache.airavata.file.manager.core.remote.client.http;
 
 import org.apache.airavata.file.manager.core.remote.client.RemoteStorageClient;
-import org.apache.airavata.model.file.FileNode;
+import org.apache.airavata.model.file.transfer.LSEntryModel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -31,14 +31,12 @@ import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.InputStream;
 import java.net.URL;
 import java.net.URLConnection;
 import java.nio.channels.Channels;
 import java.nio.channels.ReadableByteChannel;
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
-import java.security.Security;
 import java.util.List;
 import java.util.UUID;
 
@@ -131,7 +129,7 @@ public class HTTPStorageClient implements 
RemoteStorageClient {
      * @throws Exception
      */
     @Override
-    public List<FileNode> getDirectoryListing(String directoryPath) throws 
Exception {
+    public List<LSEntryModel> getDirectoryListing(String directoryPath) throws 
Exception {
         throw new UnsupportedOperationException();
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/scp/SCPStorageClient.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/scp/SCPStorageClient.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/scp/SCPStorageClient.java
index 2c2c0a6..559bdde 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/scp/SCPStorageClient.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/scp/SCPStorageClient.java
@@ -22,7 +22,7 @@ package 
org.apache.airavata.file.manager.core.remote.client.scp;
 
 import com.jcraft.jsch.*;
 import org.apache.airavata.file.manager.core.remote.client.RemoteStorageClient;
-import org.apache.airavata.model.file.FileNode;
+import org.apache.airavata.model.file.transfer.LSEntryModel;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -297,7 +297,7 @@ public class SCPStorageClient implements 
RemoteStorageClient {
      * @throws Exception
      */
     @Override
-    public List<FileNode> getDirectoryListing(String directoryPath) throws 
Exception {
+    public List<LSEntryModel> getDirectoryListing(String directoryPath) throws 
Exception {
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/sftp/SFTPStorageClient.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/sftp/SFTPStorageClient.java
 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/sftp/SFTPStorageClient.java
index 38275a9..b1d675a 100644
--- 
a/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/sftp/SFTPStorageClient.java
+++ 
b/modules/file-manager/file-manager-core/src/main/java/org/apache/airavata/file/manager/core/remote/client/sftp/SFTPStorageClient.java
@@ -25,8 +25,8 @@ import com.jcraft.jsch.JSch;
 import com.jcraft.jsch.JSchException;
 import com.jcraft.jsch.Session;
 import org.apache.airavata.file.manager.core.remote.client.RemoteStorageClient;
-import org.apache.airavata.model.file.FileNode;
-import org.apache.airavata.model.file.FileNodeTypes;
+import org.apache.airavata.model.file.transfer.LSEntryModel;
+import org.apache.airavata.model.file.transfer.LSEntryType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -100,7 +100,7 @@ public class SFTPStorageClient implements 
RemoteStorageClient {
      * @throws Exception
      */
     @Override
-    public List<FileNode> getDirectoryListing(String directoryPath) throws 
Exception {
+    public List<LSEntryModel> getDirectoryListing(String directoryPath) throws 
Exception {
         if(directoryPath.endsWith(File.separator)){
             directoryPath = directoryPath.substring(0, directoryPath.length() 
-1);
         }
@@ -111,17 +111,17 @@ public class SFTPStorageClient implements 
RemoteStorageClient {
         }
         sftpChannel.cd(directoryPath);
         Vector<ChannelSftp.LsEntry> lsEntryVector = 
sftpChannel.ls(directoryPath);
-        ArrayList<FileNode> fileNodeList = new ArrayList<>();
+        ArrayList<LSEntryModel> fileNodeList = new ArrayList<>();
         lsEntryVector.stream().forEach(lsEntry -> {
-            FileNode fileNode = new FileNode();
+            LSEntryModel fileNode = new LSEntryModel();
             fileNode.setName(lsEntry.getFilename());
             fileNode.setPath(finalDirPath + File.separator + 
lsEntry.getFilename());
             fileNode.setStorageHostName(hostName);
             fileNode.setSize(lsEntry.getAttrs().getSize());
             if(lsEntry.getAttrs().isDir())
-                fileNode.setType(FileNodeTypes.DIRECTORY);
+                fileNode.setType(LSEntryType.DIRECTORY);
             else
-                fileNode.setType(FileNodeTypes.FILE);
+                fileNode.setType(LSEntryType.FILE);
             fileNodeList.add(fileNode);
         });
         return fileNodeList;

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManager.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManager.java
 
b/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManager.java
index 8b9f9f4..39b8fa3 100644
--- 
a/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManager.java
+++ 
b/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManager.java
@@ -21,4 +21,22 @@
 package org.apache.airavata.file.manager.cpi;
 
 public interface FileManager {
+
+    /**
+     * Return file transfer service instance
+     * @return
+     */
+    FileTransferService getFileTransferService() throws FileManagerException;
+
+    /**
+     * Return replica catalog service instance
+     * @return
+     */
+    ReplicaCatalogService getReplicaCatalogService() throws 
FileManagerException;
+
+    /**
+     * Return metadata catalog service
+     * @return
+     */
+    MetadataCatalogService getMetadataCatalogService() throws 
FileManagerException;
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/b61cfcd3/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManagerConstants.java
----------------------------------------------------------------------
diff --git 
a/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManagerConstants.java
 
b/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManagerConstants.java
index 98ba692..2fd8138 100644
--- 
a/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManagerConstants.java
+++ 
b/modules/file-manager/file-manager-cpi/src/main/java/org/apache/airavata/file/manager/cpi/FileManagerConstants.java
@@ -25,4 +25,8 @@ import org.slf4j.LoggerFactory;
 
 public class FileManagerConstants {
     private final static Logger logger = 
LoggerFactory.getLogger(FileManagerConstants.class);
+
+    public static String AIRAVATA_FILE_ID_PREFIX = "airavata-file://";
+    public static String AIRAVATA_COLLECTION_ID_PREFIX = 
"airavata-collection://";
+    public static final String AIRAVATA_METADATA_ID_PREFIX = 
"airavata-metadata://";
 }
\ No newline at end of file

Reply via email to