001/* 002 * Licensed to DuraSpace under one or more contributor license agreements. 003 * See the NOTICE file distributed with this work for additional information 004 * regarding copyright ownership. 005 * 006 * DuraSpace licenses this file to you under the Apache License, 007 * Version 2.0 (the "License"); you may not use this file except in 008 * compliance with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.fcrepo.kernel.modeshape.services; 019 020import static org.fcrepo.kernel.modeshape.FedoraRepositoryImpl.getJcrRepository; 021import static org.fcrepo.kernel.modeshape.FedoraSessionImpl.getJcrSession; 022import static org.fcrepo.kernel.modeshape.services.ServiceHelpers.getRepositoryCount; 023import static org.slf4j.LoggerFactory.getLogger; 024 025import org.fcrepo.kernel.api.FedoraSession; 026import org.fcrepo.kernel.api.FedoraRepository; 027import org.fcrepo.kernel.api.exception.RepositoryRuntimeException; 028 029import java.io.File; 030import java.util.ArrayList; 031import java.util.Collection; 032 033 034import javax.inject.Inject; 035import javax.jcr.Repository; 036import javax.jcr.RepositoryException; 037import javax.jcr.Session; 038 039import org.fcrepo.kernel.api.services.RepositoryService; 040import org.modeshape.jcr.api.RepositoryManager; 041import org.slf4j.Logger; 042import org.springframework.stereotype.Component; 043 044/** 045 * Service for repository-wide management and querying 046 * 047 * @author Chris Beer 048 * @since Mar 11, 2013 049 */ 050@Component 051public class RepositoryServiceImpl extends AbstractService implements RepositoryService { 052 053 @Inject 054 private FedoraRepository repository; 055 056 private static final Logger LOGGER = getLogger(RepositoryServiceImpl.class); 057 058 /** 059 * Calculate the total size of all the binary properties in the repository 060 * 061 * @return size in bytes 062 */ 063 @Override 064 public Long getRepositorySize() { 065 try { 066 067 LOGGER.debug("Calculating repository size from index"); 068 final Repository repo = getJcrRepository(repository); 069 070 // Differentiating between the local getRepositorySize and 071 // ServiceHelpers 072 return ServiceHelpers.getRepositorySize(repo); 073 } catch (final RepositoryException e) { 074 throw new RepositoryRuntimeException(e); 075 } 076 } 077 078 /* 079 * (non-Javadoc) 080 * @see 081 * org.fcrepo.kernel.api.services.RepositoryService#getRepositoryObjectCount() 082 */ 083 @Override 084 public Long getRepositoryObjectCount() { 085 final Repository repo = getJcrRepository(repository); 086 try { 087 return getRepositoryCount(repo); 088 } catch (final RepositoryException e) { 089 throw new RepositoryRuntimeException(e); 090 } 091 } 092 093 /* 094 * (non-Javadoc) 095 * @see 096 * org.fcrepo.kernel.api.services.RepositoryService#backupRepository(javax.jcr 097 * .Session, java.io.File) 098 */ 099 @Override 100 public Collection<Throwable> backupRepository(final FedoraSession session, 101 final File backupDirectory) { 102 final Session jcrSession = getJcrSession(session); 103 try { 104 final RepositoryManager repoMgr = ((org.modeshape.jcr.api.Session) jcrSession) 105 .getWorkspace() 106 .getRepositoryManager(); 107 108 final Collection<Throwable> problems = new ArrayList<>(); 109 110 repoMgr.backupRepository(backupDirectory).forEach(x -> problems.add(x.getThrowable())); 111 112 return problems; 113 } catch (final RepositoryException e) { 114 throw new RepositoryRuntimeException(e); 115 } 116 } 117 118 /* 119 * (non-Javadoc) 120 * @see 121 * org.fcrepo.kernel.api.services.RepositoryService#restoreRepository(javax. 122 * jcr.Session, java.io.File) 123 */ 124 @Override 125 public Collection<Throwable> restoreRepository(final FedoraSession session, 126 final File backupDirectory) { 127 final Session jcrSession = getJcrSession(session); 128 try { 129 final RepositoryManager repoMgr = ((org.modeshape.jcr.api.Session) jcrSession) 130 .getWorkspace() 131 .getRepositoryManager(); 132 133 final Collection<Throwable> problems = new ArrayList<>(); 134 135 repoMgr.restoreRepository(backupDirectory).forEach(x -> problems.add(x.getThrowable())); 136 137 return problems; 138 } catch (final RepositoryException e) { 139 throw new RepositoryRuntimeException(e); 140 } 141 } 142 143}