001/* 002 * Copyright 2020 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.web.clientsideelement; 017 018import java.util.HashMap; 019import java.util.List; 020import java.util.Map; 021import java.util.Optional; 022 023import org.apache.avalon.framework.configuration.Configuration; 024import org.apache.avalon.framework.configuration.ConfigurationException; 025import org.apache.avalon.framework.service.ServiceException; 026import org.apache.avalon.framework.service.ServiceManager; 027import org.apache.commons.lang3.StringUtils; 028 029import org.ametys.core.ui.Callable; 030import org.ametys.web.parameters.view.ViewParametersManager; 031import org.ametys.web.parameters.view.ViewParametersModel; 032import org.ametys.web.repository.page.ModifiableSitemapElement; 033import org.ametys.web.repository.page.ModifiableZoneItem; 034import org.ametys.web.repository.page.ZoneItem.ZoneType; 035import org.ametys.web.repository.site.Site; 036import org.ametys.web.rights.PageRightAssignmentContext; 037import org.ametys.web.skin.Skin; 038import org.ametys.web.skin.SkinTemplate; 039import org.ametys.web.skin.SkinTemplateZone; 040import org.ametys.web.skin.SkinsManager; 041 042/** 043 * This client side handles a controller enabled if the active page has at least one view parameter. 044 */ 045public class ConfigureViewParametersClientSideElement extends AbstractSitemapElementClientSideElement 046{ 047 /** The skins manager */ 048 protected SkinsManager _skinsManager; 049 050 /** The view parameters manager */ 051 protected ViewParametersManager _viewParametersManager; 052 053 @Override 054 public void service(ServiceManager smanager) throws ServiceException 055 { 056 super.service(smanager); 057 _skinsManager = (SkinsManager) smanager.lookup(SkinsManager.ROLE); 058 _viewParametersManager = (ViewParametersManager) smanager.lookup(ViewParametersManager.ROLE); 059 } 060 061 @Override 062 public void configure(Configuration configuration) throws ConfigurationException 063 { 064 super.configure(configuration); 065 } 066 067 @Override 068 public List<Script> getScripts(boolean ignoreRights, Map<String, Object> contextParameters) 069 { 070 // TODO Auto-generated method stub 071 return super.getScripts(ignoreRights, contextParameters); 072 } 073 074 /** 075 * Get the status of the page for the view parameters 076 * @param pageId the page id 077 * @param zoneName the zone name 078 * @param zoneItemId the id of the zone item 079 * @return the status for the page view parameters 080 */ 081 @Callable(rights = "Web_Rights_Page_Configure_View_Parameters", rightContext = PageRightAssignmentContext.ID, paramIndex = 0) 082 public Map<String, Object> getStatus (String pageId, String zoneName, String zoneItemId) 083 { 084 Map<String, Object> results = new HashMap<>(); 085 086 ModifiableSitemapElement page = _resolver.resolveById(pageId); 087 Site site = page.getSite(); 088 Skin skin = _skinsManager.getSkin(site.getSkinId()); 089 090 String templateName = page.getTemplate(); 091 if (StringUtils.isBlank(templateName) || skin.getTemplate(templateName) == null) 092 { 093 results.put("no-parameters", true); 094 return results; 095 } 096 097 SkinTemplate template = skin.getTemplate(templateName); 098 Optional<ViewParametersModel> templateViewParametersModel = _viewParametersManager.getTemplateViewParametersModel(template); 099 if (templateViewParametersModel.isPresent() && templateViewParametersModel.get().isNotEmpty()) 100 { 101 // we have parameters 102 results.put("allright-view-parameters", true); 103 return results; 104 } 105 106 if (StringUtils.isNotBlank(zoneName)) 107 { 108 SkinTemplateZone zone = template.getZone(zoneName); 109 if (zone == null) 110 { 111 results.put("no-parameters", true); 112 return results; 113 } 114 115 Optional<ViewParametersModel> zoneViewParametersModel = _viewParametersManager.getZoneViewParametersModel(zone); 116 if (zoneViewParametersModel.isPresent() && zoneViewParametersModel.get().isNotEmpty()) 117 { 118 // we have parameters 119 results.put("allright-view-parameters", true); 120 return results; 121 } 122 } 123 124 if (StringUtils.isNotBlank(zoneItemId)) 125 { 126 ModifiableZoneItem zoneItem = _resolver.resolveById(zoneItemId); 127 SkinTemplateZone zone = template.getZone(zoneItem.getZone().getName()); 128 Optional<ViewParametersModel> zoneItemViewParameters = zone.getZoneItemViewParameters(); 129 if (zoneItemViewParameters.isPresent() && zoneItemViewParameters.get().isNotEmpty()) 130 { 131 // we have parameters 132 results.put("allright-view-parameters", true); 133 return results; 134 } 135 136 if (zoneItem.getType() == ZoneType.SERVICE) 137 { 138 Map<String, ViewParametersModel> serviceViewParametersModels = _viewParametersManager.getServiceViewParametersModels(skin.getId(), zoneItem.getServiceId()); 139 for (ViewParametersModel viewParameters : serviceViewParametersModels.values()) 140 { 141 if (viewParameters.isNotEmpty()) 142 { 143 // we have parameters 144 results.put("allright-view-parameters", true); 145 return results; 146 } 147 } 148 } 149 else if (zoneItem.getType() == ZoneType.CONTENT) 150 { 151 Map<String, ViewParametersModel> contentViewParametersModels = _viewParametersManager.getContentViewParametersModels(skin.getId(), zoneItem.getContent()); 152 for (ViewParametersModel viewParameters : contentViewParametersModels.values()) 153 { 154 if (viewParameters.isNotEmpty()) 155 { 156 // we have parameters 157 results.put("allright-view-parameters", true); 158 return results; 159 } 160 } 161 } 162 } 163 164 results.put("no-parameters", true); 165 return results; 166 } 167 168}