001/** 002 * Copyright 2005-2017 The Kuali Foundation 003 * 004 * Licensed under the Educational Community 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.opensource.org/licenses/ecl2.php 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.kuali.rice.krms.impl.ui; 017 018import org.apache.commons.collections.CollectionUtils; 019import org.kuali.rice.core.api.criteria.QueryByCriteria; 020import org.kuali.rice.core.api.criteria.QueryResults; 021import org.kuali.rice.core.api.data.DataType; 022import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 023import org.kuali.rice.core.api.uif.RemotableAttributeField; 024import org.kuali.rice.core.api.uif.RemotableTextInput; 025import org.kuali.rice.krad.data.platform.MaxValueIncrementerFactory; 026import org.kuali.rice.krad.maintenance.MaintainableImpl; 027import org.kuali.rice.krad.maintenance.MaintenanceDocument; 028import org.kuali.rice.krad.uif.container.CollectionGroup; 029import org.kuali.rice.krad.uif.container.Container; 030import org.kuali.rice.krad.uif.view.View; 031import org.kuali.rice.krad.uif.view.ViewModel; 032import org.kuali.rice.krad.util.KRADConstants; 033import org.kuali.rice.krad.web.form.MaintenanceDocumentForm; 034import org.kuali.rice.krms.api.KrmsConstants; 035import org.kuali.rice.krms.impl.repository.TermBo; 036import org.kuali.rice.krms.impl.repository.TermParameterBo; 037import org.kuali.rice.krms.impl.repository.TermResolverBo; 038import org.kuali.rice.krms.impl.repository.TermResolverParameterSpecificationBo; 039 040import javax.sql.DataSource; 041import java.util.ArrayList; 042import java.util.Collections; 043import java.util.Comparator; 044import java.util.List; 045import java.util.Map; 046 047/** 048 * {@link org.kuali.rice.krad.maintenance.Maintainable} for the {@link org.kuali.rice.krms.impl.ui.AgendaEditor} 049 * 050 * @author Kuali Rice Team (rice.collab@kuali.org) 051 * 052 */ 053public class TermMaintainable extends MaintainableImpl { 054 055 private static final long serialVersionUID = 1L; 056 057 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TermMaintainable.class); 058 059 public List<RemotableAttributeField> retrieveCustomAttributes(View view, Object model, Container container) { 060 List<RemotableAttributeField> results = new ArrayList<RemotableAttributeField>(); 061 String termSpecId = 062 ((TermBo) ((MaintenanceDocumentForm) model).getDocument().getNewMaintainableObject().getDataObject()) 063 .getSpecificationId(); 064 065 QueryResults<TermResolverBo> termResolvers = getDataObjectService().findMatching(TermResolverBo.class, 066 QueryByCriteria.Builder.forAttribute("outputId", termSpecId).build()); 067 068 TermResolverBo termResolver = null; 069 070 if (termResolvers.getResults() != null && termResolvers.getResults().size() == 1) { 071 termResolver = termResolvers.getResults().get(0); 072 } 073 074 if (termResolver != null && !CollectionUtils.isEmpty(termResolver.getParameterSpecifications())) { 075 List<TermResolverParameterSpecificationBo> params = new ArrayList<TermResolverParameterSpecificationBo>( 076 termResolver.getParameterSpecifications()); 077 078 Collections.sort(params, new Comparator<TermResolverParameterSpecificationBo>() { 079 @Override 080 public int compare(TermResolverParameterSpecificationBo o1, TermResolverParameterSpecificationBo o2) { 081 return o1.getName().compareTo(o2.getName()); 082 } 083 }); 084 085 for (TermResolverParameterSpecificationBo param : params) { 086 RemotableAttributeField.Builder builder = RemotableAttributeField.Builder.create(param.getName()); 087 RemotableTextInput.Builder inputBuilder = RemotableTextInput.Builder.create(); 088 inputBuilder.setSize(80); 089 builder.setControl(inputBuilder); 090 builder.setDataType(DataType.STRING); 091 builder.setLongLabel(param.getName()); 092 builder.setShortLabel(param.getName()); 093 094 results.add(builder.build()); 095 } 096 } 097 098 return results; 099 } 100 101// private AgendaTypeService getAgendaTypeService(String krmsTypeId) { 102// // 103// // Get the AgendaTypeService by hook or by crook 104// // 105// 106// KrmsTypeDefinition krmsType = 107// KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService(). 108// getTypeById(krmsTypeId); 109// 110// AgendaTypeService agendaTypeService = null; 111// 112// if (!StringUtils.isBlank(krmsTypeId)) { 113// String serviceName = krmsType.getServiceName(); 114// 115// if (!StringUtils.isBlank(serviceName)) { 116// agendaTypeService = KrmsRepositoryServiceLocator.getService(serviceName); 117// } 118// } 119// 120// if (agendaTypeService == null) { agendaTypeService = AgendaTypeServiceBase.defaultAgendaTypeService; } 121// 122// return agendaTypeService; 123// } 124 125 @Override 126 public Object retrieveObjectForEditOrCopy(MaintenanceDocument document, Map<String, String> dataObjectKeys) { 127 TermBo termBo = (TermBo) super.retrieveObjectForEditOrCopy(document, dataObjectKeys); 128 termBo.exportToParametersMap(); 129 130 if (KRADConstants.MAINTENANCE_COPY_ACTION.equals(getMaintenanceAction())) { 131 document.getDocumentHeader().setDocumentDescription("New Term Document"); 132 } 133 134 return termBo; 135 } 136 137 /** 138 * {@inheritDoc} 139 */ 140 @Override 141 public void processAfterNew(MaintenanceDocument document, Map<String, String[]> requestParameters) { 142 super.processAfterNew(document, requestParameters); 143 document.getDocumentHeader().setDocumentDescription("New Term Document"); 144 } 145 146 /** 147 * {@inheritDoc} 148 */ 149 @Override 150 public void processAfterEdit(MaintenanceDocument document, Map<String, String[]> requestParameters) { 151 super.processAfterEdit(document, requestParameters); 152 document.getDocumentHeader().setDocumentDescription("Edited Term Document"); 153 } 154 155 /** 156 * {@inheritDoc} 157 */ 158 @Override 159 public void prepareForSave() { 160 TermBo term = (TermBo) getDataObject(); 161 if (term.getId() == null) { 162 term.setId(MaxValueIncrementerFactory.getIncrementer(getDataSource(), TermBo.TERM_SEQ_NAME) 163 .nextStringValue()); 164 } 165 term.importFromParametersMap(); 166 167 for (TermParameterBo param : term.getParameters()) { 168 param.setTerm(term); 169 } 170 } 171 172 /** 173 * {@inheritDoc} 174 */ 175 @Override 176 public void processAfterRetrieve() { 177 super.processAfterRetrieve(); 178 TermBo term = (TermBo) getDataObject(); 179 term.exportToParametersMap(); 180 } 181 182 @Override 183 public Class getDataObjectClass() { 184 return TermBo.class; 185 } 186 187 @Override 188 public void processBeforeAddLine(ViewModel model, Object addLine, String collectionId, String collectionPath) { 189 super.processBeforeAddLine(model, addLine, collectionId, collectionPath); 190 } 191 192 public static DataSource getDataSource() { 193 return (DataSource)GlobalResourceLoader.getService(KrmsConstants.KRMS_DATA_SOURCE); 194 } 195}