View Javadoc

1   package com.neidetcher.petunia.service;
2   
3   import java.util.HashMap;
4   import java.util.List;
5   import java.util.Map;
6   
7   import org.apache.commons.logging.Log;
8   import org.apache.commons.logging.LogFactory;
9   import org.springframework.dao.OptimisticLockingFailureException;
10  import org.springframework.jdbc.JdbcUpdateAffectedIncorrectNumberOfRowsException;
11  import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
12  
13  public class KnowledgeDaoImpl extends SqlMapClientDaoSupport implements KnowledgeDao
14  {
15  
16     protected Log log = LogFactory.getLog(KnowledgeDaoImpl.class);
17  
18     @Override
19     public Knowledge save(Knowledge knowledge)
20     {
21        log.debug(knowledge.toString());
22  
23        if (knowledge.isNew())
24        {
25           log.debug("create");
26           knowledge.setVersion(0);
27           Integer newId;
28  
29           newId = (Integer) getSqlMapClientTemplate().insert("Knowledge.insert", knowledge);
30           knowledge.setId(newId);
31           return knowledge;
32        }
33  
34        log.debug("update");
35        try
36        {
37           getSqlMapClientTemplate().update("Knowledge.update", knowledge, 1);
38           knowledge.setVersion(knowledge.getVersion() + 1);
39           return knowledge;
40        }
41        catch (JdbcUpdateAffectedIncorrectNumberOfRowsException exception)
42        {
43           log.warn(exception.getMessage());
44           throw new OptimisticLockingFailureException(
45                 "Provided you have given an object with a valid ID, someone has written underneath you.  "
46                       + "Do another find and save.", exception);
47        }
48     }
49  
50     public Knowledge find(Integer id)
51     {
52        return (Knowledge) getSqlMapClientTemplate().queryForObject("Knowledge.findById", id);
53     }
54  
55     @Override
56     public List<Knowledge> findByTagName(String tagName)
57     {
58        return getSqlMapClientTemplate().queryForList("Knowledge.findByTagName", tagName);
59     }
60  
61     @Override
62     public List<Knowledge> findByCategoryId(Integer categoryId)
63     {
64        return getSqlMapClientTemplate().queryForList("Knowledge.findByCategoryId", categoryId);
65     }
66  
67     @Override
68     public List<String> findTags(Integer knowledgeId)
69     {
70        return getSqlMapClientTemplate().queryForList("Knowledge.findTags", knowledgeId);
71     }
72  
73     @Override
74     public void addTag(Integer knowledgeId, String tagName)
75     {
76        Map<String, String> parameterMap = new HashMap<String, String>();
77        parameterMap.put("knowledgeId", knowledgeId.toString());
78        parameterMap.put("tagName", tagName);
79  
80        getSqlMapClientTemplate().insert("Knowledge.addTag", parameterMap);
81     }
82  
83     public void removeTag(Integer knowledgeId, String tagName)
84     {
85        Map<String, String> parameterMap = new HashMap<String, String>();
86        parameterMap.put("knowledgeId", knowledgeId.toString());
87        parameterMap.put("tagName", tagName);
88  
89        getSqlMapClientTemplate().delete("Knowledge.removeTag", parameterMap);
90     }
91  }