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.portlet.polls.lar;
016    
017    import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
018    import com.liferay.portal.kernel.lar.ExportImportPathUtil;
019    import com.liferay.portal.kernel.lar.PortletDataContext;
020    import com.liferay.portal.kernel.util.CalendarFactoryUtil;
021    import com.liferay.portal.kernel.xml.Element;
022    import com.liferay.portal.service.ServiceContext;
023    import com.liferay.portlet.polls.model.PollsQuestion;
024    import com.liferay.portlet.polls.service.PollsQuestionLocalServiceUtil;
025    import com.liferay.portlet.polls.service.persistence.PollsQuestionUtil;
026    
027    import java.util.Calendar;
028    import java.util.Date;
029    
030    /**
031     * @author Shinn Lok
032     */
033    public class PollsQuestionStagedModelDataHandler
034            extends BaseStagedModelDataHandler<PollsQuestion> {
035    
036            public static final String[] CLASS_NAMES = {PollsQuestion.class.getName()};
037    
038            @Override
039            public String[] getClassNames() {
040                    return CLASS_NAMES;
041            }
042    
043            @Override
044            protected void doExportStagedModel(
045                            PortletDataContext portletDataContext, PollsQuestion question)
046                    throws Exception {
047    
048                    Element questionElement =
049                            portletDataContext.getExportDataStagedModelElement(question);
050    
051                    portletDataContext.addClassedModel(
052                            questionElement, ExportImportPathUtil.getModelPath(question),
053                            question, PollsPortletDataHandler.NAMESPACE);
054            }
055    
056            @Override
057            protected void doImportStagedModel(
058                            PortletDataContext portletDataContext, PollsQuestion question)
059                    throws Exception {
060    
061                    long userId = portletDataContext.getUserId(question.getUserUuid());
062    
063                    int expirationMonth = 0;
064                    int expirationDay = 0;
065                    int expirationYear = 0;
066                    int expirationHour = 0;
067                    int expirationMinute = 0;
068                    boolean neverExpire = true;
069    
070                    Date expirationDate = question.getExpirationDate();
071    
072                    if (expirationDate != null) {
073                            Calendar expirationCal = CalendarFactoryUtil.getCalendar();
074    
075                            expirationCal.setTime(expirationDate);
076    
077                            expirationMonth = expirationCal.get(Calendar.MONTH);
078                            expirationDay = expirationCal.get(Calendar.DATE);
079                            expirationYear = expirationCal.get(Calendar.YEAR);
080                            expirationHour = expirationCal.get(Calendar.HOUR);
081                            expirationMinute = expirationCal.get(Calendar.MINUTE);
082                            neverExpire = false;
083    
084                            if (expirationCal.get(Calendar.AM_PM) == Calendar.PM) {
085                                    expirationHour += 12;
086                            }
087                    }
088    
089                    ServiceContext serviceContext = portletDataContext.createServiceContext(
090                            question, PollsPortletDataHandler.NAMESPACE);
091    
092                    PollsQuestion importedQuestion = null;
093    
094                    if (portletDataContext.isDataStrategyMirror()) {
095                            PollsQuestion existingQuestion = PollsQuestionUtil.fetchByUUID_G(
096                                    question.getUuid(), portletDataContext.getScopeGroupId());
097    
098                            if (existingQuestion == null) {
099                                    serviceContext.setUuid(question.getUuid());
100    
101                                    importedQuestion = PollsQuestionLocalServiceUtil.addQuestion(
102                                            userId, question.getTitleMap(),
103                                            question.getDescriptionMap(), expirationMonth,
104                                            expirationDay, expirationYear, expirationHour,
105                                            expirationMinute, neverExpire, null, serviceContext);
106                            }
107                            else {
108                                    importedQuestion = PollsQuestionLocalServiceUtil.updateQuestion(
109                                            userId, existingQuestion.getQuestionId(),
110                                            question.getTitleMap(), question.getDescriptionMap(),
111                                            expirationMonth, expirationDay, expirationYear,
112                                            expirationHour, expirationMinute, neverExpire, null,
113                                            serviceContext);
114                            }
115                    }
116                    else {
117                            importedQuestion = PollsQuestionLocalServiceUtil.addQuestion(
118                                    userId, question.getTitleMap(), question.getDescriptionMap(),
119                                    expirationMonth, expirationDay, expirationYear, expirationHour,
120                                    expirationMinute, neverExpire, null, serviceContext);
121                    }
122    
123                    portletDataContext.importClassedModel(
124                            question, importedQuestion, PollsPortletDataHandler.NAMESPACE);
125            }
126    
127    }