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                            portletDataContext.addDeletionSystemEventStagedModelTypes(
328                                    getDeletionSystemEventStagedModelTypes());
329    
330                            return doImportData(
331                                    portletDataContext, portletId, portletPreferences, data);
332                    }
333                    catch (PortletDataException pde) {
334                            throw pde;
335                    }
336                    catch (Exception e) {
337                            throw new PortletDataException(e);
338                    }
339                    finally {
340                            portletDataContext.setSourceGroupId(sourceGroupId);
341    
342                            if (_log.isInfoEnabled()) {
343                                    long duration = System.currentTimeMillis() - startTime;
344    
345                                    _log.info("Imported portlet in " + Time.getDuration(duration));
346                            }
347                    }
348            }
349    
350            @Override
351            public boolean isDataLocalized() {
352                    return _dataLocalized;
353            }
354    
355            @Override
356            public boolean isDataPortalLevel() {
357                    return _dataLevel.equals(DataLevel.PORTAL);
358            }
359    
360            @Override
361            public boolean isDataPortletInstanceLevel() {
362                    return _dataLevel.equals(DataLevel.PORTLET_INSTANCE);
363            }
364    
365            @Override
366            public boolean isDataSiteLevel() {
367                    return _dataLevel.equals(DataLevel.SITE);
368            }
369    
370            @Override
371            public boolean isDisplayPortlet() {
372                    if (isDataPortletInstanceLevel() &&
373                            !ArrayUtil.isEmpty(getDataPortletPreferences())) {
374    
375                            return true;
376                    }
377    
378                    return false;
379            }
380    
381            @Override
382            public boolean isPublishToLiveByDefault() {
383                    return _publishToLiveByDefault;
384            }
385    
386            @Override
387            public boolean isSupportsDataStrategyCopyAsNew() {
388                    return _supportsDataStrategyCopyAsNew;
389            }
390    
391            @Override
392            public void prepareManifestSummary(PortletDataContext portletDataContext)
393                    throws PortletDataException {
394    
395                    prepareManifestSummary(portletDataContext, null);
396            }
397    
398            @Override
399            public void prepareManifestSummary(
400                            PortletDataContext portletDataContext,
401                            PortletPreferences portletPreferences)
402                    throws PortletDataException {
403    
404                    try {
405                            doPrepareManifestSummary(portletDataContext, portletPreferences);
406                    }
407                    catch (PortletDataException pde) {
408                            throw pde;
409                    }
410                    catch (Exception e) {
411                            throw new PortletDataException(e);
412                    }
413            }
414    
415            @Override
416            public PortletPreferences processExportPortletPreferences(
417                            PortletDataContext portletDataContext, String portletId,
418                            PortletPreferences portletPreferences)
419                    throws PortletDataException {
420    
421                    String displayStyle = getDisplayTemplate(
422                            portletDataContext, portletId, portletPreferences);
423    
424                    if (Validator.isNotNull(displayStyle) &&
425                            displayStyle.startsWith(
426                                    PortletDisplayTemplate.DISPLAY_STYLE_PREFIX)) {
427    
428                            long displayStyleGroupId = getDisplayTemplateGroupId(
429                                    portletDataContext, portletId, portletPreferences);
430    
431                            long previousScopeGroupId = portletDataContext.getScopeGroupId();
432    
433                            if (displayStyleGroupId != portletDataContext.getScopeGroupId()) {
434                                    portletDataContext.setScopeGroupId(displayStyleGroupId);
435                            }
436    
437                            DDMTemplate ddmTemplate =
438                                    PortletDisplayTemplateUtil.fetchDDMTemplate(
439                                            portletDataContext.getGroupId(), displayStyle);
440    
441                            if (ddmTemplate != null) {
442                                    StagedModelDataHandlerUtil.exportReferenceStagedModel(
443                                            portletDataContext, portletId, ddmTemplate);
444                            }
445    
446                            portletDataContext.setScopeGroupId(previousScopeGroupId);
447                    }
448    
449                    try {
450                            return doProcessExportPortletPreferences(
451                                    portletDataContext, portletId, portletPreferences);
452                    }
453                    catch (PortletDataException pde) {
454                            throw pde;
455                    }
456                    catch (Exception e) {
457                            throw new PortletDataException(e);
458                    }
459            }
460    
461            @Override
462            public PortletPreferences processImportPortletPreferences(
463                            PortletDataContext portletDataContext, String portletId,
464                            PortletPreferences portletPreferences)
465                    throws PortletDataException {
466    
467                    try {
468                            String displayStyle = getDisplayTemplate(
469                                    portletDataContext, portletId, portletPreferences);
470    
471                            if (Validator.isNotNull(displayStyle) &&
472                                    displayStyle.startsWith(
473                                            PortletDisplayTemplate.DISPLAY_STYLE_PREFIX)) {
474    
475                                    DDMTemplate ddmTemplate = null;
476    
477                                    long displayStyleGroupId = getDisplayTemplateGroupId(
478                                            portletDataContext, portletId, portletPreferences);
479    
480                                    if (displayStyleGroupId ==
481                                                    portletDataContext.getSourceCompanyGroupId()) {
482    
483                                            Element importDataRootElement =
484                                                    portletDataContext.getImportDataRootElement();
485    
486                                            Element referencesElement = importDataRootElement.element(
487                                                    "references");
488    
489                                            List<Element> referenceElements =
490                                                    referencesElement.elements();
491    
492                                            String ddmTemplateUuid =
493                                                    PortletDisplayTemplateUtil.getDDMTemplateUuid(
494                                                            displayStyle);
495    
496                                            boolean preloaded = false;
497                                            long referenceClassNameId = 0;
498                                            String templateKey = null;
499    
500                                            for (Element referenceElement : referenceElements) {
501                                                    String className = referenceElement.attributeValue(
502                                                            "class-name");
503                                                    String uuid = referenceElement.attributeValue("uuid");
504    
505                                                    if (!className.equals(DDMTemplate.class.getName()) ||
506                                                            !uuid.equals(ddmTemplateUuid)) {
507    
508                                                            continue;
509                                                    }
510    
511                                                    preloaded = GetterUtil.getBoolean(
512                                                            referenceElement.attributeValue("preloaded"));
513                                                    referenceClassNameId = PortalUtil.getClassNameId(
514                                                            referenceElement.attributeValue(
515                                                                    "referenced-class-name"));
516                                                    templateKey = referenceElement.attributeValue(
517                                                            "template-key");
518    
519                                                    break;
520                                            }
521    
522                                            if (!preloaded) {
523                                                    ddmTemplate =
524                                                            PortletDisplayTemplateUtil.fetchDDMTemplate(
525                                                                    portletDataContext.getCompanyGroupId(),
526                                                                    displayStyle);
527                                            }
528                                            else {
529                                                    ddmTemplate = DDMTemplateLocalServiceUtil.fetchTemplate(
530                                                            portletDataContext.getCompanyGroupId(),
531                                                            referenceClassNameId, templateKey);
532                                            }
533                                    }
534                                    else if (displayStyleGroupId ==
535                                                            portletDataContext.getSourceGroupId()) {
536    
537                                            ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
538                                                    portletDataContext.getScopeGroupId(), displayStyle);
539                                    }
540                                    else {
541                                            ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
542                                                    displayStyleGroupId, displayStyle);
543                                    }
544    
545                                    long importedDisplayStyleGroupId =
546                                            portletDataContext.getScopeGroupId();
547    
548                                    if (ddmTemplate == null) {
549                                            String ddmTemplateUuid =
550                                                    PortletDisplayTemplateUtil.getDDMTemplateUuid(
551                                                            displayStyle);
552    
553                                            Element ddmTemplateElement =
554                                                    portletDataContext.getImportDataElement(
555                                                            DDMTemplate.class.getSimpleName(), "uuid",
556                                                            ddmTemplateUuid);
557    
558                                            String ddmTemplatePath = ddmTemplateElement.attributeValue(
559                                                    "path");
560    
561                                            ddmTemplate =
562                                                    (DDMTemplate)portletDataContext.getZipEntryAsObject(
563                                                            ddmTemplatePath);
564    
565                                            if (ddmTemplate != null) {
566                                                    StagedModelDataHandlerUtil.importStagedModel(
567                                                            portletDataContext, ddmTemplate);
568                                            }
569                                    }
570                                    else {
571                                            importedDisplayStyleGroupId = ddmTemplate.getGroupId();
572                                    }
573    
574                                    portletPreferences.setValue(
575                                            "displayStyleGroupId",
576                                            String.valueOf(importedDisplayStyleGroupId));
577                            }
578                            else {
579                                    portletPreferences.setValue(
580                                            "displayStyleGroupId", StringPool.BLANK);
581                            }
582    
583                            return doProcessImportPortletPreferences(
584                                    portletDataContext, portletId, portletPreferences);
585                    }
586                    catch (PortletDataException pde) {
587                            throw pde;
588                    }
589                    catch (Exception e) {
590                            throw new PortletDataException(e);
591                    }
592            }
593    
594            @Override
595            public void setPortletId(String portletId) {
596                    _portletId = portletId;
597            }
598    
599            protected Element addExportDataRootElement(
600                    PortletDataContext portletDataContext) {
601    
602                    Document document = SAXReaderUtil.createDocument();
603    
604                    Class<?> clazz = getClass();
605    
606                    Element rootElement = document.addElement(clazz.getSimpleName());
607    
608                    portletDataContext.setExportDataRootElement(rootElement);
609    
610                    return rootElement;
611            }
612    
613            protected Element addImportDataRootElement(
614                            PortletDataContext portletDataContext, String data)
615                    throws DocumentException {
616    
617                    Document document = SAXReaderUtil.read(data);
618    
619                    Element rootElement = document.getRootElement();
620    
621                    portletDataContext.setImportDataRootElement(rootElement);
622    
623                    long groupId = GetterUtil.getLong(
624                            rootElement.attributeValue("group-id"));
625    
626                    if (groupId != 0) {
627                            portletDataContext.setSourceGroupId(groupId);
628                    }
629    
630                    return rootElement;
631            }
632    
633            protected void addUncheckedModelAdditionCount(
634                    PortletDataContext portletDataContext,
635                    PortletDataHandlerControl portletDataHandlerControl) {
636    
637                    if (!(portletDataHandlerControl instanceof PortletDataHandlerBoolean)) {
638                            return;
639                    }
640    
641                    PortletDataHandlerBoolean portletDataHandlerBoolean =
642                            (PortletDataHandlerBoolean)portletDataHandlerControl;
643    
644                    PortletDataHandlerControl[] childPortletDataHandlerControls =
645                            portletDataHandlerBoolean.getChildren();
646    
647                    if (childPortletDataHandlerControls != null) {
648                            for (PortletDataHandlerControl childPortletDataHandlerControl :
649                                            childPortletDataHandlerControls) {
650    
651                                    addUncheckedModelAdditionCount(
652                                            portletDataContext, childPortletDataHandlerControl);
653                            }
654                    }
655    
656                    if (Validator.isNull(portletDataHandlerControl.getClassName())) {
657                            return;
658                    }
659    
660                    boolean checkedControl = GetterUtil.getBoolean(
661                            portletDataContext.getBooleanParameter(
662                                    portletDataHandlerControl.getNamespace(),
663                                    portletDataHandlerControl.getControlName(), false));
664    
665                    if (!checkedControl) {
666                            ManifestSummary manifestSummary =
667                                    portletDataContext.getManifestSummary();
668    
669                            String manifestSummaryKey = ManifestSummary.getManifestSummaryKey(
670                                    portletDataHandlerControl.getClassName(),
671                                    portletDataHandlerBoolean.getReferrerClassName());
672    
673                            manifestSummary.addModelAdditionCount(manifestSummaryKey, 0);
674                    }
675            }
676    
677            protected PortletPreferences doDeleteData(
678                            PortletDataContext portletDataContext, String portletId,
679                            PortletPreferences portletPreferences)
680                    throws Exception {
681    
682                    return portletPreferences;
683            }
684    
685            protected String doExportData(
686                            PortletDataContext portletDataContext, String portletId,
687                            PortletPreferences portletPreferences)
688                    throws Exception {
689    
690                    return null;
691            }
692    
693            protected PortletPreferences doImportData(
694                            PortletDataContext portletDataContext, String portletId,
695                            PortletPreferences portletPreferences, String data)
696                    throws Exception {
697    
698                    return null;
699            }
700    
701            protected void doPrepareManifestSummary(
702                            PortletDataContext portletDataContext,
703                            PortletPreferences portletPreferences)
704                    throws Exception {
705            }
706    
707            protected PortletPreferences doProcessExportPortletPreferences(
708                            PortletDataContext portletDataContext, String portletId,
709                            PortletPreferences portletPreferences)
710                    throws Exception {
711    
712                    return portletPreferences;
713            }
714    
715            protected PortletPreferences doProcessImportPortletPreferences(
716                            PortletDataContext portletDataContext, String portletId,
717                            PortletPreferences portletPreferences)
718                    throws Exception {
719    
720                    return portletPreferences;
721            }
722    
723            protected String getDisplayTemplate(
724                    PortletDataContext portletDataContext, String portletId,
725                    PortletPreferences portletPreferences) {
726    
727                    try {
728                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
729                                    portletDataContext.getCompanyId(), portletId);
730    
731                            if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
732                                    return portletPreferences.getValue("displayStyle", null);
733                            }
734                    }
735                    catch (Exception e) {
736                    }
737    
738                    return null;
739            }
740    
741            protected long getDisplayTemplateGroupId(
742                    PortletDataContext portletDataContext, String portletId,
743                    PortletPreferences portletPreferences) {
744    
745                    try {
746                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
747                                    portletDataContext.getCompanyId(), portletId);
748    
749                            if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
750                                    return GetterUtil.getLong(
751                                            portletPreferences.getValue("displayStyleGroupId", null));
752                            }
753                    }
754                    catch (Exception e) {
755                    }
756    
757                    return 0;
758            }
759    
760            protected String getExportDataRootElementString(Element rootElement) {
761                    if (rootElement == null) {
762                            return StringPool.BLANK;
763                    }
764    
765                    try {
766                            Document document = rootElement.getDocument();
767    
768                            return document.formattedString();
769                    }
770                    catch (IOException ioe) {
771                            return StringPool.BLANK;
772                    }
773            }
774    
775            protected long getExportModelCount(
776                    ManifestSummary manifestSummary,
777                    PortletDataHandlerControl[] portletDataHandlerControls) {
778    
779                    long totalModelCount = -1;
780    
781                    for (PortletDataHandlerControl portletDataHandlerControl :
782                                    portletDataHandlerControls) {
783    
784                            long modelCount = manifestSummary.getModelAdditionCount(
785                                    portletDataHandlerControl.getClassName(),
786                                    portletDataHandlerControl.getReferrerClassName());
787    
788                            if (portletDataHandlerControl
789                                            instanceof PortletDataHandlerBoolean) {
790    
791                                    PortletDataHandlerBoolean portletDataHandlerBoolean =
792                                            (PortletDataHandlerBoolean)portletDataHandlerControl;
793    
794                                    PortletDataHandlerControl[] childPortletDataHandlerControls =
795                                            portletDataHandlerBoolean.getChildren();
796    
797                                    if (childPortletDataHandlerControls != null) {
798                                            long childModelCount = getExportModelCount(
799                                                    manifestSummary, childPortletDataHandlerControls);
800    
801                                            if (childModelCount != -1) {
802                                                    if (modelCount == -1) {
803                                                            modelCount = childModelCount;
804                                                    }
805                                                    else {
806                                                            modelCount += childModelCount;
807                                                    }
808                                            }
809                                    }
810                            }
811    
812                            if (modelCount == -1) {
813                                    continue;
814                            }
815    
816                            if (totalModelCount == -1) {
817                                    totalModelCount = modelCount;
818                            }
819                            else {
820                                    totalModelCount += modelCount;
821                            }
822                    }
823    
824                    return totalModelCount;
825            }
826    
827            /**
828             * @deprecated As of 6.2.0
829             */
830            protected void setAlwaysExportable(boolean alwaysExportable) {
831            }
832    
833            /**
834             * @deprecated As of 6.2.0
835             */
836            protected void setAlwaysStaged(boolean alwaysStaged) {
837            }
838    
839            protected void setDataLevel(DataLevel dataLevel) {
840                    _dataLevel = dataLevel;
841            }
842    
843            protected void setDataLocalized(boolean dataLocalized) {
844                    _dataLocalized = dataLocalized;
845            }
846    
847            protected void setDataPortletPreferences(String... dataPortletPreferences) {
848                    _dataPortletPreferences = dataPortletPreferences;
849            }
850    
851            protected void setDeletionSystemEventStagedModelTypes(
852                    StagedModelType... deletionSystemEventStagedModelTypes) {
853    
854                    _deletionSystemEventStagedModelTypes =
855                            deletionSystemEventStagedModelTypes;
856            }
857    
858            protected void setExportControls(
859                    PortletDataHandlerControl... exportControls) {
860    
861                    _exportControls = exportControls;
862    
863                    setImportControls(exportControls);
864            }
865    
866            protected void setExportMetadataControls(
867                    PortletDataHandlerControl... exportMetadataControls) {
868    
869                    _exportMetadataControls = exportMetadataControls;
870    
871                    setImportMetadataControls(exportMetadataControls);
872            }
873    
874            protected void setImportControls(
875                    PortletDataHandlerControl... importControls) {
876    
877                    _importControls = importControls;
878            }
879    
880            protected void setImportMetadataControls(
881                    PortletDataHandlerControl... importMetadataControls) {
882    
883                    _importMetadataControls = importMetadataControls;
884            }
885    
886            protected void setPublishToLiveByDefault(boolean publishToLiveByDefault) {
887                    _publishToLiveByDefault = publishToLiveByDefault;
888            }
889    
890            protected void setSupportsDataStrategyCopyAsNew(
891                    boolean supportsDataStrategyCopyAsNew) {
892    
893                    _supportsDataStrategyCopyAsNew = supportsDataStrategyCopyAsNew;
894            }
895    
896            private static Log _log = LogFactoryUtil.getLog(
897                    BasePortletDataHandler.class);
898    
899            private DataLevel _dataLevel = DataLevel.SITE;
900            private boolean _dataLocalized;
901            private String[] _dataPortletPreferences = StringPool.EMPTY_ARRAY;
902            private StagedModelType[] _deletionSystemEventStagedModelTypes =
903                    new StagedModelType[0];
904            private PortletDataHandlerControl[] _exportControls =
905                    new PortletDataHandlerControl[0];
906            private PortletDataHandlerControl[] _exportMetadataControls =
907                    new PortletDataHandlerControl[0];
908            private PortletDataHandlerControl[] _importControls =
909                    new PortletDataHandlerControl[0];
910            private PortletDataHandlerControl[] _importMetadataControls =
911                    new PortletDataHandlerControl[0];
912            private String _portletId;
913            private boolean _publishToLiveByDefault;
914            private boolean _supportsDataStrategyCopyAsNew = true;
915    
916    }