/* * #%L * Alfresco Records Management Module * %% * Copyright (C) 2005 - 2016 Alfresco Software Limited * %% * This file is part of the Alfresco software. * - * If the software was purchased under a paid Alfresco license, the terms of * the paid license agreement will prevail. Otherwise, the software is * provided under the following open source license terms: * - * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Alfresco is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * #L% */ package org.alfresco.module.org_alfresco_module_rm.script.slingshot; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.admin.RecordsManagementAdminService; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; /** * RM search properties GET web script * * @author Roy Wetherall */ public class RMSearchPropertiesGet extends DeclarativeWebScript { /** Services */ private RecordsManagementAdminService adminService; private RecordService recordService; private DictionaryService dictionaryService; private NamespaceService namespaceService; private FilePlanService filePlanService; /** * @param adminService records management admin service */ public void setAdminService(RecordsManagementAdminService adminService) { this.adminService = adminService; } /** * @param recordService record service */ public void setRecordService(RecordService recordService) { this.recordService = recordService; } /** * @param dictionaryService dictionary service */ public void setDictionaryService(DictionaryService dictionaryService) { this.dictionaryService = dictionaryService; } /** * @param namespaceService namespace service */ public void setNamespaceService(NamespaceService namespaceService) { this.namespaceService = namespaceService; } /** * @param filePlanService file plan service */ public void setFilePlanService(FilePlanService filePlanService) { this.filePlanService = filePlanService; } /** * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache) */ @Override protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) { Map<String, Object> model = new HashMap<String, Object>(13); List<Group> groups = new ArrayList<Group>(5); // get the file plan // TODO the file plan should be passed to this web script NodeRef filePlan = filePlanService.getFilePlanBySiteId(FilePlanService.DEFAULT_RM_SITE_ID); // get the record metadata aspects Set<QName> aspects = recordService.getRecordMetadataAspects(filePlan); for (QName aspect : aspects) { Map<QName, PropertyDefinition> properties = dictionaryService.getPropertyDefs(aspect); Property[] propObjs = new Property[properties.size()]; int index = 0; for (PropertyDefinition propertyDefinition : properties.values()) { Property propObj = new Property(propertyDefinition); propObjs[index] = propObj; index ++; } AspectDefinition aspectDefinition = dictionaryService.getAspect(aspect); Group group = new Group(aspect.getLocalName(), aspectDefinition.getTitle(dictionaryService), propObjs); groups.add(group); } Map<QName, PropertyDefinition> customProps = adminService.getCustomPropertyDefinitions(); Property[] propObjs = new Property[customProps.size()]; int index = 0; for (PropertyDefinition propertyDefinition : customProps.values()) { Property propObj = new Property(propertyDefinition); propObjs[index] = propObj; index ++; } Group group = new Group("rmcustom", "Custom", propObjs); groups.add(group); model.put("groups", groups); return model; } public class Group { private String id; private String label; private Property[] properties; public Group(String id, String label, Property[] properties) { this.id = id; this.label = label; this.properties = properties.clone(); } public String getId() { return id; } public String getLabel() { return label; } public Property[] getProperties() { return properties; } } public class Property { private String prefix; private String shortName; private String label; private String type; public Property(PropertyDefinition propertyDefinition) { QName qName = propertyDefinition.getName().getPrefixedQName(namespaceService); this.prefix = QName.splitPrefixedQName(qName.toPrefixString())[0]; this.shortName = qName.getLocalName(); this.label = propertyDefinition.getTitle(dictionaryService); this.type = propertyDefinition.getDataType().getName().getLocalName(); } public String getPrefix() { return prefix; } public String getShortName() { return shortName; } public String getLabel() { return label; } public String getType() { return type; } } }