package org.infoglue.cms.util.webdav; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; import org.infoglue.cms.controllers.kernel.impl.simple.AccessRightController; import org.infoglue.cms.controllers.kernel.impl.simple.RepositoryController; import org.infoglue.cms.entities.management.RepositoryVO; import org.infoglue.cms.exception.ConstraintException; import org.infoglue.cms.exception.SystemException; import org.infoglue.cms.security.InfoGluePrincipal; import com.bradmcevoy.common.Path; import com.bradmcevoy.http.Resource; import com.bradmcevoy.http.ResourceFactory; import com.bradmcevoy.http.exceptions.NotAuthorizedException; public class RepositoryResourceFactory implements ResourceFactory { private final static Logger logger = Logger.getLogger(RepositoryResourceFactory.class.getName()); public static final String REALM = "infoglue"; public RepositoryResourceFactory() { } public Resource getResource(String host, String p) { Path path = Path.path(p).getStripFirst(); Resource resource = InfogluePathResolver.resolvePath(path, this); if(logger.isInfoEnabled()) logger.info("Returning resource:" + resource); return resource; } public List<Resource> findAllRepositories() { if(logger.isInfoEnabled()) logger.info("Showing all repositories"); List<Resource> list = new ArrayList<Resource>(); RepositoryVO repository; try { List<RepositoryVO> repositories = RepositoryController.getController().getRepositoryVOList(); if(logger.isInfoEnabled()) logger.info("repositories:" + repositories.size()); Iterator<RepositoryVO> repositoriesIterator = repositories.iterator(); while(repositoriesIterator.hasNext()) { RepositoryVO repositoryVO = repositoriesIterator.next(); list.add( new RepositoryResource(repositoryVO) ); } } catch (ConstraintException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } return list; } public Resource findRepository(String name, InfoGluePrincipal principal) { RepositoryResource resource = null; if(logger.isInfoEnabled()) logger.info("find repository:" + name); RepositoryVO repository = null; try { repository = RepositoryController.getController().getRepositoryVOWithName(name); boolean hasAccess = AccessRightController.getController().getIsPrincipalAuthorized(principal, "Repository.Read", repository.getId().toString()); resource = new RepositoryResource(repository); if(!hasAccess) throw new NotAuthorizedException(resource); } catch (Exception e) { e.printStackTrace(); } return resource; } public String getSupportedLevels() { return "1,2"; } }