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