/** * */ package net.i2geo.comped.service.impl; import java.util.Iterator; import java.util.List; import java.util.Set; import net.i2geo.comped.dao.AbstractTopicDao; import net.i2geo.comped.dao.ConcreteCompetencyDao; import net.i2geo.comped.dao.ConcreteTopicDao; import net.i2geo.comped.model.AbstractTopic; import net.i2geo.comped.model.ConcreteCompetency; import net.i2geo.comped.model.ConcreteTopic; import net.i2geo.comped.model.Topic; import net.i2geo.comped.service.AbstractTopicManager; /** * @author Martin Homik * */ public class AbstractTopicManagerImpl extends GenericTopicManagerImpl<AbstractTopic> implements AbstractTopicManager { private AbstractTopicDao tgDao = null; private ConcreteTopicDao ctDao = null; private ConcreteCompetencyDao ccDao = null; public AbstractTopicManagerImpl(AbstractTopicDao abstractTopicDao) { super(abstractTopicDao); this.tgDao = abstractTopicDao; } public void setConcreteCompetencyDao(ConcreteCompetencyDao ccDao) { this.ccDao = ccDao; } public void setConcreteTopicDao(ConcreteTopicDao ctDao) { this.ctDao = ctDao; } // detach children abstract topics public void detach(AbstractTopic topic) { topic.setParent(null); save(topic); // detach from linked abstract topics for (Iterator<AbstractTopic> iter = topic.getChildren().iterator(); iter.hasNext();) { AbstractTopic t = get(iter.next().getId()); List<AbstractTopic> parents = t.getParent(); parents.remove(topic); save(t); } // detach from linked concrete topics for (Iterator<ConcreteTopic> iter = topic.getItems().iterator(); iter.hasNext();) { ConcreteTopic t = ctDao.get(iter.next().getId()); List<AbstractTopic> parents = t.getAts(); parents.remove(topic); ctDao.save(t); } // detach concrete competencies that have a link to this concrete topic List<ConcreteCompetency> ccs = tgDao.findLinkedConcreteCompetency(topic); for (Iterator<ConcreteCompetency> iter = ccs.iterator(); iter.hasNext();) { ConcreteCompetency cc = ccDao.get(iter.next().getId()); Set<Topic> topics = cc.getTopics(); topics.remove(topic); ccDao.save(cc); } remove(topic.getId()); } }