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.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
020    import com.liferay.portal.kernel.lar.ExportImportPathUtil;
021    import com.liferay.portal.kernel.lar.PortletDataContext;
022    import com.liferay.portal.kernel.util.CalendarFactoryUtil;
023    import com.liferay.portal.kernel.xml.Element;
024    import com.liferay.portal.service.ServiceContext;
025    import com.liferay.portlet.polls.model.PollsQuestion;
026    import com.liferay.portlet.polls.service.PollsQuestionLocalServiceUtil;
027    
028    import java.util.Calendar;
029    import java.util.Date;
030    import java.util.Map;
031    
032    /**
033     * @author Shinn Lok
034     * @author Mate Thurzo
035     */
036    public class PollsQuestionStagedModelDataHandler
037            extends BaseStagedModelDataHandler<PollsQuestion> {
038    
039            public static final String[] CLASS_NAMES = {PollsQuestion.class.getName()};
040    
041            @Override
042            public void deleteStagedModel(
043                            String uuid, long groupId, String className, String extraData)
044                    throws PortalException, SystemException {
045    
046                    PollsQuestion question =
047                            PollsQuestionLocalServiceUtil.fetchPollsQuestionByUuidAndGroupId(
048                                    uuid, groupId);
049    
050                    if (question != null) {
051                            PollsQuestionLocalServiceUtil.deleteQuestion(question);
052                    }
053            }
054    
055            @Override
056            public String[] getClassNames() {
057                    return CLASS_NAMES;
058            }
059    
060            @Override
061            public String getDisplayName(PollsQuestion question) {
062                    return question.getTitle();
063            }
064    
065            @Override
066            protected void doExportStagedModel(
067                            PortletDataContext portletDataContext, PollsQuestion question)
068                    throws Exception {
069    
070                    Element questionElement = portletDataContext.getExportDataElement(
071                            question);
072    
073                    portletDataContext.addClassedModel(
074                            questionElement, ExportImportPathUtil.getModelPath(question),
075                            question);
076            }
077    
078            @Override
079            protected void doImportCompanyStagedModel(
080                            PortletDataContext portletDataContext, String uuid, long questionId)
081                    throws Exception {
082    
083                    PollsQuestion existingQuestion =
084                            PollsQuestionLocalServiceUtil.fetchPollsQuestionByUuidAndGroupId(
085                                    uuid, portletDataContext.getCompanyGroupId());
086    
087                    Map<Long, Long> questionIds =
088                            (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
089                                    PollsQuestion.class);
090    
091                    questionIds.put(questionId, existingQuestion.getQuestionId());
092            }
093    
094            @Override
095            protected void doImportStagedModel(
096                            PortletDataContext portletDataContext, PollsQuestion question)
097                    throws Exception {
098    
099                    long userId = portletDataContext.getUserId(question.getUserUuid());
100    
101                    int expirationMonth = 0;
102                    int expirationDay = 0;
103                    int expirationYear = 0;
104                    int expirationHour = 0;
105                    int expirationMinute = 0;
106                    boolean neverExpire = true;
107    
108                    Date expirationDate = question.getExpirationDate();
109    
110                    if (expirationDate != null) {
111                            Calendar expirationCal = CalendarFactoryUtil.getCalendar();
112    
113                            expirationCal.setTime(expirationDate);
114    
115                            expirationMonth = expirationCal.get(Calendar.MONTH);
116                            expirationDay = expirationCal.get(Calendar.DATE);
117                            expirationYear = expirationCal.get(Calendar.YEAR);
118                            expirationHour = expirationCal.get(Calendar.HOUR);
119                            expirationMinute = expirationCal.get(Calendar.MINUTE);
120                            neverExpire = false;
121    
122                            if (expirationCal.get(Calendar.AM_PM) == Calendar.PM) {
123                                    expirationHour += 12;
124                            }
125                    }
126    
127                    ServiceContext serviceContext = portletDataContext.createServiceContext(
128                            question);
129    
130                    PollsQuestion importedQuestion = null;
131    
132                    if (portletDataContext.isDataStrategyMirror()) {
133                            PollsQuestion existingQuestion =
134                                    PollsQuestionLocalServiceUtil.
135                                            fetchPollsQuestionByUuidAndGroupId(
136                                                    question.getUuid(),
137                                                    portletDataContext.getScopeGroupId());
138    
139                            if (existingQuestion == null) {
140                                    serviceContext.setUuid(question.getUuid());
141    
142                                    importedQuestion = PollsQuestionLocalServiceUtil.addQuestion(
143                                            userId, question.getTitleMap(),
144                                            question.getDescriptionMap(), expirationMonth,
145                                            expirationDay, expirationYear, expirationHour,
146                                            expirationMinute, neverExpire, null, serviceContext);
147                            }
148                            else {
149                                    importedQuestion = PollsQuestionLocalServiceUtil.updateQuestion(
150                                            userId, existingQuestion.getQuestionId(),
151                                            question.getTitleMap(), question.getDescriptionMap(),
152                                            expirationMonth, expirationDay, expirationYear,
153                                            expirationHour, expirationMinute, neverExpire, null,
154                                            serviceContext);
155                            }
156                    }
157                    else {
158                            importedQuestion = PollsQuestionLocalServiceUtil.addQuestion(
159                                    userId, question.getTitleMap(), question.getDescriptionMap(),
160                                    expirationMonth, expirationDay, expirationYear, expirationHour,
161                                    expirationMinute, neverExpire, null, serviceContext);
162                    }
163    
164                    portletDataContext.importClassedModel(question, importedQuestion);
165            }
166    
167            @Override
168            protected boolean validateMissingReference(
169                            String uuid, long companyId, long groupId)
170                    throws Exception {
171    
172                    PollsQuestion question =
173                            PollsQuestionLocalServiceUtil.fetchPollsQuestionByUuidAndGroupId(
174                                    uuid, groupId);
175    
176                    if (question == null) {
177                            return false;
178                    }
179    
180                    return true;
181            }
182    
183    }