package com.taobao.zeus.store.mysql; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.taobao.zeus.model.HostGroupCache; import com.taobao.zeus.store.HostGroupManager; import com.taobao.zeus.store.mysql.persistence.HostGroupPersistence; import com.taobao.zeus.store.mysql.persistence.HostRelationPersistence; import com.taobao.zeus.util.Environment; @SuppressWarnings("unchecked") public class MysqlHostGroupManager extends HibernateDaoSupport implements HostGroupManager{ public List<HostRelationPersistence> getAllHostRelations() { return (List<HostRelationPersistence>)getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("from com.taobao.zeus.store.mysql.persistence.HostRelationPersistence"); return query.list(); } }); } public List<HostRelationPersistence> getHostRelations(final String hostGroupId) { return (List<HostRelationPersistence>)getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("from com.taobao.zeus.store.mysql.persistence.HostRelationPersistence where hostGroupId=" + hostGroupId); return query.list(); } }); } @Override public Map<String,HostGroupCache> getAllHostGroupInfomations() { Map<String,HostGroupCache> informations = new HashMap<String,HostGroupCache>(); List<HostGroupPersistence> hostgroups = getAllHostGroup(); List<HostRelationPersistence> relations = getAllHostRelations(); for(HostGroupPersistence wg : hostgroups){ if (wg.getEffective() == 0) { continue; } HostGroupCache info = new HostGroupCache(); String id = wg.getId().toString(); info.setId(id); info.setCurrentPositon(0); info.setName(wg.getName()); info.setDescription(wg.getDescription()); List<String> hosts = new ArrayList<String>(); for(HostRelationPersistence r : relations){ if (wg.getId().equals(r.getHostGroupId())) { hosts.add(r.getHost()); } } info.setHosts(hosts); informations.put(id, info); } return informations; } @Override public List<HostGroupPersistence> getAllHostGroup(){ return (List<HostGroupPersistence>)getHibernateTemplate().execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("from com.taobao.zeus.store.mysql.persistence.HostGroupPersistence"); return query.list(); } }); } @Override public HostGroupPersistence getHostGroupName(String hostGroupId) { return (HostGroupPersistence) getHibernateTemplate().get(HostGroupPersistence.class, Integer.valueOf(hostGroupId)); } @Override public List<String> getPreemptionHost() { String id = Environment.getDefaultMasterGroupId(); List<HostRelationPersistence> hostRelations = getHostRelations(id); List<String> result = new ArrayList<String>(); for(HostRelationPersistence hostRalation : hostRelations){ result.add(hostRalation.getHost()); } return result; } }