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                                                            String ddmTemplateClassName =
565                                                                    ddmTemplateElement.attributeValue("class-name");
566    
567                                                            if (Validator.isNotNull(ddmTemplateClassName)) {
568                                                                    long classNameId = PortalUtil.getClassNameId(
569                                                                            ddmTemplateClassName);
570    
571                                                                    ddmTemplate.setClassNameId(classNameId);
572                                                            }
573    
574                                                            StagedModelDataHandlerUtil.importStagedModel(
575                                                                    portletDataContext, ddmTemplate);
576                                                    }
577                                            }
578                                    }
579                                    else {
580                                            importedDisplayStyleGroupId = ddmTemplate.getGroupId();
581                                    }
582    
583                                    portletPreferences.setValue(
584                                            "displayStyleGroupId",
585                                            String.valueOf(importedDisplayStyleGroupId));
586                            }
587                            else {
588                                    portletPreferences.setValue(
589                                            "displayStyleGroupId", StringPool.BLANK);
590                            }
591    
592                            return doProcessImportPortletPreferences(
593                                    portletDataContext, portletId, portletPreferences);
594                    }
595                    catch (PortletDataException pde) {
596                            throw pde;
597                    }
598                    catch (Exception e) {
599                            throw new PortletDataException(e);
600                    }
601            }
602    
603            @Override
604            public void setPortletId(String portletId) {
605                    _portletId = portletId;
606            }
607    
608            protected Element addExportDataRootElement(
609                    PortletDataContext portletDataContext) {
610    
611                    Document document = SAXReaderUtil.createDocument();
612    
613                    Class<?> clazz = getClass();
614    
615                    Element rootElement = document.addElement(clazz.getSimpleName());
616    
617                    portletDataContext.setExportDataRootElement(rootElement);
618    
619                    return rootElement;
620            }
621    
622            protected Element addImportDataRootElement(
623                            PortletDataContext portletDataContext, String data)
624                    throws DocumentException {
625    
626                    Document document = SAXReaderUtil.read(data);
627    
628                    Element rootElement = document.getRootElement();
629    
630                    portletDataContext.setImportDataRootElement(rootElement);
631    
632                    long groupId = GetterUtil.getLong(
633                            rootElement.attributeValue("group-id"));
634    
635                    if (groupId != 0) {
636                            portletDataContext.setSourceGroupId(groupId);
637                    }
638    
639                    return rootElement;
640            }
641    
642            protected void addUncheckedModelAdditionCount(
643                    PortletDataContext portletDataContext,
644                    PortletDataHandlerControl portletDataHandlerControl) {
645    
646                    if (!(portletDataHandlerControl instanceof PortletDataHandlerBoolean)) {
647                            return;
648                    }
649    
650                    PortletDataHandlerBoolean portletDataHandlerBoolean =
651                            (PortletDataHandlerBoolean)portletDataHandlerControl;
652    
653                    PortletDataHandlerControl[] childPortletDataHandlerControls =
654                            portletDataHandlerBoolean.getChildren();
655    
656                    if (childPortletDataHandlerControls != null) {
657                            for (PortletDataHandlerControl childPortletDataHandlerControl :
658                                            childPortletDataHandlerControls) {
659    
660                                    addUncheckedModelAdditionCount(
661                                            portletDataContext, childPortletDataHandlerControl);
662                            }
663                    }
664    
665                    if (Validator.isNull(portletDataHandlerControl.getClassName())) {
666                            return;
667                    }
668    
669                    boolean checkedControl = GetterUtil.getBoolean(
670                            portletDataContext.getBooleanParameter(
671                                    portletDataHandlerControl.getNamespace(),
672                                    portletDataHandlerControl.getControlName(), false));
673    
674                    if (!checkedControl) {
675                            ManifestSummary manifestSummary =
676                                    portletDataContext.getManifestSummary();
677    
678                            String manifestSummaryKey = ManifestSummary.getManifestSummaryKey(
679                                    portletDataHandlerControl.getClassName(),
680                                    portletDataHandlerBoolean.getReferrerClassName());
681    
682                            manifestSummary.addModelAdditionCount(manifestSummaryKey, 0);
683                    }
684            }
685    
686            protected PortletPreferences doDeleteData(
687                            PortletDataContext portletDataContext, String portletId,
688                            PortletPreferences portletPreferences)
689                    throws Exception {
690    
691                    return portletPreferences;
692            }
693    
694            protected String doExportData(
695                            PortletDataContext portletDataContext, String portletId,
696                            PortletPreferences portletPreferences)
697                    throws Exception {
698    
699                    return null;
700            }
701    
702            protected PortletPreferences doImportData(
703                            PortletDataContext portletDataContext, String portletId,
704                            PortletPreferences portletPreferences, String data)
705                    throws Exception {
706    
707                    return null;
708            }
709    
710            protected void doPrepareManifestSummary(
711                            PortletDataContext portletDataContext,
712                            PortletPreferences portletPreferences)
713                    throws Exception {
714            }
715    
716            protected PortletPreferences doProcessExportPortletPreferences(
717                            PortletDataContext portletDataContext, String portletId,
718                            PortletPreferences portletPreferences)
719                    throws Exception {
720    
721                    return portletPreferences;
722            }
723    
724            protected PortletPreferences doProcessImportPortletPreferences(
725                            PortletDataContext portletDataContext, String portletId,
726                            PortletPreferences portletPreferences)
727                    throws Exception {
728    
729                    return portletPreferences;
730            }
731    
732            protected String getDisplayTemplate(
733                    PortletDataContext portletDataContext, String portletId,
734                    PortletPreferences portletPreferences) {
735    
736                    try {
737                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
738                                    portletDataContext.getCompanyId(), portletId);
739    
740                            if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
741                                    return portletPreferences.getValue("displayStyle", null);
742                            }
743                    }
744                    catch (Exception e) {
745                    }
746    
747                    return null;
748            }
749    
750            protected long getDisplayTemplateGroupId(
751                    PortletDataContext portletDataContext, String portletId,
752                    PortletPreferences portletPreferences) {
753    
754                    try {
755                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
756                                    portletDataContext.getCompanyId(), portletId);
757    
758                            if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
759                                    return GetterUtil.getLong(
760                                            portletPreferences.getValue("displayStyleGroupId", null));
761                            }
762                    }
763                    catch (Exception e) {
764                    }
765    
766                    return 0;
767            }
768    
769            protected String getExportDataRootElementString(Element rootElement) {
770                    if (rootElement == null) {
771                            return StringPool.BLANK;
772                    }
773    
774                    try {
775                            Document document = rootElement.getDocument();
776    
777                            return document.formattedString();
778                    }
779                    catch (IOException ioe) {
780                            return StringPool.BLANK;
781                    }
782            }
783    
784            protected long getExportModelCount(
785                    ManifestSummary manifestSummary,
786                    PortletDataHandlerControl[] portletDataHandlerControls) {
787    
788                    long totalModelCount = -1;
789    
790                    for (PortletDataHandlerControl portletDataHandlerControl :
791                                    portletDataHandlerControls) {
792    
793                            long modelCount = manifestSummary.getModelAdditionCount(
794                                    portletDataHandlerControl.getClassName(),
795                                    portletDataHandlerControl.getReferrerClassName());
796    
797                            if (portletDataHandlerControl
798                                            instanceof PortletDataHandlerBoolean) {
799    
800                                    PortletDataHandlerBoolean portletDataHandlerBoolean =
801                                            (PortletDataHandlerBoolean)portletDataHandlerControl;
802    
803                                    PortletDataHandlerControl[] childPortletDataHandlerControls =
804                                            portletDataHandlerBoolean.getChildren();
805    
806                                    if (childPortletDataHandlerControls != null) {
807                                            long childModelCount = getExportModelCount(
808                                                    manifestSummary, childPortletDataHandlerControls);
809    
810                                            if (childModelCount != -1) {
811                                                    if (modelCount == -1) {
812                                                            modelCount = childModelCount;
813                                                    }
814                                                    else {
815                                                            modelCount += childModelCount;
816                                                    }
817                                            }
818                                    }
819                            }
820    
821                            if (modelCount == -1) {
822                                    continue;
823                            }
824    
825                            if (totalModelCount == -1) {
826                                    totalModelCount = modelCount;
827                            }
828                            else {
829                                    totalModelCount += modelCount;
830                            }
831                    }
832    
833                    return totalModelCount;
834            }
835    
836            /**
837             * @deprecated As of 6.2.0
838             */
839            protected void setAlwaysExportable(boolean alwaysExportable) {
840            }
841    
842            /**
843             * @deprecated As of 6.2.0
844             */
845            protected void setAlwaysStaged(boolean alwaysStaged) {
846            }
847    
848            protected void setDataLevel(DataLevel dataLevel) {
849                    _dataLevel = dataLevel;
850            }
851    
852            protected void setDataLocalized(boolean dataLocalized) {
853                    _dataLocalized = dataLocalized;
854            }
855    
856            protected void setDataPortletPreferences(String... dataPortletPreferences) {
857                    _dataPortletPreferences = dataPortletPreferences;
858            }
859    
860            protected void setDeletionSystemEventStagedModelTypes(
861                    StagedModelType... deletionSystemEventStagedModelTypes) {
862    
863                    _deletionSystemEventStagedModelTypes =
864                            deletionSystemEventStagedModelTypes;
865            }
866    
867            protected void setExportControls(
868                    PortletDataHandlerControl... exportControls) {
869    
870                    _exportControls = exportControls;
871    
872                    setImportControls(exportControls);
873            }
874    
875            protected void setExportMetadataControls(
876                    PortletDataHandlerControl... exportMetadataControls) {
877    
878                    _exportMetadataControls = exportMetadataControls;
879    
880                    setImportMetadataControls(exportMetadataControls);
881            }
882    
883            protected void setImportControls(
884                    PortletDataHandlerControl... importControls) {
885    
886                    _importControls = importControls;
887            }
888    
889            protected void setImportMetadataControls(
890                    PortletDataHandlerControl... importMetadataControls) {
891    
892                    _importMetadataControls = importMetadataControls;
893            }
894    
895            protected void setPublishToLiveByDefault(boolean publishToLiveByDefault) {
896                    _publishToLiveByDefault = publishToLiveByDefault;
897            }
898    
899            protected void setSupportsDataStrategyCopyAsNew(
900                    boolean supportsDataStrategyCopyAsNew) {
901    
902                    _supportsDataStrategyCopyAsNew = supportsDataStrategyCopyAsNew;
903            }
904    
905            private static Log _log = LogFactoryUtil.getLog(
906                    BasePortletDataHandler.class);
907    
908            private DataLevel _dataLevel = DataLevel.SITE;
909            private boolean _dataLocalized;
910            private String[] _dataPortletPreferences = StringPool.EMPTY_ARRAY;
911            private StagedModelType[] _deletionSystemEventStagedModelTypes =
912                    new StagedModelType[0];
913            private PortletDataHandlerControl[] _exportControls =
914                    new PortletDataHandlerControl[0];
915            private PortletDataHandlerControl[] _exportMetadataControls =
916                    new PortletDataHandlerControl[0];
917            private PortletDataHandlerControl[] _importControls =
918                    new PortletDataHandlerControl[0];
919            private PortletDataHandlerControl[] _importMetadataControls =
920                    new PortletDataHandlerControl[0];
921            private String _portletId;
922            private boolean _publishToLiveByDefault;
923            private boolean _supportsDataStrategyCopyAsNew = true;
924    
925    }