/** * Abiquo community edition * cloud management application for hybrid clouds * Copyright (C) 2008-2010 - Abiquo Holdings S.L. * * This application is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC * LICENSE as published by the Free Software Foundation under * version 3 of the License * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * LESSER GENERAL PUBLIC LICENSE v.3 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package com.abiquo.server.core.infrastructure; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceException; import org.apache.commons.lang.StringUtils; import org.hibernate.Criteria; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Repository; import com.abiquo.server.core.common.persistence.DefaultDAOBase; import com.softwarementors.bzngine.entities.PersistentEntity; @Repository("jpaDatastoreDAO") public class DatastoreDAO extends DefaultDAOBase<Integer, Datastore> { public DatastoreDAO() { super(Datastore.class); } public DatastoreDAO(final EntityManager entityManager) { super(Datastore.class, entityManager); } public List<Datastore> findMachineDatastores(final Machine machine) { assert machine != null; assert isManaged2(machine); Criteria criteria = inMachine(machine); // createCriteria().createCriteria(Datastore.MACHINES_PROPERTY).add( // Restrictions.in(Machine.ID_PROPERTY, new Integer[] {machine.getId()})); criteria.addOrder(Order.asc(Datastore.NAME_PROPERTY)); List<Datastore> result = getResultList(criteria); return result; } /** * Use the ''datastoreUUID'' property in order to return all the representations of a shared * datastore. * * @return all the datastores with the same ''datastore uuid'' INCLUDING the provided datastore. */ public List<Datastore> findShares(final Datastore datastore) { if (datastore.getDatastoreUUID() == null) { throw new PersistenceException("Datastore doesn't have set the UUID"); } Criteria crit = createCriteria(sharedUuid(datastore.getDatastoreUUID())); return getResultList(crit); } /*** * Get the datastore with the provided UUID mounted on the target machine. (this call is * expected after ''datastoreSelection'' so the target machine will have the datastore) */ public Datastore findDatastore(final String uuid, final Machine machine) { Criteria criteria = inMachine(machine, uuid); return getSingleResult(criteria); } private Criteria inMachine(final Machine machine) { return createCriteria().createCriteria(Datastore.MACHINES_PROPERTY).add( Restrictions.in(PersistentEntity.ID_PROPERTY, new Integer[] {machine.getId()})); } private Criteria inMachine(final Machine machine, final String uuid) { return createCriteria(sharedUuid(uuid)).createCriteria(Datastore.MACHINES_PROPERTY).add( Restrictions.in(PersistentEntity.ID_PROPERTY, new Integer[] {machine.getId()})); } private static Criterion sharedUuid(final String uuid) { return Restrictions.eq(Datastore.DATASTORE_UUID_PROPERTY, uuid); } private static Criterion equalName(final String name) { assert !StringUtils.isEmpty(name); return Restrictions.eq(Datastore.NAME_PROPERTY, name); } public boolean existsAnyWithName(final String name) { assert !StringUtils.isEmpty(name); return this.existsAnyByCriterions(equalName(name)); } public boolean existsAnyOtherWithName(final Datastore entity, final String name) { assert entity != null; assert isManaged(entity); assert !StringUtils.isEmpty(name); return this.existsAnyOtherByCriterions(entity, equalName(name)); } private static Criterion equalDirectory(final String directory) { assert !StringUtils.isEmpty(directory); return Restrictions.eq(Datastore.DIRECTORY_PROPERTY, directory); } public boolean existsAnyWithDirectory(final String directory) { assert !StringUtils.isEmpty(directory); return this.existsAnyByCriterions(equalDirectory(directory)); } public boolean existsAnyOtherWithDirectory(final Datastore entity, final String directory) { assert entity != null; assert isManaged(entity); assert !StringUtils.isEmpty(directory); return this.existsAnyOtherByCriterions(entity, equalDirectory(directory)); } }