001
014
015 package com.liferay.portal.kernel.servlet.taglib.ui;
016
017 import com.liferay.portal.kernel.util.ListUtil;
018 import com.liferay.portal.kernel.util.StringPool;
019 import com.liferay.portal.kernel.util.Validator;
020 import com.liferay.portal.model.User;
021 import com.liferay.registry.Registry;
022 import com.liferay.registry.RegistryUtil;
023 import com.liferay.registry.ServiceReference;
024 import com.liferay.registry.collections.ServiceReferenceMapper;
025 import com.liferay.registry.collections.ServiceTrackerCollections;
026 import com.liferay.registry.collections.ServiceTrackerMap;
027
028 import java.util.ArrayList;
029 import java.util.List;
030 import java.util.Locale;
031
032
035 public class FormNavigatorEntryUtil {
036
037 public static <T> List<FormNavigatorEntry<T>> getFormNavigatorEntries(
038 String formNavigatorId, String categoryKey, User user,
039 T formModelBean) {
040
041 @SuppressWarnings("rawtypes")
042 List<FormNavigatorEntry<T>> formNavigatorEntries =
043 (List)_instance._formNavigatorEntries.getService(
044 _getKey(formNavigatorId, categoryKey));
045
046 return filterVisibleFormNavigatorEntries(
047 formNavigatorEntries, user, formModelBean);
048 }
049
050 public static <T> List<FormNavigatorEntry<T>> getFormNavigatorEntries(
051 String formNavigatorId, User user, T formModelBean) {
052
053 List<FormNavigatorEntry<T>> formNavigatorEntries = new ArrayList<>();
054
055 String[] categoryKeys = FormNavigatorCategoryUtil.getKeys(
056 formNavigatorId);
057
058 for (String categoryKey : categoryKeys) {
059
060 @SuppressWarnings("rawtypes")
061 List<FormNavigatorEntry<T>> curFormNavigatorEntries =
062 (List)_instance._formNavigatorEntries.getService(
063 _getKey(formNavigatorId, categoryKey));
064
065 if (curFormNavigatorEntries != null) {
066 formNavigatorEntries.addAll(curFormNavigatorEntries);
067 }
068 }
069
070 return filterVisibleFormNavigatorEntries(
071 formNavigatorEntries, user, formModelBean);
072 }
073
074 public static <T> String[] getKeys(
075 String formNavigatorId, String categoryKey, User user,
076 T formModelBean) {
077
078 List<String> keys = new ArrayList<>();
079
080 List<FormNavigatorEntry<T>> formNavigatorEntries =
081 getFormNavigatorEntries(
082 formNavigatorId, categoryKey, user, formModelBean);
083
084 for (FormNavigatorEntry<T> formNavigatorEntry : formNavigatorEntries) {
085 String key = formNavigatorEntry.getKey();
086
087 if (Validator.isNotNull(key)) {
088 keys.add(key);
089 }
090 }
091
092 return keys.toArray(new String[keys.size()]);
093 }
094
095 public static <T> String[] getLabels(
096 String formNavigatorId, String categoryKey, User user, T formModelBean,
097 Locale locale) {
098
099 List<String> labels = new ArrayList<>();
100
101 List<FormNavigatorEntry<T>> formNavigatorEntries =
102 getFormNavigatorEntries(
103 formNavigatorId, categoryKey, user, formModelBean);
104
105 for (FormNavigatorEntry<T> formNavigatorEntry : formNavigatorEntries) {
106 String label = formNavigatorEntry.getLabel(locale);
107
108 if (Validator.isNotNull(label)) {
109 labels.add(label);
110 }
111 }
112
113 return labels.toArray(new String[labels.size()]);
114 }
115
116 protected static <T> List<FormNavigatorEntry<T>>
117 filterVisibleFormNavigatorEntries(
118 List<FormNavigatorEntry<T>> formNavigatorEntries, User user,
119 T formModelBean) {
120
121 List<FormNavigatorEntry<T>> filterFormNavigatorEntries =
122 new ArrayList<>();
123
124 if (ListUtil.isEmpty(formNavigatorEntries)) {
125 return filterFormNavigatorEntries;
126 }
127
128 for (FormNavigatorEntry<T> formNavigatorEntry : formNavigatorEntries) {
129 if (formNavigatorEntry.isVisible(user, formModelBean)) {
130 filterFormNavigatorEntries.add(formNavigatorEntry);
131 }
132 }
133
134 return filterFormNavigatorEntries;
135 }
136
137 private static String _getKey(String formNavigatorId, String categoryKey) {
138 return formNavigatorId + StringPool.PERIOD + categoryKey;
139 }
140
141 @SuppressWarnings("rawtypes")
142 private FormNavigatorEntryUtil() {
143 _formNavigatorEntries = ServiceTrackerCollections.openMultiValueMap(
144 FormNavigatorEntry.class, null,
145 new ServiceReferenceMapper<String, FormNavigatorEntry>() {
146
147 @Override
148 public void map(
149 ServiceReference<FormNavigatorEntry> serviceReference,
150 Emitter<String> emitter) {
151
152 Registry registry = RegistryUtil.getRegistry();
153
154 FormNavigatorEntry<?> formNavigatorEntry =
155 registry.getService(serviceReference);
156
157 emitter.emit(
158 _getKey(
159 formNavigatorEntry.getFormNavigatorId(),
160 formNavigatorEntry.getCategoryKey()));
161
162 registry.ungetService(serviceReference);
163 }
164
165 });
166 }
167
168 private static final FormNavigatorEntryUtil _instance =
169 new FormNavigatorEntryUtil();
170
171 @SuppressWarnings("rawtypes")
172 private final ServiceTrackerMap<String, List<FormNavigatorEntry>>
173 _formNavigatorEntries;
174
175 }