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.exportimport.kernel.lar;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.model.Portlet;
020    import com.liferay.portal.kernel.plugin.Version;
021    import com.liferay.portal.kernel.service.PortletPreferencesLocalServiceUtil;
022    import com.liferay.portal.kernel.util.ArrayUtil;
023    import com.liferay.portal.kernel.util.GetterUtil;
024    import com.liferay.portal.kernel.util.PortletKeys;
025    import com.liferay.portal.kernel.util.StringPool;
026    import com.liferay.portal.kernel.util.Time;
027    import com.liferay.portal.kernel.util.Validator;
028    import com.liferay.portal.kernel.xml.Document;
029    import com.liferay.portal.kernel.xml.DocumentException;
030    import com.liferay.portal.kernel.xml.Element;
031    import com.liferay.portal.kernel.xml.SAXReaderUtil;
032    
033    import java.io.IOException;
034    
035    import java.util.ArrayList;
036    import java.util.List;
037    import java.util.Objects;
038    
039    import javax.portlet.PortletPreferences;
040    
041    /**
042     * @author Brian Wing Shun Chan
043     */
044    public abstract class BasePortletDataHandler implements PortletDataHandler {
045    
046            @Override
047            public PortletPreferences addDefaultData(
048                            PortletDataContext portletDataContext, String portletId,
049                            PortletPreferences portletPreferences)
050                    throws PortletDataException {
051    
052                    long startTime = 0;
053    
054                    if (_log.isInfoEnabled()) {
055                            _log.info("Adding default data to portlet " + portletId);
056    
057                            startTime = System.currentTimeMillis();
058                    }
059    
060                    try {
061                            return doAddDefaultData(
062                                    portletDataContext, portletId, portletPreferences);
063                    }
064                    catch (PortletDataException pde) {
065                            throw pde;
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(
075                                            "Added default data to portlet in " +
076                                                    Time.getDuration(duration));
077                            }
078                    }
079            }
080    
081            @Override
082            public PortletPreferences deleteData(
083                            PortletDataContext portletDataContext, String portletId,
084                            PortletPreferences portletPreferences)
085                    throws PortletDataException {
086    
087                    long startTime = 0;
088    
089                    if (_log.isInfoEnabled()) {
090                            _log.info("Deleting portlet " + portletId);
091    
092                            startTime = System.currentTimeMillis();
093                    }
094    
095                    try {
096                            return doDeleteData(
097                                    portletDataContext, portletId, portletPreferences);
098                    }
099                    catch (PortletDataException pde) {
100                            throw pde;
101                    }
102                    catch (Exception e) {
103                            throw new PortletDataException(e);
104                    }
105                    finally {
106                            if (_log.isInfoEnabled()) {
107                                    long duration = System.currentTimeMillis() - startTime;
108    
109                                    _log.info("Deleted portlet in " + Time.getDuration(duration));
110                            }
111                    }
112            }
113    
114            @Override
115            public String exportData(
116                            PortletDataContext portletDataContext, String portletId,
117                            PortletPreferences portletPreferences)
118                    throws PortletDataException {
119    
120                    long startTime = 0;
121    
122                    if (_log.isInfoEnabled()) {
123                            _log.info("Exporting portlet " + portletId);
124    
125                            startTime = System.currentTimeMillis();
126                    }
127    
128                    try {
129                            portletDataContext.addDeletionSystemEventStagedModelTypes(
130                                    getDeletionSystemEventStagedModelTypes());
131    
132                            for (PortletDataHandlerControl portletDataHandlerControl :
133                                            getExportControls()) {
134    
135                                    addUncheckedModelAdditionCount(
136                                            portletDataContext, portletDataHandlerControl);
137                            }
138    
139                            return doExportData(
140                                    portletDataContext, portletId, portletPreferences);
141                    }
142                    catch (PortletDataException pde) {
143                            throw pde;
144                    }
145                    catch (Exception e) {
146                            throw new PortletDataException(e);
147                    }
148                    finally {
149                            if (_log.isInfoEnabled()) {
150                                    long duration = System.currentTimeMillis() - startTime;
151    
152                                    _log.info("Exported portlet in " + Time.getDuration(duration));
153                            }
154                    }
155            }
156    
157            @Override
158            public DataLevel getDataLevel() {
159                    return _dataLevel;
160            }
161    
162            @Override
163            public String[] getDataPortletPreferences() {
164                    return _dataPortletPreferences;
165            }
166    
167            @Override
168            public StagedModelType[] getDeletionSystemEventStagedModelTypes() {
169                    return _deletionSystemEventStagedModelTypes;
170            }
171    
172            @Override
173            public PortletDataHandlerControl[] getExportConfigurationControls(
174                            long companyId, long groupId, Portlet portlet,
175                            boolean privateLayout)
176                    throws Exception {
177    
178                    return getExportConfigurationControls(
179                            companyId, groupId, portlet, -1, privateLayout);
180            }
181    
182            @Override
183            public PortletDataHandlerControl[] getExportConfigurationControls(
184                            long companyId, long groupId, Portlet portlet, long plid,
185                            boolean privateLayout)
186                    throws Exception {
187    
188                    List<PortletDataHandlerBoolean> configurationControls =
189                            new ArrayList<>();
190    
191                    // Setup
192    
193                    if ((PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
194                                    PortletKeys.PREFS_OWNER_ID_DEFAULT,
195                                    PortletKeys.PREFS_OWNER_TYPE_LAYOUT, plid, portlet, false) >
196                                            0) ||
197                            (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
198                                    groupId, PortletKeys.PREFS_OWNER_TYPE_GROUP,
199                                    portlet.getRootPortletId(), false) > 0) ||
200                            (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
201                                    companyId, PortletKeys.PREFS_OWNER_TYPE_COMPANY,
202                                    portlet.getRootPortletId(), false) > 0)) {
203    
204                            PortletDataHandlerControl[] portletDataHandlerControls = null;
205    
206                            if (isDisplayPortlet()) {
207                                    portletDataHandlerControls = getExportControls();
208                            }
209    
210                            configurationControls.add(
211                                    new PortletDataHandlerBoolean(
212                                            null, PortletDataHandlerKeys.PORTLET_SETUP, "setup", true,
213                                            false, portletDataHandlerControls, null, null));
214                    }
215    
216                    // Archived setups
217    
218                    if (PortletPreferencesLocalServiceUtil.getPortletPreferencesCount(
219                                    -1, PortletKeys.PREFS_OWNER_TYPE_ARCHIVED,
220                                    portlet.getRootPortletId(), false) > 0) {
221    
222                            configurationControls.add(
223                                    new PortletDataHandlerBoolean(
224                                            null, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS,
225                                            "configuration-templates", true, false, null, null, null));
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                                            "configuration-templates", 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 (!Objects.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            protected void setDataAlwaysStaged(boolean dataAlwaysStaged) {
770                    _dataAlwaysStaged = dataAlwaysStaged;
771            }
772    
773            protected void setDataLevel(DataLevel dataLevel) {
774                    _dataLevel = dataLevel;
775            }
776    
777            protected void setDataLocalized(boolean dataLocalized) {
778                    _dataLocalized = dataLocalized;
779            }
780    
781            protected void setDataPortletPreferences(String... dataPortletPreferences) {
782                    _dataPortletPreferences = dataPortletPreferences;
783            }
784    
785            protected void setDeletionSystemEventStagedModelTypes(
786                    StagedModelType... deletionSystemEventStagedModelTypes) {
787    
788                    _deletionSystemEventStagedModelTypes =
789                            deletionSystemEventStagedModelTypes;
790            }
791    
792            protected void setExportControls(
793                    PortletDataHandlerControl... exportControls) {
794    
795                    _exportControls = exportControls;
796    
797                    setImportControls(exportControls);
798            }
799    
800            protected void setExportMetadataControls(
801                    PortletDataHandlerControl... exportMetadataControls) {
802    
803                    _exportMetadataControls = exportMetadataControls;
804    
805                    setImportMetadataControls(exportMetadataControls);
806            }
807    
808            protected void setImportControls(
809                    PortletDataHandlerControl... importControls) {
810    
811                    _importControls = importControls;
812            }
813    
814            protected void setImportMetadataControls(
815                    PortletDataHandlerControl... importMetadataControls) {
816    
817                    _importMetadataControls = importMetadataControls;
818            }
819    
820            protected void setPublishToLiveByDefault(boolean publishToLiveByDefault) {
821                    _publishToLiveByDefault = publishToLiveByDefault;
822            }
823    
824            protected void setSupportsDataStrategyCopyAsNew(
825                    boolean supportsDataStrategyCopyAsNew) {
826    
827                    _supportsDataStrategyCopyAsNew = supportsDataStrategyCopyAsNew;
828            }
829    
830            private static final Log _log = LogFactoryUtil.getLog(
831                    BasePortletDataHandler.class);
832    
833            private boolean _dataAlwaysStaged;
834            private DataLevel _dataLevel = DataLevel.SITE;
835            private boolean _dataLocalized;
836            private String[] _dataPortletPreferences = StringPool.EMPTY_ARRAY;
837            private StagedModelType[] _deletionSystemEventStagedModelTypes =
838                    new StagedModelType[0];
839            private PortletDataHandlerControl[] _exportControls =
840                    new PortletDataHandlerControl[0];
841            private PortletDataHandlerControl[] _exportMetadataControls =
842                    new PortletDataHandlerControl[0];
843            private PortletDataHandlerControl[] _importControls =
844                    new PortletDataHandlerControl[0];
845            private PortletDataHandlerControl[] _importMetadataControls =
846                    new PortletDataHandlerControl[0];
847            private String _portletId;
848            private boolean _publishToLiveByDefault;
849            private int _rank = 100;
850            private boolean _supportsDataStrategyCopyAsNew = true;
851    
852    }