/** * * marcosnr * 30/03/2012 */ package au.org.aurin.wif.repo.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.ektorp.CouchDbConnector; import org.ektorp.support.CouchDbRepositorySupport; import org.ektorp.support.GenerateView; import org.ektorp.support.View; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import au.org.aurin.wif.exception.config.WifInvalidConfigException; import au.org.aurin.wif.exception.validate.WifInvalidInputException; import au.org.aurin.wif.io.CouchDBManager; import au.org.aurin.wif.io.CouchMapper; import au.org.aurin.wif.model.WifProject; import au.org.aurin.wif.repo.WifProjectDao; import au.org.aurin.wif.svc.WifKeys; // /** * The Class CouchWifProjectDao. */ @Component("WifProjectDao") public class CouchWifProjectDao implements WifProjectDao { /** The Constant LOGGER. */ private static final Logger LOGGER = LoggerFactory .getLogger(CouchWifProjectDao.class); /** The converter. */ @Autowired private CouchMapper converter; /** The manager. */ @Autowired private CouchDBManager manager; /** The repository. */ private WifProjectRepository repository; /** * Inits the. */ @PostConstruct public void init() { LOGGER.trace("Initializing version: " + WifKeys.WIF_KEY_VERSION); repository = new WifProjectRepository(manager.getDb()); } /** * Cleanup. */ @PreDestroy public void cleanup() { LOGGER.trace("successfully cleared! "); } /* * (non-Javadoc) * @see * au.org.aurin.wif.repo.WifProjectDao#persistProject(au.org.aurin.wif.model * .WifProject) */ public WifProject persistProject(WifProject project) throws WifInvalidInputException, WifInvalidConfigException { WifProject mapProject; project.setCreationDate(new Date(System.currentTimeMillis())); mapProject = converter.map(project); String msg = WifKeys.STANDARD_ALREADY_EXISTS_MSG + project.getId() + manager.getDb().getDbInfo().getDbName(); try { repository.add(mapProject); } catch (java.lang.IllegalArgumentException e) { LOGGER.error(WifKeys.STANDARD_ALREADY_EXISTS_MSG, project.getId(), manager.getDb().getDbInfo().getDbName()); throw new WifInvalidInputException(msg, e); } return project; } /* * (non-Javadoc) * @see au.org.aurin.wif.repo.WifProjectDao#addProject(au.org.aurin.wif.model. * WifProject) */ public void addProject(WifProject project) { repository.add(project); } /* * (non-Javadoc) * @see * au.org.aurin.wif.repo.WifProjectDao#updateProject(au.org.aurin.wif.model * .WifProject) */ public void updateProject(WifProject project) { LOGGER.debug("Updating {}, revision {}", project.getId(), project.getRevision()); project.setModifiedDate(new Date(System.currentTimeMillis())); repository.update(project); } /* * (non-Javadoc) * @see au.org.aurin.wif.repo.WifProjectDao#findProjectById(java.lang.String) */ public WifProject findProjectById(String id) { try { WifProject wifProject = repository.get(id); return wifProject; } catch (org.ektorp.DocumentNotFoundException e) { LOGGER.warn(WifKeys.STANDARD_ID_NOT_FOUND_MSG, id, manager.getDb() .getDbInfo().getDbName()); } return null; } /* * (non-Javadoc) * @see * au.org.aurin.wif.repo.WifProjectDao#deleteProject(au.org.aurin.wif.model * .WifProject) */ public void deleteProject(WifProject project) { repository.remove(project); } // FIXME for now it's not needed, but we should implementIT, for some reason // it's not working /* * (non-Javadoc) * @see au.org.aurin.wif.repo.WifProjectDao#getAllProjects() */ public List<WifProject> getAllProjects() { return null; } /* * (non-Javadoc) * @see au.org.aurin.wif.repo.WifProjectDao#getAllProjects(java.lang.String) */ public List<WifProject> getAllProjects(String roleOwner) { List<WifProject> outList = new ArrayList<WifProject>(); if (roleOwner.equals(WifKeys.SHIB_ROLE_NAME)) { // can see all projects outList = repository.getAllProjects(); } else { outList = repository.findByRoleOwner(roleOwner); // since all users can see the Perth Demonstration Project. for (WifProject wif : repository.findByName(WifKeys.TEST_PROJECT_NAME)) { outList.add(wif); } } return outList; // return repository.findByRoleOwner(roleOwner); } /** * The Class WifProjectRepository. */ public class WifProjectRepository extends CouchDbRepositorySupport<WifProject> { /** * Instantiates a new wif project repository. * * @param db * the db */ @Autowired public WifProjectRepository(CouchDbConnector db) { super(WifProject.class, db); initStandardDesignDocument(); } /** * Find by role. * * @param roleOwner * the role owner * @return the list */ @GenerateView public List<WifProject> findByRoleOwner(String roleOwner) { return queryView("by_roleOwner", roleOwner); } /** * Find by name. * * @param name * the name * @return the list */ @GenerateView public List<WifProject> findByName(String name) { return queryView("by_name", name); } @View(name = "getAllProjects", map = "function(doc) { if(doc.docType=='WifProject') {emit(doc)} }") public List<WifProject> getAllProjects() { return queryView("getAllProjects"); } } }