001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
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                                            boolean preloaded = false;
487                                            long referenceClassNameId = 0;
488                                            String templateKey = null;
489    
490                                            if (referencesElement != null) {
491                                                    List<Element> referenceElements =
492                                                            referencesElement.elements();
493    
494                                                    String ddmTemplateUuid =
495                                                            PortletDisplayTemplateUtil.getDDMTemplateUuid(
496                                                                    displayStyle);
497    
498                                                    for (Element referenceElement : referenceElements) {
499                                                            String className = referenceElement.attributeValue(
500                                                                    "class-name");
501                                                            String uuid = referenceElement.attributeValue(
502                                                                    "uuid");
503    
504                                                            if (!className.equals(
505                                                                            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    
523                                            if (!preloaded) {
524                                                    ddmTemplate =
525                                                            PortletDisplayTemplateUtil.fetchDDMTemplate(
526                                                                    portletDataContext.getCompanyGroupId(),
527                                                                    displayStyle);
528                                            }
529                                            else {
530                                                    ddmTemplate = DDMTemplateLocalServiceUtil.fetchTemplate(
531                                                            portletDataContext.getCompanyGroupId(),
532                                                            referenceClassNameId, templateKey);
533                                            }
534                                    }
535                                    else if (displayStyleGroupId ==
536                                                            portletDataContext.getSourceGroupId()) {
537    
538                                            ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
539                                                    portletDataContext.getScopeGroupId(), displayStyle);
540                                    }
541                                    else {
542                                            ddmTemplate = PortletDisplayTemplateUtil.fetchDDMTemplate(
543                                                    displayStyleGroupId, displayStyle);
544                                    }
545    
546                                    long importedDisplayStyleGroupId =
547                                            portletDataContext.getScopeGroupId();
548    
549                                    if (ddmTemplate == null) {
550                                            String ddmTemplateUuid =
551                                                    PortletDisplayTemplateUtil.getDDMTemplateUuid(
552                                                            displayStyle);
553    
554                                            Element ddmTemplateElement =
555                                                    portletDataContext.getImportDataElement(
556                                                            DDMTemplate.class.getSimpleName(), "uuid",
557                                                            ddmTemplateUuid);
558    
559                                            if (ddmTemplateElement != null) {
560                                                    String ddmTemplatePath =
561                                                            ddmTemplateElement.attributeValue("path");
562    
563                                                    ddmTemplate =
564                                                            (DDMTemplate)portletDataContext.getZipEntryAsObject(
565                                                                    ddmTemplatePath);
566    
567                                                    if (ddmTemplate != null) {
568                                                            String ddmTemplateClassName =
569                                                                    ddmTemplateElement.attributeValue("class-name");
570    
571                                                            if (Validator.isNotNull(ddmTemplateClassName)) {
572                                                                    long classNameId = PortalUtil.getClassNameId(
573                                                                            ddmTemplateClassName);
574    
575                                                                    ddmTemplate.setClassNameId(classNameId);
576                                                            }
577    
578                                                            StagedModelDataHandlerUtil.importStagedModel(
579                                                                    portletDataContext, ddmTemplate);
580                                                    }
581                                            }
582                                    }
583                                    else {
584                                            importedDisplayStyleGroupId = ddmTemplate.getGroupId();
585                                    }
586    
587                                    portletPreferences.setValue(
588                                            "displayStyleGroupId",
589                                            String.valueOf(importedDisplayStyleGroupId));
590                            }
591                            else {
592                                    portletPreferences.setValue(
593                                            "displayStyleGroupId", StringPool.BLANK);
594                            }
595    
596                            return doProcessImportPortletPreferences(
597                                    portletDataContext, portletId, portletPreferences);
598                    }
599                    catch (PortletDataException pde) {
600                            throw pde;
601                    }
602                    catch (Exception e) {
603                            throw new PortletDataException(e);
604                    }
605            }
606    
607            @Override
608            public void setPortletId(String portletId) {
609                    _portletId = portletId;
610            }
611    
612            protected Element addExportDataRootElement(
613                    PortletDataContext portletDataContext) {
614    
615                    Document document = SAXReaderUtil.createDocument();
616    
617                    Class<?> clazz = getClass();
618    
619                    Element rootElement = document.addElement(clazz.getSimpleName());
620    
621                    portletDataContext.setExportDataRootElement(rootElement);
622    
623                    return rootElement;
624            }
625    
626            protected Element addImportDataRootElement(
627                            PortletDataContext portletDataContext, String data)
628                    throws DocumentException {
629    
630                    Document document = SAXReaderUtil.read(data);
631    
632                    Element rootElement = document.getRootElement();
633    
634                    portletDataContext.setImportDataRootElement(rootElement);
635    
636                    long groupId = GetterUtil.getLong(
637                            rootElement.attributeValue("group-id"));
638    
639                    if (groupId != 0) {
640                            portletDataContext.setSourceGroupId(groupId);
641                    }
642    
643                    return rootElement;
644            }
645    
646            protected void addUncheckedModelAdditionCount(
647                    PortletDataContext portletDataContext,
648                    PortletDataHandlerControl portletDataHandlerControl) {
649    
650                    if (!(portletDataHandlerControl instanceof PortletDataHandlerBoolean)) {
651                            return;
652                    }
653    
654                    PortletDataHandlerBoolean portletDataHandlerBoolean =
655                            (PortletDataHandlerBoolean)portletDataHandlerControl;
656    
657                    PortletDataHandlerControl[] childPortletDataHandlerControls =
658                            portletDataHandlerBoolean.getChildren();
659    
660                    if (childPortletDataHandlerControls != null) {
661                            for (PortletDataHandlerControl childPortletDataHandlerControl :
662                                            childPortletDataHandlerControls) {
663    
664                                    addUncheckedModelAdditionCount(
665                                            portletDataContext, childPortletDataHandlerControl);
666                            }
667                    }
668    
669                    if (Validator.isNull(portletDataHandlerControl.getClassName())) {
670                            return;
671                    }
672    
673                    boolean checkedControl = GetterUtil.getBoolean(
674                            portletDataContext.getBooleanParameter(
675                                    portletDataHandlerControl.getNamespace(),
676                                    portletDataHandlerControl.getControlName(), false));
677    
678                    if (!checkedControl) {
679                            ManifestSummary manifestSummary =
680                                    portletDataContext.getManifestSummary();
681    
682                            String manifestSummaryKey = ManifestSummary.getManifestSummaryKey(
683                                    portletDataHandlerControl.getClassName(),
684                                    portletDataHandlerBoolean.getReferrerClassName());
685    
686                            manifestSummary.addModelAdditionCount(manifestSummaryKey, 0);
687                    }
688            }
689    
690            protected PortletPreferences doDeleteData(
691                            PortletDataContext portletDataContext, String portletId,
692                            PortletPreferences portletPreferences)
693                    throws Exception {
694    
695                    return portletPreferences;
696            }
697    
698            protected String doExportData(
699                            PortletDataContext portletDataContext, String portletId,
700                            PortletPreferences portletPreferences)
701                    throws Exception {
702    
703                    return null;
704            }
705    
706            protected PortletPreferences doImportData(
707                            PortletDataContext portletDataContext, String portletId,
708                            PortletPreferences portletPreferences, String data)
709                    throws Exception {
710    
711                    return null;
712            }
713    
714            protected void doPrepareManifestSummary(
715                            PortletDataContext portletDataContext,
716                            PortletPreferences portletPreferences)
717                    throws Exception {
718            }
719    
720            protected PortletPreferences doProcessExportPortletPreferences(
721                            PortletDataContext portletDataContext, String portletId,
722                            PortletPreferences portletPreferences)
723                    throws Exception {
724    
725                    return portletPreferences;
726            }
727    
728            protected PortletPreferences doProcessImportPortletPreferences(
729                            PortletDataContext portletDataContext, String portletId,
730                            PortletPreferences portletPreferences)
731                    throws Exception {
732    
733                    return portletPreferences;
734            }
735    
736            protected String getDisplayTemplate(
737                    PortletDataContext portletDataContext, String portletId,
738                    PortletPreferences portletPreferences) {
739    
740                    try {
741                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
742                                    portletDataContext.getCompanyId(), portletId);
743    
744                            if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
745                                    return portletPreferences.getValue("displayStyle", null);
746                            }
747                    }
748                    catch (Exception e) {
749                    }
750    
751                    return null;
752            }
753    
754            protected long getDisplayTemplateGroupId(
755                    PortletDataContext portletDataContext, String portletId,
756                    PortletPreferences portletPreferences) {
757    
758                    try {
759                            Portlet portlet = PortletLocalServiceUtil.getPortletById(
760                                    portletDataContext.getCompanyId(), portletId);
761    
762                            if (Validator.isNotNull(portlet.getTemplateHandlerClass())) {
763                                    return GetterUtil.getLong(
764                                            portletPreferences.getValue("displayStyleGroupId", null));
765                            }
766                    }
767                    catch (Exception e) {
768                    }
769    
770                    return 0;
771            }
772    
773            protected String getExportDataRootElementString(Element rootElement) {
774                    if (rootElement == null) {
775                            return StringPool.BLANK;
776                    }
777    
778                    try {
779                            Document document = rootElement.getDocument();
780    
781                            return document.formattedString();
782                    }
783                    catch (IOException ioe) {
784                            return StringPool.BLANK;
785                    }
786            }
787    
788            protected long getExportModelCount(
789                    ManifestSummary manifestSummary,
790                    PortletDataHandlerControl[] portletDataHandlerControls) {
791    
792                    long totalModelCount = -1;
793    
794                    for (PortletDataHandlerControl portletDataHandlerControl :
795                                    portletDataHandlerControls) {
796    
797                            long modelCount = manifestSummary.getModelAdditionCount(
798                                    portletDataHandlerControl.getClassName(),
799                                    portletDataHandlerControl.getReferrerClassName());
800    
801                            if (portletDataHandlerControl
802                                            instanceof PortletDataHandlerBoolean) {
803    
804                                    PortletDataHandlerBoolean portletDataHandlerBoolean =
805                                            (PortletDataHandlerBoolean)portletDataHandlerControl;
806    
807                                    PortletDataHandlerControl[] childPortletDataHandlerControls =
808                                            portletDataHandlerBoolean.getChildren();
809    
810                                    if (childPortletDataHandlerControls != null) {
811                                            long childModelCount = getExportModelCount(
812                                                    manifestSummary, childPortletDataHandlerControls);
813    
814                                            if (childModelCount != -1) {
815                                                    if (modelCount == -1) {
816                                                            modelCount = childModelCount;
817                                                    }
818                                                    else {
819                                                            modelCount += childModelCount;
820                                                    }
821                                            }
822                                    }
823                            }
824    
825                            if (modelCount == -1) {
826                                    continue;
827                            }
828    
829                            if (totalModelCount == -1) {
830                                    totalModelCount = modelCount;
831                            }
832                            else {
833                                    totalModelCount += modelCount;
834                            }
835                    }
836    
837                    return totalModelCount;
838            }
839    
840            /**
841             * @deprecated As of 6.2.0
842             */
843            protected void setAlwaysExportable(boolean alwaysExportable) {
844            }
845    
846            /**
847             * @deprecated As of 6.2.0
848             */
849            protected void setAlwaysStaged(boolean alwaysStaged) {
850            }
851    
852            protected void setDataLevel(DataLevel dataLevel) {
853                    _dataLevel = dataLevel;
854            }
855    
856            protected void setDataLocalized(boolean dataLocalized) {
857                    _dataLocalized = dataLocalized;
858            }
859    
860            protected void setDataPortletPreferences(String... dataPortletPreferences) {
861                    _dataPortletPreferences = dataPortletPreferences;
862            }
863    
864            protected void setDeletionSystemEventStagedModelTypes(
865                    StagedModelType... deletionSystemEventStagedModelTypes) {
866    
867                    _deletionSystemEventStagedModelTypes =
868                            deletionSystemEventStagedModelTypes;
869            }
870    
871            protected void setExportControls(
872                    PortletDataHandlerControl... exportControls) {
873    
874                    _exportControls = exportControls;
875    
876                    setImportControls(exportControls);
877            }
878    
879            protected void setExportMetadataControls(
880                    PortletDataHandlerControl... exportMetadataControls) {
881    
882                    _exportMetadataControls = exportMetadataControls;
883    
884                    setImportMetadataControls(exportMetadataControls);
885            }
886    
887            protected void setImportControls(
888                    PortletDataHandlerControl... importControls) {
889    
890                    _importControls = importControls;
891            }
892    
893            protected void setImportMetadataControls(
894                    PortletDataHandlerControl... importMetadataControls) {
895    
896                    _importMetadataControls = importMetadataControls;
897            }
898    
899            protected void setPublishToLiveByDefault(boolean publishToLiveByDefault) {
900                    _publishToLiveByDefault = publishToLiveByDefault;
901            }
902    
903            protected void setSupportsDataStrategyCopyAsNew(
904                    boolean supportsDataStrategyCopyAsNew) {
905    
906                    _supportsDataStrategyCopyAsNew = supportsDataStrategyCopyAsNew;
907            }
908    
909            private static Log _log = LogFactoryUtil.getLog(
910                    BasePortletDataHandler.class);
911    
912            private DataLevel _dataLevel = DataLevel.SITE;
913            private boolean _dataLocalized;
914            private String[] _dataPortletPreferences = StringPool.EMPTY_ARRAY;
915            private StagedModelType[] _deletionSystemEventStagedModelTypes =
916                    new StagedModelType[0];
917            private PortletDataHandlerControl[] _exportControls =
918                    new PortletDataHandlerControl[0];
919            private PortletDataHandlerControl[] _exportMetadataControls =
920                    new PortletDataHandlerControl[0];
921            private PortletDataHandlerControl[] _importControls =
922                    new PortletDataHandlerControl[0];
923            private PortletDataHandlerControl[] _importMetadataControls =
924                    new PortletDataHandlerControl[0];
925            private String _portletId;
926            private boolean _publishToLiveByDefault;
927            private boolean _supportsDataStrategyCopyAsNew = true;
928    
929    }