001 /**
002 * Copyright 2005-2011 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 */
016 package org.kuali.rice.krms.impl.ui;
017
018 import org.apache.commons.collections.CollectionUtils;
019 import org.kuali.rice.core.api.uif.DataType;
020 import org.kuali.rice.core.api.uif.RemotableAttributeField;
021 import org.kuali.rice.core.api.uif.RemotableTextInput;
022 import org.kuali.rice.krad.document.MaintenanceDocument;
023 import org.kuali.rice.krad.maintenance.MaintainableImpl;
024 import org.kuali.rice.krad.service.BusinessObjectService;
025 import org.kuali.rice.krad.service.KRADServiceLocator;
026 import org.kuali.rice.krad.uif.container.CollectionGroup;
027 import org.kuali.rice.krad.uif.container.Container;
028 import org.kuali.rice.krad.uif.view.View;
029 import org.kuali.rice.krad.web.form.MaintenanceForm;
030 import org.kuali.rice.krms.impl.repository.ActionBo;
031 import org.kuali.rice.krms.impl.repository.CategoryBo;
032 import org.kuali.rice.krms.impl.repository.TermBo;
033 import org.kuali.rice.krms.impl.repository.TermResolverBo;
034 import org.kuali.rice.krms.impl.repository.TermResolverParameterSpecificationBo;
035
036 import java.util.ArrayList;
037 import java.util.Collection;
038 import java.util.Collections;
039 import java.util.Comparator;
040 import java.util.List;
041 import java.util.Map;
042
043 /**
044 * {@link org.kuali.rice.krad.maintenance.Maintainable} for the {@link org.kuali.rice.krms.impl.ui.AgendaEditor}
045 *
046 * @author Kuali Rice Team (rice.collab@kuali.org)
047 *
048 */
049 public class TermMaintainable extends MaintainableImpl {
050
051 private static final long serialVersionUID = 1L;
052
053 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TermMaintainable.class);
054
055 /**
056 * @return the boService
057 */
058 public BusinessObjectService getBoService() {
059 return KRADServiceLocator.getBusinessObjectService();
060 }
061
062
063
064 public List<RemotableAttributeField> retrieveCustomAttributes(View view, Object model, Container container) {
065
066 List<RemotableAttributeField> results = new ArrayList<RemotableAttributeField>();
067
068 String termSpecId = ((TermBo)((MaintenanceForm)model).getDocument().getNewMaintainableObject().getDataObject()).getSpecificationId();
069
070 Collection<TermResolverBo> termResolvers = getBoService().findMatching(TermResolverBo.class,
071 Collections.singletonMap("outputId", termSpecId)
072 );
073
074 TermResolverBo termResolver = null;
075
076 if (termResolvers != null && termResolvers.size() == 1) {
077 termResolver = termResolvers.iterator().next();
078 }
079
080 if (termResolver != null && !CollectionUtils.isEmpty(termResolver.getParameterSpecifications())) {
081 List<TermResolverParameterSpecificationBo> params = new ArrayList<TermResolverParameterSpecificationBo>(termResolver.getParameterSpecifications());
082
083 Collections.sort(params, new Comparator<TermResolverParameterSpecificationBo>() {
084 @Override
085 public int compare(TermResolverParameterSpecificationBo o1, TermResolverParameterSpecificationBo o2) {
086 return o1.getName().compareTo(o2.getName());
087 }
088 });
089
090 for (TermResolverParameterSpecificationBo param : params) {
091 RemotableAttributeField.Builder builder = RemotableAttributeField.Builder.create(param.getName());
092 RemotableTextInput.Builder inputBuilder = RemotableTextInput.Builder.create();
093 inputBuilder.setSize(80);
094 builder.setControl(inputBuilder);
095 builder.setDataType(DataType.STRING);
096 builder.setLongLabel(param.getName());
097 builder.setShortLabel(param.getName());
098
099 results.add(builder.build());
100 }
101 }
102
103 return results;
104 }
105
106 // private AgendaTypeService getAgendaTypeService(String krmsTypeId) {
107 // //
108 // // Get the AgendaTypeService by hook or by crook
109 // //
110 //
111 // KrmsTypeDefinition krmsType =
112 // KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService().
113 // getTypeById(krmsTypeId);
114 //
115 // AgendaTypeService agendaTypeService = null;
116 //
117 // if (!StringUtils.isBlank(krmsTypeId)) {
118 // String serviceName = krmsType.getServiceName();
119 //
120 // if (!StringUtils.isBlank(serviceName)) {
121 // agendaTypeService = KrmsRepositoryServiceLocator.getService(serviceName);
122 // }
123 // }
124 //
125 // if (agendaTypeService == null) { agendaTypeService = AgendaTypeServiceBase.defaultAgendaTypeService; }
126 //
127 // return agendaTypeService;
128 // }
129
130 @Override
131 public Object retrieveObjectForEditOrCopy(MaintenanceDocument document, Map<String, String> dataObjectKeys) {
132
133 TermBo termBo = (TermBo)document.getNewMaintainableObject().getDataObject();
134 termBo.exportToParametersMap();
135
136 return super.retrieveObjectForEditOrCopy(document,
137 dataObjectKeys); //To change body of overridden methods use File | Settings | File Templates.
138 }
139
140 /**
141 * {@inheritDoc}
142 */
143 @Override
144 public void processAfterNew(MaintenanceDocument document,
145 Map<String, String[]> requestParameters) {
146
147 super.processAfterNew(document, requestParameters);
148 document.getDocumentHeader().setDocumentDescription("New Term Document");
149
150 }
151
152 @Override
153 public void saveDataObject() {
154 TermBo term = (TermBo) getDataObject();
155 term.importFromParametersMap();
156
157 super.saveDataObject(); //To change body of overridden methods use File | Settings | File Templates.
158 }
159
160 @Override
161 public Class getDataObjectClass() {
162 return TermBo.class;
163 }
164
165 @Override
166 protected void processBeforeAddLine(View view, CollectionGroup collectionGroup, Object model, Object addLine) {
167 super.processBeforeAddLine(view, collectionGroup, model, addLine);
168 }
169
170
171 }