001
014
015 package com.liferay.portal.kernel.lar;
016
017 import com.liferay.portal.kernel.backgroundtask.BackgroundTaskThreadLocal;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.util.ArrayUtil;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.Time;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.kernel.xml.Document;
026 import com.liferay.portal.kernel.xml.DocumentException;
027 import com.liferay.portal.kernel.xml.Element;
028 import com.liferay.portal.kernel.xml.SAXReaderUtil;
029 import com.liferay.portal.model.Portlet;
030 import com.liferay.portal.service.PortletLocalServiceUtil;
031 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
032 import com.liferay.portal.util.PortletKeys;
033 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
034 import com.liferay.portlet.portletdisplaytemplate.util.PortletDisplayTemplate;
035 import com.liferay.portlet.portletdisplaytemplate.util.PortletDisplayTemplateUtil;
036
037 import java.io.IOException;
038
039 import java.util.ArrayList;
040 import java.util.List;
041
042 import javax.portlet.PortletPreferences;
043
044
047 public abstract class BasePortletDataHandler implements PortletDataHandler {
048
049 @Override
050 public PortletPreferences deleteData(
051 PortletDataContext portletDataContext, String portletId,
052 PortletPreferences portletPreferences)
053 throws PortletDataException {
054
055 long startTime = 0;
056
057 if (_log.isInfoEnabled()) {
058 _log.info("Deleting portlet " + portletId);
059
060 startTime = System.currentTimeMillis();
061 }
062
063 try {
064 return doDeleteData(
065 portletDataContext, portletId, portletPreferences);
066 }
067 catch (Exception e) {
068 throw new PortletDataException(e);
069 }
070 finally {
071 if (_log.isInfoEnabled()) {
072 long duration = System.currentTimeMillis() - startTime;
073
074 _log.info("Deleted portlet in " + Time.getDuration(duration));
075 }
076 }
077 }
078
079 @Override
080 public String exportData(
081 PortletDataContext portletDataContext, String portletId,
082 PortletPreferences portletPreferences)
083 throws PortletDataException {
084
085 long startTime = 0;
086
087 if (_log.isInfoEnabled()) {
088 _log.info("Exporting portlet " + portletId);
089
090 startTime = System.currentTimeMillis();
091 }
092
093 try {
094 portletDataContext.addDeletionSystemEventStagedModelTypes(
095 getDeletionSystemEventStagedModelTypes());
096
097 for (PortletDataHandlerControl portletDataHandlerControl :
098 getExportControls()) {
099
100 addUncheckedModelAdditionCount(
101 portletDataContext, portletDataHandlerControl);
102 }
103
104 if (BackgroundTaskThreadLocal.hasBackgroundTask()) {
105 PortletDataContext clonePortletDataContext =
106 PortletDataContextFactoryUtil.clonePortletDataContext(
107 portletDataContext);
108
109 prepareManifestSummary(
110 clonePortletDataContext, portletPreferences);
111
112 PortletDataHandlerStatusMessageSenderUtil.sendStatusMessage(
113 "portlet", portletId,
114 clonePortletDataContext.getManifestSummary());
115 }
116
117 return doExportData(
118 portletDataContext, portletId, portletPreferences);
119 }
120 catch (Exception e) {
121 throw new PortletDataException(e);
122 }
123 finally {
124 if (_log.isInfoEnabled()) {
125 long duration = System.currentTimeMillis() - startTime;
126
127 _log.info("Exported portlet in " + Time.getDuration(duration));
128 }
129 }
130 }
131
132 @Override
133 public DataLevel getDataLevel() {
134 return _dataLevel;
135 }
136
137 @Override
138 public String[] getDataPortletPreferences() {
139 return _dataPortletPreferences;
140 }
141
142 @Override
143 public StagedModelType[] getDeletionSystemEventStagedModelTypes() {
144 return _deletionSystemEventStagedModelTypes;
145 }
146
147 @Override
148 public PortletDataHandlerControl[] getExportConfigurationControls(
149 long companyId, long groupId, Portlet portlet,
150 boolean privateLayout)
151 throws Exception {
152
153 return getExportConfigurationControls(
154 companyId, groupId, portlet, -1, privateLayout);
155 }
156
157 @Override
158 public PortletDataHandlerControl[] getExportConfigurationControls(
159 long companyId, long groupId, Portlet portlet, long plid,
160 boolean privateLayout)
161 throws Exception {
162
163 List<PortletDataHandlerBoolean> configurationControls =
164 new ArrayList<PortletDataHandlerBoolean>();
165
166
167
168 if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
169 companyId, groupId, PortletKeys.PREFS_OWNER_ID_DEFAULT,
170 PortletKeys.PREFS_OWNER_TYPE_LAYOUT, plid, portlet,
171 privateLayout, true) > 0) ||
172 (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
173 groupId, PortletKeys.PREFS_OWNER_TYPE_GROUP,
174 portlet.getRootPortletId(), true) > 0) ||
175 (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
176 companyId, PortletKeys.PREFS_OWNER_TYPE_COMPANY,
177 portlet.getRootPortletId(), true) > 0)) {
178
179 configurationControls.add(
180 new PortletDataHandlerBoolean(
181 null, PortletDataHandlerKeys.PORTLET_SETUP, "setup",
182 true, false, null, null, null));
183 }
184
185
186
187 if (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
188 -1, PortletKeys.PREFS_OWNER_TYPE_ARCHIVED,
189 portlet.getRootPortletId(), true) > 0) {
190
191 configurationControls.add(
192 new PortletDataHandlerBoolean(
193 null, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS,
194 "archived-setups", true, false, null, null, null)
195 );
196 }
197
198
199
200 if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
201 companyId, groupId, -1, PortletKeys.PREFS_OWNER_TYPE_USER, plid,
202 portlet, privateLayout, true) > 0) ||
203 (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
204 companyId, groupId, groupId, PortletKeys.PREFS_OWNER_TYPE_USER,
205 PortletKeys.PREFS_PLID_SHARED, portlet, privateLayout, true)
206 > 0)) {
207
208 configurationControls.add(
209 new PortletDataHandlerBoolean(
210 null, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES,
211 "user-preferences", true, false, null, null, null));
212 }
213
214 return configurationControls.toArray(
215 new PortletDataHandlerBoolean[configurationControls.size()]);
216 }
217
218 @Override
219 public PortletDataHandlerControl[] getExportControls() {
220 return _exportControls;
221 }
222
223 @Override
224 public PortletDataHandlerControl[] getExportMetadataControls() {
225 return _exportMetadataControls;
226 }
227
228 @Override
229 public long getExportModelCount(ManifestSummary manifestSummary) {
230 return getExportModelCount(manifestSummary, getExportControls());
231 }
232
233 @Override
234 public PortletDataHandlerControl[] getImportConfigurationControls(
235 Portlet portlet, ManifestSummary manifestSummary) {
236
237 String[] configurationOptions =
238 manifestSummary.getConfigurationPortletOptions(
239 portlet.getRootPortletId());
240
241 List<PortletDataHandlerBoolean> configurationControls =
242 new ArrayList<PortletDataHandlerBoolean>();
243
244
245
246 if (ArrayUtil.contains(configurationOptions, "setup")) {
247 configurationControls.add(
248 new PortletDataHandlerBoolean(
249 null, PortletDataHandlerKeys.PORTLET_SETUP, "setup", true,
250 false, null, null, null));
251 }
252
253
254
255 if (ArrayUtil.contains(configurationOptions, "archived-setups")) {
256 configurationControls.add(
257 new PortletDataHandlerBoolean(
258 null, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS,
259 "archived-setups", true, false, null, null, null));
260 }
261
262
263
264 if (ArrayUtil.contains(configurationOptions, "user-preferences")) {
265 configurationControls.add(
266 new PortletDataHandlerBoolean(
267 null, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES,
268 "user-preferences", true, false, null, null, null));
269 }
270
271 return configurationControls.toArray(
272 new PortletDataHandlerBoolean[configurationControls.size()]);
273 }
274
275 @Override
276 public PortletDataHandlerControl[] getImportControls() {
277 return _importControls;
278 }
279
280 @Override
281 public PortletDataHandlerControl[] getImportMetadataControls() {
282 return _importMetadataControls;
283 }
284
285 @Override
286 public String getPortletId() {
287 return _portletId;
288 }
289
290 @Override
291 public PortletPreferences importData(
292 PortletDataContext portletDataContext, String portletId,
293 PortletPreferences portletPreferences, String data)
294 throws PortletDataException {
295
296 long startTime = 0;
297
298 if (_log.isInfoEnabled()) {
299 _log.info("Importing portlet " + portletId);
300
301 startTime = System.currentTimeMillis();
302 }
303
304 long sourceGroupId = portletDataContext.getSourceGroupId();
305
306 try {
307 if (Validator.isXml(data)) {
308 addImportDataRootElement(portletDataContext, data);
309 }
310
311 portletDataContext.addDeletionSystemEventStagedModelTypes(
312 getDeletionSystemEventStagedModelTypes());
313
314 return doImportData(
315 portletDataContext, portletId, portletPreferences, data);
316 }
317 catch (Exception e) {
318 throw new PortletDataException(e);
319 }
320 finally {
321 portletDataContext.setSourceGroupId(sourceGroupId);
322
323 if (_log.isInfoEnabled()) {
324 long duration = System.currentTimeMillis() - startTime;
325
326 _log.info("Imported portlet in " + Time.getDuration(duration));
327 }
328 }
329 }
330
331 @Override
332 public boolean isDataLocalized() {
333 return _dataLocalized;
334 }
335
336 @Override
337 public boolean isDataPortalLevel() {
338 return _dataLevel.equals(DataLevel.PORTAL);
339 }
340
341 @Override
342 public boolean isDataPortletInstanceLevel() {
343 return _dataLevel.equals(DataLevel.PORTLET_INSTANCE);
344 }
345
346 @Override
347 public boolean isDataSiteLevel() {
348 return _dataLevel.equals(DataLevel.SITE);
349 }
350
351 @Override
352 public boolean isPublishToLiveByDefault() {
353 return _publishToLiveByDefault;
354 }
355
356 @Override
357 public boolean isSupportsDataStrategyCopyAsNew() {
358 return _supportsDataStrategyCopyAsNew;
359 }
360
361 @Override
362 public void prepareManifestSummary(PortletDataContext portletDataContext)
363 throws PortletDataException {
364
365 prepareManifestSummary(portletDataContext, null);
366 }
367
368 @Override
369 public void prepareManifestSummary(
370 PortletDataContext portletDataContext,
371 PortletPreferences portletPreferences)
372 throws PortletDataException {
373
374 try {
375 doPrepareManifestSummary(portletDataContext, portletPreferences);
376 }
377 catch (Exception e) {
378 throw new PortletDataException(e);
379 }
380 }
381
382 @Override
383 public PortletPreferences processExportPortletPreferences(
384 PortletDataContext portletDataContext, String portletId,
385 PortletPreferences portletPreferences, Element rootElement)
386 throws PortletDataException {
387
388 String displayStyle = getDisplayTemplate(
389 portletDataContext, portletId, portletPreferences);
390
391 if (Validator.isNotNull(displayStyle) &&
392 displayStyle.startsWith(
393 PortletDisplayTemplate.DISPLAY_STYLE_PREFIX)) {
394
395 long displayStyleGroupId = getDisplayTemplateGroupId(
396 portletDataContext, portletId, portletPreferences);
397
398 long previousScopeGroupId = portletDataContext.getScopeGroupId();
399
400 if (displayStyleGroupId != portletDataContext.getScopeGroupId()) {
401 portletDataContext.setScopeGroupId(displayStyleGroupId);
402 }
403
404 DDMTemplate ddmTemplate =
405 PortletDisplayTemplateUtil.fetchDDMTemplate(
406 portletDataContext.getGroupId(), displayStyle);
407
408 if (ddmTemplate != null) {
409 StagedModelDataHandlerUtil.exportStagedModel(
410 portletDataContext, ddmTemplate);
411 }
412
413 portletDataContext.setScopeGroupId(previousScopeGroupId);
414 }
415
416 try {
417 return doProcessExportPortletPreferences(
418 portletDataContext, portletId, portletPreferences, rootElement);
419 }
420 catch (Exception e) {
421 throw new PortletDataException(e);
422 }
423 }
424
425 @Override
426 public PortletPreferences processImportPortletPreferences(
427 PortletDataContext portletDataContext, String portletId,
428 PortletPreferences portletPreferences)
429 throws PortletDataException {
430
431 try {
432 String displayStyle = getDisplayTemplate(
433 portletDataContext, portletId, portletPreferences);
434
435 if (Validator.isNotNull(displayStyle) &&
436 displayStyle.startsWith(
437 PortletDisplayTemplate.DISPLAY_STYLE_PREFIX)) {
438
439 DDMTemplate ddmTemplate = null;
440
441 long displayStyleGroupId = getDisplayTemplateGroupId(
442 portletDataContext, portletId, portletPreferences);
443
444 if (displayStyleGroupId ==
445 portletDataContext.getCompanyGroupId()) {
446
447 ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
448 portletDataContext.getCompanyGroupId(), displayStyle);
449 }
450 else if (displayStyleGroupId ==
451 portletDataContext.getSourceGroupId()) {
452
453 ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
454 portletDataContext.getScopeGroupId(), displayStyle);
455 }
456 else {
457 ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
458 displayStyleGroupId, displayStyle);
459 }
460
461 long importedDisplayStyleGroupId =
462 portletDataContext.getScopeGroupId();
463
464 if (ddmTemplate == null) {
465 String ddmTemplateUuid =
466 PortletDisplayTemplateUtil.getDDMTemplateUuid(
467 displayStyle);
468
469 Element ddmTemplateElement =
470 portletDataContext.getImportDataElement(
471 DDMTemplate.class.getSimpleName(), "uuid",
472 ddmTemplateUuid);
473
474 String ddmTemplatePath = ddmTemplateElement.attributeValue(
475 "path");
476
477 ddmTemplate =
478 (DDMTemplate)portletDataContext.getZipEntryAsObject(
479 ddmTemplatePath);
480
481 if (ddmTemplate != null) {
482 StagedModelDataHandlerUtil.importStagedModel(
483 portletDataContext, ddmTemplate);
484 }
485 }
486 else {
487 importedDisplayStyleGroupId = ddmTemplate.getGroupId();
488 }
489
490 portletPreferences.setValue(
491 "displayStyleGroupId",
492 String.valueOf(importedDisplayStyleGroupId));
493 }
494 else {
495 portletPreferences.setValue(
496 "displayStyleGroupId", StringPool.BLANK);
497 }
498
499 return doProcessImportPortletPreferences(
500 portletDataContext, portletId, portletPreferences);
501 }
502 catch (Exception e) {
503 throw new PortletDataException(e);
504 }
505 }
506
507 @Override
508 public void setPortletId(String portletId) {
509 _portletId = portletId;
510 }
511
512 protected Element addExportDataRootElement(
513 PortletDataContext portletDataContext) {
514
515 Document document = SAXReaderUtil.createDocument();
516
517 Class<?> clazz = getClass();
518
519 Element rootElement = document.addElement(clazz.getSimpleName());
520
521 portletDataContext.setExportDataRootElement(rootElement);
522
523 return rootElement;
524 }
525
526 protected Element addImportDataRootElement(
527 PortletDataContext portletDataContext, String data)
528 throws DocumentException {
529
530 Document document = SAXReaderUtil.read(data);
531
532 Element rootElement = document.getRootElement();
533
534 portletDataContext.setImportDataRootElement(rootElement);
535
536 long groupId = GetterUtil.getLong(
537 rootElement.attributeValue("group-id"));
538
539 if (groupId != 0) {
540 portletDataContext.setSourceGroupId(groupId);
541 }
542
543 return rootElement;
544 }
545
546 protected void addUncheckedModelAdditionCount(
547 PortletDataContext portletDataContext,
548 PortletDataHandlerControl portletDataHandlerControl) {
549
550 if (!(portletDataHandlerControl instanceof PortletDataHandlerBoolean)) {
551 return;
552 }
553
554 PortletDataHandlerBoolean portletDataHandlerBoolean =
555 (PortletDataHandlerBoolean)portletDataHandlerControl;
556
557 PortletDataHandlerControl[] childPortletDataHandlerControls =
558 portletDataHandlerBoolean.getChildren();
559
560 if (childPortletDataHandlerControls != null) {
561 for (PortletDataHandlerControl childPortletDataHandlerControl :
562 childPortletDataHandlerControls) {
563
564 addUncheckedModelAdditionCount(
565 portletDataContext, childPortletDataHandlerControl);
566 }
567 }
568
569 if (Validator.isNull(portletDataHandlerControl.getClassName())) {
570 return;
571 }
572
573 boolean checkedControl = GetterUtil.getBoolean(
574 portletDataContext.getBooleanParameter(
575 portletDataHandlerControl.getNamespace(),
576 portletDataHandlerControl.getControlName(), false));
577
578 if (!checkedControl) {
579 ManifestSummary manifestSummary =
580 portletDataContext.getManifestSummary();
581
582 String manifestSummaryKey = ManifestSummary.getManifestSummaryKey(
583 portletDataHandlerControl.getClassName(),
584 portletDataHandlerBoolean.getReferrerClassName());
585
586 manifestSummary.addModelAdditionCount(manifestSummaryKey, 0);
587 }
588 }
589
590 protected PortletPreferences doDeleteData(
591 PortletDataContext portletDataContext, String portletId,
592 PortletPreferences portletPreferences)
593 throws Exception {
594
595 return portletPreferences;
596 }
597
598 protected String doExportData(
599 PortletDataContext portletDataContext, String portletId,
600 PortletPreferences portletPreferences)
601 throws Exception {
602
603 return null;
604 }
605
606 protected PortletPreferences doImportData(
607 PortletDataContext portletDataContext, String portletId,
608 PortletPreferences portletPreferences, String data)
609 throws Exception {
610
611 return null;
612 }
613
614 protected void doPrepareManifestSummary(
615 PortletDataContext portletDataContext,
616 PortletPreferences portletPreferences)
617 throws Exception {
618 }
619
620 protected PortletPreferences doProcessExportPortletPreferences(
621 PortletDataContext portletDataContext, String portletId,
622 PortletPreferences portletPreferences, Element rootElement)
623 throws Exception {
624
625 return portletPreferences;
626 }
627
628 protected PortletPreferences doProcessImportPortletPreferences(
629 PortletDataContext portletDataContext, String portletId,
630 PortletPreferences portletPreferences)
631 throws Exception {
632
633 return portletPreferences;
634 }
635
636 protected String getDisplayTemplate(
637 PortletDataContext portletDataContext, String portletId,
638 PortletPreferences portletPreferences) {
639
640 try {
641 Portlet portlet = PortletLocalServiceUtil.getPortletById(
642 portletDataContext.getCompanyId(), portletId);
643
644 if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
645 return portletPreferences.getValue("displayStyle", null);
646 }
647 }
648 catch (Exception e) {
649 }
650
651 return null;
652 }
653
654 protected long getDisplayTemplateGroupId(
655 PortletDataContext portletDataContext, String portletId,
656 PortletPreferences portletPreferences) {
657
658 try {
659 Portlet portlet = PortletLocalServiceUtil.getPortletById(
660 portletDataContext.getCompanyId(), portletId);
661
662 if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
663 return GetterUtil.getLong(
664 portletPreferences.getValue("displayStyleGroupId", null));
665 }
666 }
667 catch (Exception e) {
668 }
669
670 return 0;
671 }
672
673 protected String getExportDataRootElementString(Element rootElement) {
674 if (rootElement == null) {
675 return StringPool.BLANK;
676 }
677
678 try {
679 Document document = rootElement.getDocument();
680
681 return document.formattedString();
682 }
683 catch (IOException ioe) {
684 return StringPool.BLANK;
685 }
686 }
687
688 protected long getExportModelCount(
689 ManifestSummary manifestSummary,
690 PortletDataHandlerControl[] portletDataHandlerControls) {
691
692 long totalModelCount = -1;
693
694 for (PortletDataHandlerControl portletDataHandlerControl :
695 portletDataHandlerControls) {
696
697 long modelCount = manifestSummary.getModelAdditionCount(
698 portletDataHandlerControl.getClassName(),
699 portletDataHandlerControl.getReferrerClassName());
700
701 if (portletDataHandlerControl
702 instanceof PortletDataHandlerBoolean) {
703
704 PortletDataHandlerBoolean portletDataHandlerBoolean =
705 (PortletDataHandlerBoolean)portletDataHandlerControl;
706
707 PortletDataHandlerControl[] childPortletDataHandlerControls =
708 portletDataHandlerBoolean.getChildren();
709
710 if (childPortletDataHandlerControls != null) {
711 long childModelCount = getExportModelCount(
712 manifestSummary, childPortletDataHandlerControls);
713
714 if (childModelCount != -1) {
715 if (modelCount == -1) {
716 modelCount = childModelCount;
717 }
718 else {
719 modelCount += childModelCount;
720 }
721 }
722 }
723 }
724
725 if (modelCount == -1) {
726 continue;
727 }
728
729 if (totalModelCount == -1) {
730 totalModelCount = modelCount;
731 }
732 else {
733 totalModelCount += modelCount;
734 }
735 }
736
737 return totalModelCount;
738 }
739
740
743 protected void setAlwaysExportable(boolean alwaysExportable) {
744 }
745
746
749 protected void setAlwaysStaged(boolean alwaysStaged) {
750 }
751
752 protected void setDataLevel(DataLevel dataLevel) {
753 _dataLevel = dataLevel;
754 }
755
756 protected void setDataLocalized(boolean dataLocalized) {
757 _dataLocalized = dataLocalized;
758 }
759
760 protected void setDataPortletPreferences(String... dataPortletPreferences) {
761 _dataPortletPreferences = dataPortletPreferences;
762 }
763
764 protected void setDeletionSystemEventStagedModelTypes(
765 StagedModelType... deletionSystemEventStagedModelTypes) {
766
767 _deletionSystemEventStagedModelTypes =
768 deletionSystemEventStagedModelTypes;
769 }
770
771 protected void setExportControls(
772 PortletDataHandlerControl... exportControls) {
773
774 _exportControls = exportControls;
775
776 setImportControls(exportControls);
777 }
778
779 protected void setExportMetadataControls(
780 PortletDataHandlerControl... exportMetadataControls) {
781
782 _exportMetadataControls = exportMetadataControls;
783
784 setImportMetadataControls(exportMetadataControls);
785 }
786
787 protected void setImportControls(
788 PortletDataHandlerControl... importControls) {
789
790 _importControls = importControls;
791 }
792
793 protected void setImportMetadataControls(
794 PortletDataHandlerControl... importMetadataControls) {
795
796 _importMetadataControls = importMetadataControls;
797 }
798
799 protected void setPublishToLiveByDefault(boolean publishToLiveByDefault) {
800 _publishToLiveByDefault = publishToLiveByDefault;
801 }
802
803 protected void setSupportsDataStrategyCopyAsNew(
804 boolean supportsDataStrategyCopyAsNew) {
805
806 _supportsDataStrategyCopyAsNew = supportsDataStrategyCopyAsNew;
807 }
808
809 private static Log _log = LogFactoryUtil.getLog(
810 BasePortletDataHandler.class);
811
812 private DataLevel _dataLevel = DataLevel.SITE;
813 private boolean _dataLocalized;
814 private String[] _dataPortletPreferences = StringPool.EMPTY_ARRAY;
815 private StagedModelType[] _deletionSystemEventStagedModelTypes =
816 new StagedModelType[0];
817 private PortletDataHandlerControl[] _exportControls =
818 new PortletDataHandlerControl[0];
819 private PortletDataHandlerControl[] _exportMetadataControls =
820 new PortletDataHandlerControl[0];
821 private PortletDataHandlerControl[] _importControls =
822 new PortletDataHandlerControl[0];
823 private PortletDataHandlerControl[] _importMetadataControls =
824 new PortletDataHandlerControl[0];
825 private String _portletId;
826 private boolean _publishToLiveByDefault;
827 private boolean _supportsDataStrategyCopyAsNew = true;
828
829 }