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}