/* * Copyright 2008-2011 Zuse Institute Berlin (ZIB) * * Licensed 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 de.zib.gndms.logic.model.dspace; import de.zib.gndms.common.model.gorfx.types.Order; import de.zib.gndms.infra.system.GNDMSystem; import de.zib.gndms.model.dspace.Subspace; import de.zib.gndms.model.gorfx.types.ModelIdHoldingOrder; import de.zib.gndms.model.util.GridResourceCache; import de.zib.gndms.neomodel.gorfx.Taskling; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Query; import java.util.List; import java.util.UUID; public class SubspaceProviderImpl extends GridResourceDAO< Subspace > implements SubspaceProvider { private GNDMSystem system; protected EntityManagerFactory emf; final private static String LIST_ALL_SLICES = "listSlicesOfSubspace"; public SubspaceProviderImpl( final EntityManagerFactory emf ) { super( emf, new GridResourceCache< Subspace >( Subspace.class, emf ), SetupSubspaceAction.class ); } protected String getListQuery( ) { return "listAllSubspaceIds"; } @Override public boolean exists( String subspace ) { return super.exists( subspace ); } @Override public List< String > list() { EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery( getListQuery() ); return query.getResultList(); } @Override public Taskling delete(final String subspaceId) throws NoSuchElementException { if( !exists( subspaceId ) ) { logger.info( "Illegal Access: subspace " + subspaceId + " cannot be deleted because it is not available." ); throw new NoSuchElementException( "Subspace " + subspaceId + " does not exist." ); } final DeleteSubspaceTaskAction deleteAction = new DeleteSubspaceTaskAction(); system.getInstanceDir().getSystemAccessInjector().injectMembers( deleteAction ); final Order order = new ModelIdHoldingOrder( subspaceId ); final String wid = UUID.randomUUID().toString(); logger.info( "Delete subspaceID (" + subspaceId + ") with tracking number " + wid ); final Taskling ling = system.submitTaskAction( deleteAction, order, wid ); invalidateCacheFor( subspaceId ); return ling; } @Override public void invalidate( final String subspaceId ) { invalidateCacheFor( subspaceId ); } @Inject public void setSystem(GNDMSystem system) { this.system = system; } /* @Override public long getDiskUsage( final String subspaceId ) { EntityManager em = emf.createEntityManager(); Query query = em.createNamedQuery( LIST_ALL_SLICES ); long usage = 0; for( Object o : query.getResultList() ) { final Slice sliceModel = Slice.class.cast( o ); de.zib.gndms.infra.dspace.Slice slice = new de.zib.gndms.infra.dspace.Slice( sliceModel ); usage += slice.getDiskUsage(); } return usage; } */ public EntityManagerFactory getEmf( ) { return emf; } @Inject public void setEmf( EntityManagerFactory emf ) { this.emf = emf; } }