001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.exportimport.lar;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.plugin.Version;
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.PortletPreferencesLocalServiceUtil;
031    import com.liferay.portal.util.PortletKeys;
032    
033    import java.io.IOException;
034    
035    import java.util.ArrayList;
036    import java.util.List;
037    
038    import javax.portlet.PortletPreferences;
039    
040    /**
041     * @author Brian Wing Shun Chan
042     */
043    public abstract class BasePortletDataHandler implements PortletDataHandler {
044    
045            @Override
046            public PortletPreferences addDefaultData(
047                            PortletDataContext portletDataContext, String portletId,
048                            PortletPreferences portletPreferences)
049                    throws PortletDataException {
050    
051                    long startTime = 0;
052    
053                    if (_log.isInfoEnabled()) {
054                            _log.info("Adding default data to portlet " + portletId);
055    
056                            startTime = System.currentTimeMillis();
057                    }
058    
059                    try {
060                            return doAddDefaultData(
061                                    portletDataContext, portletId, portletPreferences);
062                    }
063                    catch (PortletDataException pde) {
064                            throw pde;
065                    }
066                    catch (Exception e) {
067                            throw new PortletDataException(e);
068                    }
069                    finally {
070                            if (_log.isInfoEnabled()) {
071                                    long duration = System.currentTimeMillis() - startTime;
072    
073                                    _log.info(
074                                            "Added default data to portlet in " +
075                                                    Time.getDuration(duration));
076                            }
077                    }
078            }
079    
080            @Override
081            public PortletPreferences deleteData(
082                            PortletDataContext portletDataContext, String portletId,
083                            PortletPreferences portletPreferences)
084                    throws PortletDataException {
085    
086                    long startTime = 0;
087    
088                    if (_log.isInfoEnabled()) {
089                            _log.info("Deleting portlet " + portletId);
090    
091                            startTime = System.currentTimeMillis();
092                    }
093    
094                    try {
095                            return doDeleteData(
096                                    portletDataContext, portletId, portletPreferences);
097                    }
098                    catch (PortletDataException pde) {
099                            throw pde;
100                    }
101                    catch (Exception e) {
102                            throw new PortletDataException(e);
103                    }
104                    finally {
105                            if (_log.isInfoEnabled()) {
106                                    long duration = System.currentTimeMillis() - startTime;
107    
108                                    _log.info("Deleted portlet in " + Time.getDuration(duration));
109                            }
110                    }
111            }
112    
113            @Override
114            public String exportData(
115                            PortletDataContext portletDataContext, String portletId,
116                            PortletPreferences portletPreferences)
117                    throws PortletDataException {
118    
119                    long startTime = 0;
120    
121                    if (_log.isInfoEnabled()) {
122                            _log.info("Exporting portlet " + portletId);
123    
124                            startTime = System.currentTimeMillis();
125                    }
126    
127                    try {
128                            portletDataContext.addDeletionSystemEventStagedModelTypes(
129                                    getDeletionSystemEventStagedModelTypes());
130    
131                            for (PortletDataHandlerControl portletDataHandlerControl :
132                                            getExportControls()) {
133    
134                                    addUncheckedModelAdditionCount(
135                                            portletDataContext, portletDataHandlerControl);
136                            }
137    
138                            return doExportData(
139                                    portletDataContext, portletId, portletPreferences);
140                    }
141                    catch (PortletDataException pde) {
142                            throw pde;
143                    }
144                    catch (Exception e) {
145                            throw new PortletDataException(e);
146                    }
147                    finally {
148                            if (_log.isInfoEnabled()) {
149                                    long duration = System.currentTimeMillis() - startTime;
150    
151                                    _log.info("Exported portlet in " + Time.getDuration(duration));
152                            }
153                    }
154            }
155    
156            @Override
157            public DataLevel getDataLevel() {
158                    return _dataLevel;
159            }
160    
161            @Override
162            public String[] getDataPortletPreferences() {
163                    return _dataPortletPreferences;
164            }
165    
166            @Override
167            public StagedModelType[] getDeletionSystemEventStagedModelTypes() {
168                    return _deletionSystemEventStagedModelTypes;
169            }
170    
171            @Override
172            public PortletDataHandlerControl[] getExportConfigurationControls(
173                            long companyId, long groupId, Portlet portlet,
174                            boolean privateLayout)
175                    throws Exception {
176    
177                    return getExportConfigurationControls(
178                            companyId, groupId, portlet, -1, privateLayout);
179            }
180    
181            @Override
182            public PortletDataHandlerControl[] getExportConfigurationControls(
183                            long companyId, long groupId, Portlet portlet, long plid,
184                            boolean privateLayout)
185                    throws Exception {
186    
187                    List<PortletDataHandlerBoolean> configurationControls =
188                            new ArrayList<>();
189    
190                    // Setup
191    
192                    if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
193                                    PortletKeys.PREFS_OWNER_ID_DEFAULT,
194                                    PortletKeys.PREFS_OWNER_TYPE_LAYOUT, plid, portlet, false) >
195                                            0) ||
196                            (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
197                                    groupId, PortletKeys.PREFS_OWNER_TYPE_GROUP,
198                                    portlet.getRootPortletId(), false) > 0) ||
199                            (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
200                                    companyId, PortletKeys.PREFS_OWNER_TYPE_COMPANY,
201                                    portlet.getRootPortletId(), false) > 0)) {
202    
203                            PortletDataHandlerControl[] portletDataHandlerControls = null;
204    
205                            if (isDisplayPortlet()) {
206                                    portletDataHandlerControls = getExportControls();
207                            }
208    
209                            configurationControls.add(
210                                    new PortletDataHandlerBoolean(
211                                            null, PortletDataHandlerKeys.PORTLET_SETUP, "setup", true,
212                                            false, portletDataHandlerControls, null, null));
213                    }
214    
215                    // Archived setups
216    
217                    if (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
218                                    -1, PortletKeys.PREFS_OWNER_TYPE_ARCHIVED,
219                                    portlet.getRootPortletId(), false) > 0) {
220    
221                            configurationControls.add(
222                                    new PortletDataHandlerBoolean(
223                                            null, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS,
224                                            "archived-setups", true, false, null, null, null)
225                            );
226                    }
227    
228                    // User preferences
229    
230                    if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
231                                    -1, PortletKeys.PREFS_OWNER_TYPE_USER, plid, portlet, false) >
232                                            0) ||
233                            (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
234                                    groupId, PortletKeys.PREFS_OWNER_TYPE_USER,
235                                    PortletKeys.PREFS_PLID_SHARED, portlet, false) > 0)) {
236    
237                            configurationControls.add(
238                                    new PortletDataHandlerBoolean(
239                                            null, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES,
240                                            "user-preferences", true, false, null, null, null));
241                    }
242    
243                    return configurationControls.toArray(
244                            new PortletDataHandlerBoolean[configurationControls.size()]);
245            }
246    
247            @Override
248            public PortletDataHandlerControl[] getExportControls() {
249                    return _exportControls;
250            }
251    
252            @Override
253            public PortletDataHandlerControl[] getExportMetadataControls() {
254                    return _exportMetadataControls;
255            }
256    
257            @Override
258            public long getExportModelCount(ManifestSummary manifestSummary) {
259                    return getExportModelCount(manifestSummary, getExportControls());
260            }
261    
262            @Override
263            public PortletDataHandlerControl[] getImportConfigurationControls(
264                    Portlet portlet, ManifestSummary manifestSummary) {
265    
266                    String[] configurationPortletOptions =
267                            manifestSummary.getConfigurationPortletOptions(
268                                    portlet.getRootPortletId());
269    
270                    return getImportConfigurationControls(configurationPortletOptions);
271            }
272    
273            @Override
274            public PortletDataHandlerControl[] getImportConfigurationControls(
275                    String[] configurationPortletOptions) {
276    
277                    List<PortletDataHandlerBoolean> configurationControls =
278                            new ArrayList<>();
279    
280                    // Setup
281    
282                    if (ArrayUtil.contains(configurationPortletOptions, "setup")) {
283                            PortletDataHandlerControl[] portletDataHandlerControls = null;
284    
285                            if (isDisplayPortlet()) {
286                                    portletDataHandlerControls = getExportControls();
287                            }
288    
289                            configurationControls.add(
290                                    new PortletDataHandlerBoolean(
291                                            null, PortletDataHandlerKeys.PORTLET_SETUP, "setup", true,
292                                            false, portletDataHandlerControls, null, null));
293                    }
294    
295                    // Archived setups
296    
297                    if (ArrayUtil.contains(
298                                    configurationPortletOptions, "archived-setups")) {
299    
300                            configurationControls.add(
301                                    new PortletDataHandlerBoolean(
302                                            null, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS,
303                                            "archived-setups", true, false, null, null, null));
304                    }
305    
306                    // User preferences
307    
308                    if (ArrayUtil.contains(
309                                    configurationPortletOptions, "user-preferences")) {
310    
311                            configurationControls.add(
312                                    new PortletDataHandlerBoolean(
313                                            null, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES,
314                                            "user-preferences", true, false, null, null, null));
315                    }
316    
317                    return configurationControls.toArray(
318                            new PortletDataHandlerBoolean[configurationControls.size()]);
319            }
320    
321            @Override
322            public PortletDataHandlerControl[] getImportControls() {
323                    return _importControls;
324            }
325    
326            @Override
327            public PortletDataHandlerControl[] getImportMetadataControls() {
328                    return _importMetadataControls;
329            }
330    
331            @Override
332            public String getPortletId() {
333                    return _portletId;
334            }
335    
336            @Override
337            public int getRank() {
338                    return _rank;
339            }
340    
341            @Override
342            public String getSchemaVersion() {
343                    return "1.0.0";
344            }
345    
346            @Override
347            public String getServiceName() {
348                    return null;
349            }
350    
351            @Override
352            public PortletPreferences importData(
353                            PortletDataContext portletDataContext, String portletId,
354                            PortletPreferences portletPreferences, String data)
355                    throws PortletDataException {
356    
357                    long startTime = 0;
358    
359                    if (_log.isInfoEnabled()) {
360                            _log.info("Importing portlet " + portletId);
361    
362                            startTime = System.currentTimeMillis();
363                    }
364    
365                    long sourceGroupId = portletDataContext.getSourceGroupId();
366    
367                    try {
368                            if (Validator.isXml(data)) {
369                                    addImportDataRootElement(portletDataContext, data);
370                            }
371    
372                            return doImportData(
373                                    portletDataContext, portletId, portletPreferences, data);
374                    }
375                    catch (PortletDataException pde) {
376                            throw pde;
377                    }
378                    catch (Exception e) {
379                            throw new PortletDataException(e);
380                    }
381                    finally {
382                            portletDataContext.setSourceGroupId(sourceGroupId);
383    
384                            if (_log.isInfoEnabled()) {
385                                    long duration = System.currentTimeMillis() - startTime;
386    
387                                    _log.info("Imported portlet in " + Time.getDuration(duration));
388                            }
389                    }
390            }
391    
392            @Override
393            public boolean isDataAlwaysStaged() {
394                    return _dataAlwaysStaged;
395            }
396    
397            @Override
398            public boolean isDataLocalized() {
399                    return _dataLocalized;
400            }
401    
402            @Override
403            public boolean isDataPortalLevel() {
404                    return _dataLevel.equals(DataLevel.PORTAL);
405            }
406    
407            @Override
408            public boolean isDataPortletInstanceLevel() {
409                    return _dataLevel.equals(DataLevel.PORTLET_INSTANCE);
410            }
411    
412            @Override
413            public boolean isDataSiteLevel() {
414                    return _dataLevel.equals(DataLevel.SITE);
415            }
416    
417            @Override
418            public boolean isDisplayPortlet() {
419                    if (isDataPortletInstanceLevel() &&
420                            !ArrayUtil.isEmpty(getDataPortletPreferences())) {
421    
422                            return true;
423                    }
424    
425                    return false;
426            }
427    
428            @Override
429            public boolean isPublishToLiveByDefault() {
430                    return _publishToLiveByDefault;
431            }
432    
433            @Override
434            public boolean isRollbackOnException() {
435    
436                    // For now, we are going to throw an exception if one portlet data
437                    // handler has an exception to ensure that the transaction is rolled
438                    // back for data integrity. We may decide that this is not the best
439                    // behavior in the future because a bad plugin could prevent deletion of
440                    // groups.
441    
442                    return true;
443            }
444    
445            @Override
446            public boolean isSupportsDataStrategyCopyAsNew() {
447                    return _supportsDataStrategyCopyAsNew;
448            }
449    
450            @Override
451            public void prepareManifestSummary(PortletDataContext portletDataContext)
452                    throws PortletDataException {
453    
454                    prepareManifestSummary(portletDataContext, null);
455            }
456    
457            @Override
458            public void prepareManifestSummary(
459                            PortletDataContext portletDataContext,
460                            PortletPreferences portletPreferences)
461                    throws PortletDataException {
462    
463                    try {
464                            doPrepareManifestSummary(portletDataContext, portletPreferences);
465                    }
466                    catch (PortletDataException pde) {
467                            throw pde;
468                    }
469                    catch (Exception e) {
470                            throw new PortletDataException(e);
471                    }
472            }
473    
474            @Override
475            public PortletPreferences processExportPortletPreferences(
476                            PortletDataContext portletDataContext, String portletId,
477                            PortletPreferences portletPreferences)
478                    throws PortletDataException {
479    
480                    try {
481                            return doProcessExportPortletPreferences(
482                                    portletDataContext, portletId, portletPreferences);
483                    }
484                    catch (PortletDataException pde) {
485                            throw pde;
486                    }
487                    catch (Exception e) {
488                            throw new PortletDataException(e);
489                    }
490            }
491    
492            @Override
493            public PortletPreferences processImportPortletPreferences(
494                            PortletDataContext portletDataContext, String portletId,
495                            PortletPreferences portletPreferences)
496                    throws PortletDataException {
497    
498                    try {
499                            return doProcessImportPortletPreferences(
500                                    portletDataContext, portletId, portletPreferences);
501                    }
502                    catch (PortletDataException pde) {
503                            throw pde;
504                    }
505                    catch (Exception e) {
506                            throw new PortletDataException(e);
507                    }
508            }
509    
510            @Override
511            public void setPortletId(String portletId) {
512                    _portletId = portletId;
513            }
514    
515            @Override
516            public void setRank(int rank) {
517                    _rank = rank;
518            }
519    
520            @Override
521            public boolean validateSchemaVersion(String schemaVersion) {
522                    try {
523                            return doValidateSchemaVersion(schemaVersion);
524                    }
525                    catch (Exception e) {
526                            return false;
527                    }
528            }
529    
530            protected Element addExportDataRootElement(
531                    PortletDataContext portletDataContext) {
532    
533                    Document document = SAXReaderUtil.createDocument();
534    
535                    Class<?> clazz = getClass();
536    
537                    Element rootElement = document.addElement(clazz.getSimpleName());
538    
539                    portletDataContext.setExportDataRootElement(rootElement);
540    
541                    return rootElement;
542            }
543    
544            protected Element addImportDataRootElement(
545                            PortletDataContext portletDataContext, String data)
546                    throws DocumentException {
547    
548                    Document document = SAXReaderUtil.read(data);
549    
550                    Element rootElement = document.getRootElement();
551    
552                    portletDataContext.setImportDataRootElement(rootElement);
553    
554                    long groupId = GetterUtil.getLong(
555                            rootElement.attributeValue("group-id"));
556    
557                    if (groupId != 0) {
558                            portletDataContext.setSourceGroupId(groupId);
559                    }
560    
561                    return rootElement;
562            }
563    
564            protected void addUncheckedModelAdditionCount(
565                    PortletDataContext portletDataContext,
566                    PortletDataHandlerControl portletDataHandlerControl) {
567    
568                    if (!(portletDataHandlerControl instanceof PortletDataHandlerBoolean)) {
569                            return;
570                    }
571    
572                    PortletDataHandlerBoolean portletDataHandlerBoolean =
573                            (PortletDataHandlerBoolean)portletDataHandlerControl;
574    
575                    PortletDataHandlerControl[] childPortletDataHandlerControls =
576                            portletDataHandlerBoolean.getChildren();
577    
578                    if (childPortletDataHandlerControls != null) {
579                            for (PortletDataHandlerControl childPortletDataHandlerControl :
580                                            childPortletDataHandlerControls) {
581    
582                                    addUncheckedModelAdditionCount(
583                                            portletDataContext, childPortletDataHandlerControl);
584                            }
585                    }
586    
587                    if (Validator.isNull(portletDataHandlerControl.getClassName())) {
588                            return;
589                    }
590    
591                    boolean checkedControl = GetterUtil.getBoolean(
592                            portletDataContext.getBooleanParameter(
593                                    portletDataHandlerControl.getNamespace(),
594                                    portletDataHandlerControl.getControlName(), false));
595    
596                    if (!checkedControl) {
597                            ManifestSummary manifestSummary =
598                                    portletDataContext.getManifestSummary();
599    
600                            StagedModelType stagedModelType = new StagedModelType(
601                                    portletDataHandlerControl.getClassName(),
602                                    portletDataHandlerBoolean.getReferrerClassName());
603    
604                            String manifestSummaryKey = ManifestSummary.getManifestSummaryKey(
605                                    stagedModelType);
606    
607                            manifestSummary.addModelAdditionCount(manifestSummaryKey, 0);
608                    }
609            }
610    
611            protected PortletPreferences doAddDefaultData(
612                            PortletDataContext portletDataContext, String portletId,
613                            PortletPreferences portletPreferences)
614                    throws Exception {
615    
616                    return portletPreferences;
617            }
618    
619            protected PortletPreferences doDeleteData(
620                            PortletDataContext portletDataContext, String portletId,
621                            PortletPreferences portletPreferences)
622                    throws Exception {
623    
624                    return portletPreferences;
625            }
626    
627            protected String doExportData(
628                            PortletDataContext portletDataContext, String portletId,
629                            PortletPreferences portletPreferences)
630                    throws Exception {
631    
632                    return null;
633            }
634    
635            protected PortletPreferences doImportData(
636                            PortletDataContext portletDataContext, String portletId,
637                            PortletPreferences portletPreferences, String data)
638                    throws Exception {
639    
640                    return null;
641            }
642    
643            protected void doPrepareManifestSummary(
644                            PortletDataContext portletDataContext,
645                            PortletPreferences portletPreferences)
646                    throws Exception {
647            }
648    
649            protected PortletPreferences doProcessExportPortletPreferences(
650                            PortletDataContext portletDataContext, String portletId,
651                            PortletPreferences portletPreferences)
652                    throws Exception {
653    
654                    return portletPreferences;
655            }
656    
657            protected PortletPreferences doProcessImportPortletPreferences(
658                            PortletDataContext portletDataContext, String portletId,
659                            PortletPreferences portletPreferences)
660                    throws Exception {
661    
662                    return portletPreferences;
663            }
664    
665            protected boolean doValidateSchemaVersion(String schemaVersion)
666                    throws Exception {
667    
668                    // Major version has to be identical
669    
670                    Version currentVersion = Version.getInstance(getSchemaVersion());
671                    Version importedVersion = Version.getInstance(schemaVersion);
672    
673                    if (!Validator.equals(
674                                    currentVersion.getMajor(), importedVersion.getMajor())) {
675    
676                            return false;
677                    }
678    
679                    // Imported minor version should be less than or equal to the current
680                    // minor version
681    
682                    int currentMinorVersion = GetterUtil.getInteger(
683                            currentVersion.getMinor(), -1);
684                    int importedMinorVersion = GetterUtil.getInteger(
685                            importedVersion.getMinor(), -1);
686    
687                    if (((currentMinorVersion == -1) && (importedMinorVersion == -1)) ||
688                            (currentMinorVersion < importedMinorVersion)) {
689    
690                            return false;
691                    }
692    
693                    // Import should be compatible with all minor versions if previous
694                    // validations pass
695    
696                    return true;
697            }
698    
699            protected String getExportDataRootElementString(Element rootElement) {
700                    if (rootElement == null) {
701                            return StringPool.BLANK;
702                    }
703    
704                    try {
705                            Document document = rootElement.getDocument();
706    
707                            return document.formattedString();
708                    }
709                    catch (IOException ioe) {
710                            return StringPool.BLANK;
711                    }
712            }
713    
714            protected long getExportModelCount(
715                    ManifestSummary manifestSummary,
716                    PortletDataHandlerControl[] portletDataHandlerControls) {
717    
718                    long totalModelCount = -1;
719    
720                    for (PortletDataHandlerControl portletDataHandlerControl :
721                                    portletDataHandlerControls) {
722    
723                            StagedModelType stagedModelType = new StagedModelType(
724                                    portletDataHandlerControl.getClassName(),
725                                    portletDataHandlerControl.getReferrerClassName());
726    
727                            long modelAdditionCount = manifestSummary.getModelAdditionCount(
728                                    stagedModelType);
729    
730                            if (portletDataHandlerControl
731                                            instanceof PortletDataHandlerBoolean) {
732    
733                                    PortletDataHandlerBoolean portletDataHandlerBoolean =
734                                            (PortletDataHandlerBoolean)portletDataHandlerControl;
735    
736                                    PortletDataHandlerControl[] childPortletDataHandlerControls =
737                                            portletDataHandlerBoolean.getChildren();
738    
739                                    if (childPortletDataHandlerControls != null) {
740                                            long childModelCount = getExportModelCount(
741                                                    manifestSummary, childPortletDataHandlerControls);
742    
743                                            if (childModelCount != -1) {
744                                                    if (modelAdditionCount == -1) {
745                                                            modelAdditionCount = childModelCount;
746                                                    }
747                                                    else {
748                                                            modelAdditionCount += childModelCount;
749                                                    }
750                                            }
751                                    }
752                            }
753    
754                            if (modelAdditionCount == -1) {
755                                    continue;
756                            }
757    
758                            if (totalModelCount == -1) {
759                                    totalModelCount = modelAdditionCount;
760                            }
761                            else {
762                                    totalModelCount += modelAdditionCount;
763                            }
764                    }
765    
766                    return totalModelCount;
767            }
768    
769            /**
770             * @deprecated As of 6.2.0
771             */
772            @Deprecated
773            protected void setAlwaysExportable(boolean alwaysExportable) {
774            }
775    
776            /**
777             * @deprecated As of 6.2.0
778             */
779            @Deprecated
780            protected void setAlwaysStaged(boolean alwaysStaged) {
781            }
782    
783            protected void setDataAlwaysStaged(boolean dataAlwaysStaged) {
784                    _dataAlwaysStaged = dataAlwaysStaged;
785            }
786    
787            protected void setDataLevel(DataLevel dataLevel) {
788                    _dataLevel = dataLevel;
789            }
790    
791            protected void setDataLocalized(boolean dataLocalized) {
792                    _dataLocalized = dataLocalized;
793            }
794    
795            protected void setDataPortletPreferences(String... dataPortletPreferences) {
796                    _dataPortletPreferences = dataPortletPreferences;
797            }
798    
799            protected void setDeletionSystemEventStagedModelTypes(
800                    StagedModelType... deletionSystemEventStagedModelTypes) {
801    
802                    _deletionSystemEventStagedModelTypes =
803                            deletionSystemEventStagedModelTypes;
804            }
805    
806            protected void setExportControls(
807                    PortletDataHandlerControl... exportControls) {
808    
809                    _exportControls = exportControls;
810    
811                    setImportControls(exportControls);
812            }
813    
814            protected void setExportMetadataControls(
815                    PortletDataHandlerControl... exportMetadataControls) {
816    
817                    _exportMetadataControls = exportMetadataControls;
818    
819                    setImportMetadataControls(exportMetadataControls);
820            }
821    
822            protected void setImportControls(
823                    PortletDataHandlerControl... importControls) {
824    
825                    _importControls = importControls;
826            }
827    
828            protected void setImportMetadataControls(
829                    PortletDataHandlerControl... importMetadataControls) {
830    
831                    _importMetadataControls = importMetadataControls;
832            }
833    
834            protected void setPublishToLiveByDefault(boolean publishToLiveByDefault) {
835                    _publishToLiveByDefault = publishToLiveByDefault;
836            }
837    
838            protected void setSupportsDataStrategyCopyAsNew(
839                    boolean supportsDataStrategyCopyAsNew) {
840    
841                    _supportsDataStrategyCopyAsNew = supportsDataStrategyCopyAsNew;
842            }
843    
844            private static final Log _log = LogFactoryUtil.getLog(
845                    BasePortletDataHandler.class);
846    
847            private boolean _dataAlwaysStaged;
848            private DataLevel _dataLevel = DataLevel.SITE;
849            private boolean _dataLocalized;
850            private String[] _dataPortletPreferences = StringPool.EMPTY_ARRAY;
851            private StagedModelType[] _deletionSystemEventStagedModelTypes =
852                    new StagedModelType[0];
853            private PortletDataHandlerControl[] _exportControls =
854                    new PortletDataHandlerControl[0];
855            private PortletDataHandlerControl[] _exportMetadataControls =
856                    new PortletDataHandlerControl[0];
857            private PortletDataHandlerControl[] _importControls =
858                    new PortletDataHandlerControl[0];
859            private PortletDataHandlerControl[] _importMetadataControls =
860                    new PortletDataHandlerControl[0];
861            private String _portletId;
862            private boolean _publishToLiveByDefault;
863            private int _rank = 100;
864            private boolean _supportsDataStrategyCopyAsNew = true;
865    
866    }