001/* 002 * Copyright 2021 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.plugins.workspaces.tags; 017 018import java.util.ArrayList; 019import java.util.Collections; 020import java.util.HashMap; 021import java.util.List; 022import java.util.Map; 023 024import org.apache.avalon.framework.service.ServiceException; 025import org.apache.avalon.framework.service.ServiceManager; 026 027import org.ametys.cms.tag.AbstractTagsDAO; 028import org.ametys.cms.tag.Tag; 029import org.ametys.cms.tag.TagProvider; 030import org.ametys.cms.tag.jcr.AbstractJCRTagsDAO; 031import org.ametys.core.right.RightManager; 032import org.ametys.core.right.RightManager.RightResult; 033import org.ametys.core.ui.Callable; 034import org.ametys.plugins.workspaces.project.ProjectConstants; 035import org.ametys.plugins.workspaces.project.ProjectManager; 036import org.ametys.plugins.workspaces.project.modules.WorkspaceModule; 037import org.ametys.plugins.workspaces.project.modules.WorkspaceModuleExtensionPoint; 038import org.ametys.plugins.workspaces.project.objects.Project; 039 040/** 041 * DAO for manipulating project's tags 042 */ 043public class ProjectTagsDAO extends AbstractTagsDAO 044{ 045 /** The avalon role */ 046 public static final String ROLE = ProjectTagsDAO.class.getName(); 047 048 /** The right manager */ 049 protected RightManager _rightManager; 050 051 /** The project JCR tags DAO */ 052 protected ProjectJCRTagsDAO _projectJCRDAO; 053 054 /** The workspace module extension point */ 055 protected WorkspaceModuleExtensionPoint _workspaceModuleEP; 056 057 /** The project manager */ 058 protected ProjectManager _projectManager; 059 060 @Override 061 public void service(ServiceManager manager) throws ServiceException 062 { 063 super.service(manager); 064 _rightManager = (RightManager) manager.lookup(RightManager.ROLE); 065 _projectJCRDAO = (ProjectJCRTagsDAO) manager.lookup(ProjectJCRTagsDAO.ROLE); 066 _workspaceModuleEP = (WorkspaceModuleExtensionPoint) manager.lookup(WorkspaceModuleExtensionPoint.ROLE); 067 _projectManager = (ProjectManager) manager.lookup(ProjectManager.ROLE); 068 } 069 070 @Override 071 public String getTagProviderEPRole() 072 { 073 return ProjectTagProviderExtensionPoint.ROLE; 074 } 075 076 @Override 077 protected List<TagProvider< ? extends Tag>> getCustomTagProvider() 078 { 079 List<TagProvider<? extends Tag>> providers = new ArrayList<>(); 080 providers.add(_tagProviderExtPt.getExtension(ProjectJCRTagProvider.class.getName())); 081 082 return providers; 083 } 084 085 /** 086 * Get existing project tags 087 * @param moduleId the module id 088 * @param projectName the project name 089 * @return the tags (id and label) 090 */ 091 @Callable 092 public Map<String, Object> getProjectTags(String moduleId, String projectName) 093 { 094 List<Map<String, Object>> tags = new ArrayList<>(); 095 096 for (String id : _tagProviderExtPt.getExtensionsIds()) 097 { 098 TagProvider<? extends Tag> tagProvider = _tagProviderExtPt.getExtension(id); 099 Map<String, ? extends Tag> someTags = tagProvider.getTags(Collections.emptyMap()); 100 101 tags.addAll(_tagsToJSON(someTags.values())); 102 } 103 104 Map<String, Object> result = new HashMap<>(); 105 result.put("tags", tags); 106 107 Project project = _projectManager.getProject(projectName); 108 WorkspaceModule module = _workspaceModuleEP.getModule(moduleId); 109 result.put("canCreate", _rightManager.currentUserHasRight(ProjectConstants.RIGHT_PROJECT_HANDLE_TAGS, module.getModuleRoot(project, false)) == RightResult.RIGHT_ALLOW); 110 111 return result; 112 } 113 114 @Override 115 protected AbstractJCRTagsDAO _getTagJCRDAO() 116 { 117 return _projectJCRDAO; 118 } 119}