package de.cinovo.cloudconductor.server.web.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import de.cinovo.cloudconductor.server.dao.IFileDAO; import de.cinovo.cloudconductor.server.dao.IFileTagsDAO; import de.cinovo.cloudconductor.server.model.EFile; import de.cinovo.cloudconductor.server.model.EFileTag; import de.cinovo.cloudconductor.server.model.enums.TagColor; import de.cinovo.cloudconductor.server.util.exception.FormErrorException; import de.cinovo.cloudconductor.server.web.CSViewModel; import de.cinovo.cloudconductor.server.web.helper.AWebPage; import de.cinovo.cloudconductor.server.web.helper.AjaxAnswer; import de.cinovo.cloudconductor.server.web.helper.AjaxAnswer.AjaxAnswerType; import de.cinovo.cloudconductor.server.web.interfaces.IFileTags; import de.cinovo.cloudconductor.server.web.interfaces.IFiles; import de.cinovo.cloudconductor.server.web.interfaces.IWebPath; import de.taimos.cxf_renderer.model.RenderedUI; import de.taimos.restutils.RESTAssert; /** * Copyright 2014 Cinovo AG<br> * <br> * * @author psigloch * */ public class FileTagsImpl extends AWebPage implements IFileTags { @Autowired protected IFileDAO dFiles; @Autowired protected IFileTagsDAO dTags; @Override protected String getTemplateFolder() { return "filetags"; } @Override protected void init() { // nothign to do } @Override protected String getNavElementName() { return null; } @Override @Transactional public RenderedUI viewFilesTags(Long fileid) { RESTAssert.assertNotNull(fileid); EFile file = this.dFiles.findById(fileid); List<EFileTag> tags = this.dTags.findList(); final CSViewModel modal = this.createModal("mManageTags"); modal.addModel("FILE", file); modal.addModel("TAGS", tags); return modal.render(); } @Override @Transactional public RenderedUI newTagView(Long fileid) { final CSViewModel modal = this.createModal("mNewTags"); modal.addModel("TAGTYPES", TagColor.values()); modal.addModel("FILEID", fileid); return modal.render(); } @Override @Transactional public RenderedUI deleteTagView(Long fileid, Long tagid) { EFileTag tag = this.dTags.findById(tagid); List<EFile> files = this.dFiles.findByTag(tag); final CSViewModel modal = this.createModal("mDeleteTag"); modal.addModel("FILES", files); modal.addModel("TAG", tag); modal.addModel("FILEID", fileid); return modal.render(); } @Override @Transactional public AjaxAnswer saveTaggedFile(Long fileid, Long[] tags) throws FormErrorException { EFile file = this.dFiles.findById(fileid); file.getTags().clear(); if ((tags != null) && (tags.length > 0)) { List<EFileTag> tag = this.dTags.findByIds(tags); file.setTags(tag); } this.dFiles.save(file); return new AjaxAnswer(IWebPath.WEBROOT + IFiles.ROOT, this.getCurrentViewType()); } @Override @Transactional public AjaxAnswer saveNewTag(Long fileid, String name, String type) throws FormErrorException { FormErrorException error = null; error = this.assertNotEmpty(name, error, "name"); error = this.assertNotEmpty(type, error, "type"); if (error != null) { // add the currently entered values to the answer error.addFormParam("name", name); error.addFormParam("type", type); error.setParentUrl(IFileTags.ROOT); throw error; } EFileTag tag = new EFileTag(); tag.setName(name); tag.setColor(TagColor.valueOf(type)); this.dTags.save(tag); AjaxAnswer ajaxRedirect = new AjaxAnswer(IWebPath.WEBROOT + IFileTags.ROOT + "/" + fileid, AjaxAnswerType.GET); ajaxRedirect.setInfo("Successfully added"); return ajaxRedirect; } @Override @Transactional public AjaxAnswer deleteTag(Long fileid, Long tagid) throws FormErrorException { EFileTag tag = this.dTags.findById(tagid); List<EFile> files = this.dFiles.findByTag(tag); for (EFile f : files) { f.getTags().remove(tag); this.dFiles.save(f); } this.dTags.delete(tag); AjaxAnswer ajaxRedirect = new AjaxAnswer(IWebPath.WEBROOT + IFileTags.ROOT + "/" + fileid, AjaxAnswerType.GET); ajaxRedirect.setInfo("Successfully deleted"); return ajaxRedirect; } }