001 /**
002 * Copyright 2005-2014 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.krad.uif.service.impl;
017
018 import java.util.HashMap;
019 import java.util.List;
020 import java.util.Map;
021
022 import org.apache.commons.lang.StringUtils;
023 import org.kuali.rice.core.api.exception.RiceRuntimeException;
024 import org.kuali.rice.krad.datadictionary.DataDictionary;
025 import org.kuali.rice.krad.inquiry.Inquirable;
026 import org.kuali.rice.krad.service.DataDictionaryService;
027 import org.kuali.rice.krad.uif.UifConstants;
028 import org.kuali.rice.krad.uif.UifParameters;
029 import org.kuali.rice.krad.uif.UifPropertyPaths;
030 import org.kuali.rice.krad.uif.util.ViewModelUtils;
031 import org.kuali.rice.krad.uif.view.LookupView;
032 import org.kuali.rice.krad.uif.view.View;
033 import org.kuali.rice.krad.uif.service.ViewDictionaryService;
034 import org.kuali.rice.krad.uif.UifConstants.ViewType;
035 import org.kuali.rice.krad.util.ObjectUtils;
036 import org.springframework.beans.PropertyValues;
037
038 /**
039 * Implementation of <code>ViewDictionaryService</code>
040 *
041 * <p>
042 * Pulls view entries from the data dictionary to implement the various query
043 * methods
044 * </p>
045 *
046 * @author Kuali Rice Team (rice.collab@kuali.org)
047 */
048 public class ViewDictionaryServiceImpl implements ViewDictionaryService {
049 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(
050 ViewDictionaryServiceImpl.class);
051
052 private DataDictionaryService dataDictionaryService;
053
054 /**
055 * @see org.kuali.rice.krad.uif.service.ViewDictionaryService#getInquirable(java.lang.Class,
056 * java.lang.String)
057 */
058 public Inquirable getInquirable(Class<?> dataObjectClass, String viewName) {
059 Inquirable inquirable = null;
060
061 if (StringUtils.isBlank(viewName)) {
062 viewName = UifConstants.DEFAULT_VIEW_NAME;
063 }
064
065 Map<String, String> indexKey = new HashMap<String, String>();
066 indexKey.put(UifParameters.VIEW_NAME, viewName);
067 indexKey.put(UifParameters.DATA_OBJECT_CLASS_NAME, dataObjectClass.getName());
068
069 // get view properties
070 PropertyValues propertyValues = getDataDictionary().getViewPropertiesByType(ViewType.INQUIRY, indexKey);
071
072 String viewHelperServiceClassName = ViewModelUtils.getStringValFromPVs(propertyValues,
073 UifPropertyPaths.VIEW_HELPER_SERVICE_CLASS);
074 if (StringUtils.isNotBlank(viewHelperServiceClassName)) {
075 try {
076 inquirable = (Inquirable) ObjectUtils.newInstance(Class.forName(viewHelperServiceClassName));
077 } catch (ClassNotFoundException e) {
078 throw new RiceRuntimeException(
079 "Unable to find class for inquirable classname: " + viewHelperServiceClassName, e);
080 }
081 }
082
083 return inquirable;
084 }
085
086 /**
087 * @see org.kuali.rice.krad.uif.service.ViewDictionaryService#isInquirable(java.lang.Class)
088 */
089 public boolean isInquirable(Class<?> dataObjectClass) {
090 Map<String, String> indexKey = new HashMap<String, String>();
091 indexKey.put(UifParameters.VIEW_NAME, UifConstants.DEFAULT_VIEW_NAME);
092 indexKey.put(UifParameters.DATA_OBJECT_CLASS_NAME, dataObjectClass.getName());
093
094 boolean isInquirable = getDataDictionary().viewByTypeExist(ViewType.INQUIRY, indexKey);
095
096 return isInquirable;
097 }
098
099 /**
100 * @see org.kuali.rice.krad.uif.service.ViewDictionaryService#isLookupable(java.lang.Class)
101 */
102 public boolean isLookupable(Class<?> dataObjectClass) {
103 Map<String, String> indexKey = new HashMap<String, String>();
104 indexKey.put(UifParameters.VIEW_NAME, UifConstants.DEFAULT_VIEW_NAME);
105 indexKey.put(UifParameters.DATA_OBJECT_CLASS_NAME, dataObjectClass.getName());
106
107 boolean isLookupable = getDataDictionary().viewByTypeExist(ViewType.LOOKUP, indexKey);
108
109 return isLookupable;
110 }
111
112 /**
113 * @see org.kuali.rice.krad.uif.service.ViewDictionaryService#isMaintainable(java.lang.Class)
114 */
115 public boolean isMaintainable(Class<?> dataObjectClass) {
116 Map<String, String> indexKey = new HashMap<String, String>();
117 indexKey.put(UifParameters.VIEW_NAME, UifConstants.DEFAULT_VIEW_NAME);
118 indexKey.put(UifParameters.DATA_OBJECT_CLASS_NAME, dataObjectClass.getName());
119
120 boolean isMaintainable = getDataDictionary().viewByTypeExist(ViewType.MAINTENANCE, indexKey);
121
122 return isMaintainable;
123 }
124
125 /**
126 * @see org.kuali.rice.krad.uif.service.impl.ViewDictionaryService#getResultSetLimitForLookup(java.lang.Class)
127 */
128 @Override
129 public Integer getResultSetLimitForLookup(Class<?> dataObjectClass) {
130 LookupView lookupView = null;
131
132 List<View> lookupViews = getDataDictionary().getViewsForType(UifConstants.ViewType.LOOKUP);
133 for (View view : lookupViews) {
134 LookupView lView = (LookupView) view;
135
136 if (StringUtils.equals(lView.getDataObjectClassName().getName(), dataObjectClass.getName())) {
137 // if we already found a lookup view, only override if this is the default
138 if (lookupView != null) {
139 if (StringUtils.equals(lView.getViewName(), UifConstants.DEFAULT_VIEW_NAME)) {
140 lookupView = lView;
141 }
142 } else {
143 lookupView = lView;
144 }
145 }
146 }
147
148 if (lookupView != null) {
149 return lookupView.getResultSetLimit();
150 }
151
152 return null;
153 }
154
155 protected DataDictionary getDataDictionary() {
156 return getDataDictionaryService().getDataDictionary();
157 }
158
159 protected DataDictionaryService getDataDictionaryService() {
160 return this.dataDictionaryService;
161 }
162
163 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) {
164 this.dataDictionaryService = dataDictionaryService;
165 }
166 }