package io.milton.mini.controllers; import io.milton.annotations.ChildrenOf; import io.milton.annotations.Get; import io.milton.annotations.MakeCollection; import io.milton.annotations.Principal; import io.milton.annotations.PutChild; import io.milton.annotations.ResourceController; import io.milton.common.ModelAndView; import io.milton.http.Range; import io.milton.http.Request; import io.milton.mini.DataSessionManager; import io.milton.vfs.data.DataSession; import io.milton.vfs.db.Profile; import io.milton.vfs.db.Repository; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.inject.Inject; /** * * @author brad */ @ResourceController public class RepositoryController { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(RepositoryController.class); @Inject private DataSessionManager dataSessionManager; @Get public ModelAndView showRepositoryHome(MiltonMiniController.RepoHome repoHome, Request request) { ModelAndView mav = new ModelAndView("repositoriesHome",repoHome, "repoHome"); return mav; } @Get public ModelAndView showRepository(Repository repo, Request request) { DataSession dataSession = dataSessionManager.get(request, repo); DataSession.DirectoryNode rootNode = dataSession.getRootDataNode(); ModelAndView mav = new ModelAndView("repo",repo, "repoHome"); mav.getModel().put("rootDir", rootNode); return mav; } @ChildrenOf public List<DataSession.DataNode> getBranchMembers(Repository repo, Request request) { DataSession dataSession = dataSessionManager.get(request, repo); if (dataSession != null) { return dataSession.getRootDataNode().getChildren(); } else { return null; } } @ChildrenOf public List<DataSession.DataNode> getFolderMembers(DataSession.DirectoryNode dir) { return dir.getChildren(); } @MakeCollection public DataSession.DirectoryNode createCollection(Repository repo, String name, Request request, @Principal Profile user) throws IOException { DataSession dataSession = dataSessionManager.get(request, repo, true, user); return createCollection(dataSession.getRootDataNode(), name, repo, request, user); } @MakeCollection public DataSession.DirectoryNode createCollection(DataSession.DirectoryNode dir, String name, Repository repo, Request request, @Principal Profile user) throws IOException { DataSession.DirectoryNode newDir = dir.addDirectory(name); dataSessionManager.get(request, repo).save(user); return newDir; } @Get public void getFileContent(DataSession.FileNode fileNode, OutputStream out, Range range) throws IOException { if (range == null) { fileNode.writeContent(out); } else { fileNode.writeContent(out, range.getStart(), range.getFinish()); } } @PutChild public DataSession.FileNode createFile(Repository repo, String newName, InputStream inputStream, Request request, @Principal Profile user) throws IOException { DataSession dataSession = dataSessionManager.get(request, repo, true, user); return createFile(dataSession.getRootDataNode(), newName, inputStream, request, repo, user); } @PutChild public DataSession.FileNode createFile(DataSession.DirectoryNode parent, String newName, InputStream inputStream, Request request, Repository repo, @Principal Profile principal) throws IOException { log.trace("createNew: set content"); DataSession.FileNode newFileNode = parent.addFile(newName); newFileNode.setContent(inputStream); dataSessionManager.get(request, repo).save(principal); return newFileNode; } @PutChild public DataSession.FileNode updateFile(DataSession.FileNode file, InputStream in) throws IOException { file.setContent(in); return file; } }