001
014
015 package com.liferay.portlet.assetpublisher.action;
016
017 import com.liferay.portal.kernel.json.JSONFactoryUtil;
018 import com.liferay.portal.kernel.json.JSONObject;
019 import com.liferay.portal.kernel.portlet.DefaultConfigurationAction;
020 import com.liferay.portal.kernel.servlet.SessionErrors;
021 import com.liferay.portal.kernel.servlet.SessionMessages;
022 import com.liferay.portal.kernel.staging.LayoutStagingUtil;
023 import com.liferay.portal.kernel.staging.StagingUtil;
024 import com.liferay.portal.kernel.util.ArrayUtil;
025 import com.liferay.portal.kernel.util.Constants;
026 import com.liferay.portal.kernel.util.DateFormatFactoryUtil;
027 import com.liferay.portal.kernel.util.GetterUtil;
028 import com.liferay.portal.kernel.util.LocaleUtil;
029 import com.liferay.portal.kernel.util.ParamUtil;
030 import com.liferay.portal.kernel.util.StringPool;
031 import com.liferay.portal.kernel.util.StringUtil;
032 import com.liferay.portal.kernel.util.UnicodeProperties;
033 import com.liferay.portal.kernel.util.Validator;
034 import com.liferay.portal.model.GroupConstants;
035 import com.liferay.portal.model.Layout;
036 import com.liferay.portal.model.LayoutRevision;
037 import com.liferay.portal.model.LayoutSetBranch;
038 import com.liferay.portal.model.LayoutTypePortletConstants;
039 import com.liferay.portal.security.auth.PrincipalException;
040 import com.liferay.portal.service.LayoutLocalServiceUtil;
041 import com.liferay.portal.service.LayoutRevisionLocalServiceUtil;
042 import com.liferay.portal.service.ServiceContext;
043 import com.liferay.portal.service.ServiceContextFactory;
044 import com.liferay.portal.theme.ThemeDisplay;
045 import com.liferay.portal.util.PortalUtil;
046 import com.liferay.portal.util.PropsValues;
047 import com.liferay.portal.util.WebKeys;
048 import com.liferay.portlet.PortletPreferencesImpl;
049 import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
050 import com.liferay.portlet.asset.AssetTagException;
051 import com.liferay.portlet.asset.DuplicateQueryRuleException;
052 import com.liferay.portlet.asset.model.AssetQueryRule;
053 import com.liferay.portlet.asset.model.AssetRendererFactory;
054 import com.liferay.portlet.asset.model.ClassType;
055 import com.liferay.portlet.asset.model.ClassTypeReader;
056 import com.liferay.portlet.asset.service.AssetTagLocalServiceUtil;
057 import com.liferay.portlet.assetpublisher.util.AssetPublisher;
058 import com.liferay.portlet.assetpublisher.util.AssetPublisherUtil;
059 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
060 import com.liferay.portlet.dynamicdatamapping.storage.Field;
061 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
062 import com.liferay.portlet.dynamicdatamapping.util.DDMUtil;
063 import com.liferay.util.ContentUtil;
064
065 import java.io.Serializable;
066
067 import java.text.DateFormat;
068
069 import java.util.ArrayList;
070 import java.util.Date;
071 import java.util.List;
072
073 import javax.portlet.ActionRequest;
074 import javax.portlet.ActionResponse;
075 import javax.portlet.PortletConfig;
076 import javax.portlet.PortletPreferences;
077 import javax.portlet.PortletRequest;
078 import javax.portlet.ResourceRequest;
079 import javax.portlet.ResourceResponse;
080
081 import javax.servlet.http.HttpServletRequest;
082
083
087 public class ConfigurationActionImpl extends DefaultConfigurationAction {
088
089 @Override
090 public void postProcess(
091 long companyId, PortletRequest portletRequest,
092 PortletPreferences portletPreferences) {
093
094 String languageId = LocaleUtil.toLanguageId(
095 LocaleUtil.getSiteDefault());
096
097 removeDefaultValue(
098 portletRequest, portletPreferences,
099 "emailAssetEntryAddedBody_" + languageId,
100 ContentUtil.get(
101 PropsValues.ASSET_PUBLISHER_EMAIL_ASSET_ENTRY_ADDED_BODY));
102 removeDefaultValue(
103 portletRequest, portletPreferences,
104 "emailAssetEntryAddedSubject_" + languageId,
105 ContentUtil.get(
106 PropsValues.ASSET_PUBLISHER_EMAIL_ASSET_ENTRY_ADDED_SUBJECT));
107 }
108
109 @Override
110 public void processAction(
111 PortletConfig portletConfig, ActionRequest actionRequest,
112 ActionResponse actionResponse)
113 throws Exception {
114
115 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
116
117 String portletResource = ParamUtil.getString(
118 actionRequest, "portletResource");
119
120 PortletPreferences preferences = actionRequest.getPreferences();
121
122 if (cmd.equals(Constants.TRANSLATE)) {
123 super.processAction(portletConfig, actionRequest, actionResponse);
124 }
125 else if (cmd.equals(Constants.UPDATE)) {
126 try {
127 validateEmail(actionRequest, "emailAssetEntryAdded");
128 validateEmailFrom(actionRequest);
129
130 updateDisplaySettings(actionRequest);
131
132 String selectionStyle = getParameter(
133 actionRequest, "selectionStyle");
134
135 if (selectionStyle.equals("dynamic")) {
136 updateQueryLogic(actionRequest, preferences);
137 }
138
139 updateDefaultAssetPublisher(actionRequest);
140
141 super.processAction(
142 portletConfig, actionRequest, actionResponse);
143 }
144 catch (Exception e) {
145 if (e instanceof AssetTagException ||
146 e instanceof DuplicateQueryRuleException) {
147
148 SessionErrors.add(actionRequest, e.getClass(), e);
149 }
150 else {
151 throw e;
152 }
153 }
154 }
155 else {
156 if (cmd.equals("add-scope")) {
157 addScope(actionRequest, preferences);
158 }
159 else if (cmd.equals("add-selection")) {
160 AssetPublisherUtil.addSelection(
161 actionRequest, preferences, portletResource);
162 }
163 else if (cmd.equals("move-selection-down")) {
164 moveSelectionDown(actionRequest, preferences);
165 }
166 else if (cmd.equals("move-selection-up")) {
167 moveSelectionUp(actionRequest, preferences);
168 }
169 else if (cmd.equals("remove-selection")) {
170 removeSelection(actionRequest, preferences);
171 }
172 else if (cmd.equals("remove-scope")) {
173 removeScope(actionRequest, preferences);
174 }
175 else if (cmd.equals("select-scope")) {
176 setScopes(actionRequest, preferences);
177 }
178 else if (cmd.equals("selection-style")) {
179 setSelectionStyle(actionRequest, preferences);
180 }
181
182 if (SessionErrors.isEmpty(actionRequest)) {
183 preferences.store();
184
185 SessionMessages.add(
186 actionRequest,
187 PortalUtil.getPortletId(actionRequest) +
188 SessionMessages.KEY_SUFFIX_REFRESH_PORTLET,
189 portletResource);
190
191 SessionMessages.add(
192 actionRequest,
193 PortalUtil.getPortletId(actionRequest) +
194 SessionMessages.KEY_SUFFIX_UPDATED_CONFIGURATION);
195 }
196
197 String redirect = PortalUtil.escapeRedirect(
198 ParamUtil.getString(actionRequest, "redirect"));
199
200 if (Validator.isNotNull(redirect)) {
201 actionResponse.sendRedirect(redirect);
202 }
203 }
204 }
205
206 @Override
207 public void serveResource(
208 PortletConfig portletConfig, ResourceRequest resourceRequest,
209 ResourceResponse resourceResponse)
210 throws Exception {
211
212 ThemeDisplay themeDisplay = (ThemeDisplay)resourceRequest.getAttribute(
213 WebKeys.THEME_DISPLAY);
214
215 String cmd = ParamUtil.getString(resourceRequest, Constants.CMD);
216
217 if (!cmd.equals("getFieldValue")) {
218 return;
219 }
220
221 ServiceContext serviceContext = ServiceContextFactory.getInstance(
222 resourceRequest);
223
224 long structureId = ParamUtil.getLong(resourceRequest, "structureId");
225
226 Fields fields = (Fields)serviceContext.getAttribute(
227 Fields.class.getName() + structureId);
228
229 if (fields == null) {
230 String fieldsNamespace = ParamUtil.getString(
231 resourceRequest, "fieldsNamespace");
232
233 fields = DDMUtil.getFields(
234 structureId, fieldsNamespace, serviceContext);
235 }
236
237 String fieldName = ParamUtil.getString(resourceRequest, "name");
238
239 Field field = fields.get(fieldName);
240
241 Serializable fieldValue = field.getValue(themeDisplay.getLocale(), 0);
242
243 JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
244
245 if (fieldValue != null) {
246 jsonObject.put("success", true);
247 }
248 else {
249 jsonObject.put("success", false);
250
251 writeJSON(resourceRequest, resourceResponse, jsonObject);
252
253 return;
254 }
255
256 DDMStructure ddmStructure = field.getDDMStructure();
257
258 String type = ddmStructure.getFieldType(fieldName);
259
260 Serializable displayValue = DDMUtil.getDisplayFieldValue(
261 themeDisplay, fieldValue, type);
262
263 jsonObject.put("displayValue", String.valueOf(displayValue));
264
265 if (fieldValue instanceof Boolean) {
266 jsonObject.put("value", (Boolean)fieldValue);
267 }
268 else if (fieldValue instanceof Date) {
269 DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(
270 "yyyyMMddHHmmss");
271
272 jsonObject.put("value", dateFormat.format(fieldValue));
273 }
274 else if (fieldValue instanceof Double) {
275 jsonObject.put("value", (Double)fieldValue);
276 }
277 else if (fieldValue instanceof Float) {
278 jsonObject.put("value", (Float)fieldValue);
279 }
280 else if (fieldValue instanceof Integer) {
281 jsonObject.put("value", (Integer)fieldValue);
282 }
283 else if (fieldValue instanceof Number) {
284 jsonObject.put("value", String.valueOf(fieldValue));
285 }
286 else {
287 jsonObject.put("value", (String)fieldValue);
288 }
289
290 writeJSON(resourceRequest, resourceResponse, jsonObject);
291 }
292
293 protected void addScope(
294 ActionRequest actionRequest, PortletPreferences preferences)
295 throws Exception {
296
297 String[] scopeIds = preferences.getValues(
298 "scopeIds",
299 new String[] {
300 AssetPublisher.SCOPE_ID_GROUP_PREFIX + GroupConstants.DEFAULT
301 });
302
303 String scopeId = ParamUtil.getString(actionRequest, "scopeId");
304
305 checkPermission(actionRequest, scopeId);
306
307 if (!ArrayUtil.contains(scopeIds, scopeId)) {
308 scopeIds = ArrayUtil.append(scopeIds, scopeId);
309 }
310
311 preferences.setValues("scopeIds", scopeIds);
312 }
313
314 protected void checkPermission(ActionRequest actionRequest, String scopeId)
315 throws Exception {
316
317 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
318 WebKeys.THEME_DISPLAY);
319
320 Layout layout = themeDisplay.getLayout();
321
322 if (!AssetPublisherUtil.isScopeIdSelectable(
323 themeDisplay.getPermissionChecker(), scopeId,
324 themeDisplay.getCompanyGroupId(), layout)) {
325
326 throw new PrincipalException();
327 }
328 }
329
330 protected String getAssetClassName(
331 ActionRequest actionRequest, String[] classNameIds)
332 throws Exception {
333
334 String anyAssetTypeString = getParameter(actionRequest, "anyAssetType");
335
336 boolean anyAssetType = GetterUtil.getBoolean(anyAssetTypeString);
337
338 if (anyAssetType) {
339 return null;
340 }
341
342 long defaultAssetTypeId = GetterUtil.getLong(anyAssetTypeString);
343
344 if ((defaultAssetTypeId == 0) && (classNameIds.length == 1)) {
345 defaultAssetTypeId = GetterUtil.getLong(classNameIds[0]);
346 }
347
348 if (defaultAssetTypeId <= 0 ) {
349 return null;
350 }
351
352 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
353 WebKeys.THEME_DISPLAY);
354
355 String className = PortalUtil.getClassName(defaultAssetTypeId);
356
357 AssetRendererFactory assetRendererFactory =
358 AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
359 className);
360
361 ClassTypeReader classTypeReader =
362 assetRendererFactory.getClassTypeReader();
363
364 List<ClassType> classTypes = classTypeReader.getAvailableClassTypes(
365 PortalUtil.getCurrentAndAncestorSiteGroupIds(
366 themeDisplay.getSiteGroupId()),
367 themeDisplay.getLocale());
368
369 if (classTypes.isEmpty()) {
370 return null;
371 }
372
373 String assetClassName = AssetPublisherUtil.getClassName(
374 assetRendererFactory);
375
376 return assetClassName;
377 }
378
379 protected String[] getClassTypeIds(
380 ActionRequest actionRequest, String[] classNameIds)
381 throws Exception {
382
383 String assetClassName = getAssetClassName(actionRequest, classNameIds);
384
385 if (assetClassName == null) {
386 return null;
387 }
388
389 String anyAssetClassTypeString = getParameter(
390 actionRequest, "anyClassType" + assetClassName);
391
392 boolean anyAssetClassType = GetterUtil.getBoolean(
393 anyAssetClassTypeString);
394
395 if (anyAssetClassType) {
396 return null;
397 }
398
399 long defaultAssetClassTypeId = GetterUtil.getLong(
400 anyAssetClassTypeString);
401
402 if (defaultAssetClassTypeId > 0) {
403 return new String[] {String.valueOf(defaultAssetClassTypeId)};
404 }
405 else {
406 return StringUtil.split(
407 getParameter(actionRequest, "classTypeIds" + assetClassName));
408 }
409 }
410
411 protected AssetQueryRule getQueryRule(
412 ActionRequest actionRequest, int index) {
413
414 boolean contains = ParamUtil.getBoolean(
415 actionRequest, "queryContains" + index);
416 boolean andOperator = ParamUtil.getBoolean(
417 actionRequest, "queryAndOperator" + index);
418
419 String name = ParamUtil.getString(actionRequest, "queryName" + index);
420
421 String[] values = null;
422
423 if (name.equals("assetTags")) {
424 values = StringUtil.split(
425 ParamUtil.getString(actionRequest, "queryTagNames" + index));
426 }
427 else {
428 values = StringUtil.split(
429 ParamUtil.getString(actionRequest, "queryCategoryIds" + index));
430 }
431
432 return new AssetQueryRule(contains, andOperator, name, values);
433 }
434
435 protected boolean getSubtypesFieldsFilterEnabled(
436 ActionRequest actionRequest, String[] classNameIds)
437 throws Exception {
438
439 String assetClassName = getAssetClassName(actionRequest, classNameIds);
440
441 if (assetClassName == null) {
442 return false;
443 }
444
445 return GetterUtil.getBoolean(
446 getParameter(
447 actionRequest, "subtypeFieldsFilterEnabled" + assetClassName));
448 }
449
450 protected void moveSelectionDown(
451 ActionRequest actionRequest, PortletPreferences preferences)
452 throws Exception {
453
454 int assetEntryOrder = ParamUtil.getInteger(
455 actionRequest, "assetEntryOrder");
456
457 String[] manualEntries = preferences.getValues(
458 "assetEntryXml", new String[0]);
459
460 if ((assetEntryOrder >= (manualEntries.length - 1)) ||
461 (assetEntryOrder < 0)) {
462
463 return;
464 }
465
466 String temp = manualEntries[assetEntryOrder + 1];
467
468 manualEntries[assetEntryOrder + 1] = manualEntries[assetEntryOrder];
469 manualEntries[assetEntryOrder] = temp;
470
471 preferences.setValues("assetEntryXml", manualEntries);
472 }
473
474 protected void moveSelectionUp(
475 ActionRequest actionRequest, PortletPreferences preferences)
476 throws Exception {
477
478 int assetEntryOrder = ParamUtil.getInteger(
479 actionRequest, "assetEntryOrder");
480
481 String[] manualEntries = preferences.getValues(
482 "assetEntryXml", new String[0]);
483
484 if ((assetEntryOrder >= manualEntries.length) ||
485 (assetEntryOrder <= 0)) {
486
487 return;
488 }
489
490 String temp = manualEntries[assetEntryOrder - 1];
491
492 manualEntries[assetEntryOrder - 1] = manualEntries[assetEntryOrder];
493 manualEntries[assetEntryOrder] = temp;
494
495 preferences.setValues("assetEntryXml", manualEntries);
496 }
497
498 protected void removeScope(
499 ActionRequest actionRequest, PortletPreferences preferences)
500 throws Exception {
501
502 String[] scopeIds = preferences.getValues(
503 "scopeIds",
504 new String[] {
505 AssetPublisher.SCOPE_ID_GROUP_PREFIX + GroupConstants.DEFAULT
506 });
507
508 String scopeId = ParamUtil.getString(actionRequest, "scopeId");
509
510 scopeIds = ArrayUtil.remove(scopeIds, scopeId);
511
512 if (scopeId.startsWith(AssetPublisher.SCOPE_ID_PARENT_GROUP_PREFIX)) {
513 scopeId = scopeId.substring("Parent".length());
514
515 scopeIds = ArrayUtil.remove(scopeIds, scopeId);
516 }
517
518 preferences.setValues("scopeIds", scopeIds);
519 }
520
521 protected void removeSelection(
522 ActionRequest actionRequest, PortletPreferences preferences)
523 throws Exception {
524
525 int assetEntryOrder = ParamUtil.getInteger(
526 actionRequest, "assetEntryOrder");
527
528 String[] manualEntries = preferences.getValues(
529 "assetEntryXml", new String[0]);
530
531 if (assetEntryOrder >= manualEntries.length) {
532 return;
533 }
534
535 String[] newEntries = new String[manualEntries.length -1];
536
537 int i = 0;
538 int j = 0;
539
540 for (; i < manualEntries.length; i++) {
541 if (i != assetEntryOrder) {
542 newEntries[j++] = manualEntries[i];
543 }
544 }
545
546 preferences.setValues("assetEntryXml", newEntries);
547 }
548
549 protected void setScopes(
550 ActionRequest actionRequest, PortletPreferences preferences)
551 throws Exception {
552
553 String[] scopeIds = StringUtil.split(
554 getParameter(actionRequest, "scopeIds"));
555
556 preferences.setValues("scopeIds", scopeIds);
557 }
558
559 protected void setSelectionStyle(
560 ActionRequest actionRequest, PortletPreferences preferences)
561 throws Exception {
562
563 String selectionStyle = getParameter(actionRequest, "selectionStyle");
564 String displayStyle = getParameter(actionRequest, "displayStyle");
565
566 preferences.setValue("selectionStyle", selectionStyle);
567
568 if (selectionStyle.equals("manual") ||
569 selectionStyle.equals("view-count")) {
570
571 preferences.setValue("enableRss", String.valueOf(false));
572 preferences.setValue("showQueryLogic", Boolean.FALSE.toString());
573
574 preferences.reset("rssDelta");
575 preferences.reset("rssDisplayStyle");
576 preferences.reset("rssFormat");
577 preferences.reset("rssName");
578 }
579
580 if (!selectionStyle.equals("view-count") &&
581 displayStyle.equals("view-count-details")) {
582
583 preferences.setValue("displayStyle", "full-content");
584 }
585 }
586
587 protected void updateDefaultAssetPublisher(ActionRequest actionRequest)
588 throws Exception {
589
590 boolean defaultAssetPublisher = ParamUtil.getBoolean(
591 actionRequest, "defaultAssetPublisher");
592
593 Layout layout = (Layout)actionRequest.getAttribute(WebKeys.LAYOUT);
594
595 String portletResource = ParamUtil.getString(
596 actionRequest, "portletResource");
597
598 UnicodeProperties typeSettingsProperties =
599 layout.getTypeSettingsProperties();
600
601 if (defaultAssetPublisher) {
602 typeSettingsProperties.setProperty(
603 LayoutTypePortletConstants.DEFAULT_ASSET_PUBLISHER_PORTLET_ID,
604 portletResource);
605 }
606 else {
607 String defaultAssetPublisherPortletId =
608 typeSettingsProperties.getProperty(
609 LayoutTypePortletConstants.
610 DEFAULT_ASSET_PUBLISHER_PORTLET_ID);
611
612 if (Validator.isNotNull(defaultAssetPublisherPortletId) &&
613 defaultAssetPublisherPortletId.equals(portletResource)) {
614
615 typeSettingsProperties.setProperty(
616 LayoutTypePortletConstants.
617 DEFAULT_ASSET_PUBLISHER_PORTLET_ID,
618 StringPool.BLANK);
619 }
620 }
621
622 layout = LayoutLocalServiceUtil.updateLayout(
623 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
624 layout.getTypeSettings());
625
626 if (LayoutStagingUtil.isBranchingLayout(layout)) {
627 HttpServletRequest request = PortalUtil.getHttpServletRequest(
628 actionRequest);
629
630 LayoutSetBranch layoutSetBranch =
631 LayoutStagingUtil.getLayoutSetBranch(layout.getLayoutSet());
632
633 long layoutSetBranchId = layoutSetBranch.getLayoutSetBranchId();
634
635 long layoutRevisionId = StagingUtil.getRecentLayoutRevisionId(
636 request, layoutSetBranchId, layout.getPlid());
637
638 LayoutRevision layoutRevision =
639 LayoutRevisionLocalServiceUtil.getLayoutRevision(
640 layoutRevisionId);
641
642 PortletPreferencesImpl portletPreferences =
643 (PortletPreferencesImpl)actionRequest.getPreferences();
644
645 if (layoutRevision != null) {
646 portletPreferences.setPlid(
647 layoutRevision.getLayoutRevisionId());
648 }
649 }
650 }
651
652 protected void updateDisplaySettings(ActionRequest actionRequest)
653 throws Exception {
654
655 String[] classNameIds = StringUtil.split(
656 getParameter(actionRequest, "classNameIds"));
657 String[] classTypeIds = getClassTypeIds(actionRequest, classNameIds);
658 String[] extensions = actionRequest.getParameterValues("extensions");
659 boolean subtypeFieldsFilterEnabled = getSubtypesFieldsFilterEnabled(
660 actionRequest, classNameIds);
661
662 setPreference(actionRequest, "classNameIds", classNameIds);
663 setPreference(actionRequest, "classTypeIds", classTypeIds);
664 setPreference(actionRequest, "extensions", extensions);
665 setPreference(
666 actionRequest, "subtypeFieldsFilterEnabled",
667 String.valueOf(subtypeFieldsFilterEnabled));
668 }
669
670 protected void updateQueryLogic(
671 ActionRequest actionRequest, PortletPreferences preferences)
672 throws Exception {
673
674 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
675 WebKeys.THEME_DISPLAY);
676
677 long userId = themeDisplay.getUserId();
678 long groupId = themeDisplay.getSiteGroupId();
679
680 int[] queryRulesIndexes = StringUtil.split(
681 ParamUtil.getString(actionRequest, "queryLogicIndexes"), 0);
682
683 int i = 0;
684
685 List<AssetQueryRule> queryRules = new ArrayList<AssetQueryRule>();
686
687 for (int queryRulesIndex : queryRulesIndexes) {
688 AssetQueryRule queryRule = getQueryRule(
689 actionRequest, queryRulesIndex);
690
691 validateQueryRule(userId, groupId, queryRules, queryRule);
692
693 queryRules.add(queryRule);
694
695 setPreference(
696 actionRequest, "queryContains" + i,
697 String.valueOf(queryRule.isContains()));
698 setPreference(
699 actionRequest, "queryAndOperator" + i,
700 String.valueOf(queryRule.isAndOperator()));
701 setPreference(actionRequest, "queryName" + i, queryRule.getName());
702 setPreference(
703 actionRequest, "queryValues" + i, queryRule.getValues());
704
705 i++;
706 }
707
708
709
710 String[] values = preferences.getValues(
711 "queryValues" + i, new String[0]);
712
713 while (values.length > 0) {
714 setPreference(actionRequest, "queryContains" + i, StringPool.BLANK);
715 setPreference(
716 actionRequest, "queryAndOperator" + i, StringPool.BLANK);
717 setPreference(actionRequest, "queryName" + i, StringPool.BLANK);
718 setPreference(actionRequest, "queryValues" + i, new String[0]);
719
720 i++;
721
722 values = preferences.getValues("queryValues" + i, new String[0]);
723 }
724 }
725
726 protected void validateQueryRule(
727 long userId, long groupId, List<AssetQueryRule> queryRules,
728 AssetQueryRule queryRule)
729 throws Exception {
730
731 String name = queryRule.getName();
732
733 if (name.equals("assetTags")) {
734 AssetTagLocalServiceUtil.checkTags(
735 userId, groupId, queryRule.getValues());
736 }
737
738 if (queryRules.contains(queryRule)) {
739 throw new DuplicateQueryRuleException(
740 queryRule.isContains(), queryRule.isAndOperator(),
741 queryRule.getName());
742 }
743 }
744
745 }