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.journal.model;
016    
017    import com.liferay.portal.LocaleException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.log.Log;
020    import com.liferay.portal.kernel.log.LogFactoryUtil;
021    import com.liferay.portal.kernel.util.StringBundler;
022    import com.liferay.portal.kernel.util.Validator;
023    import com.liferay.portal.kernel.xml.Document;
024    import com.liferay.portal.kernel.xml.Element;
025    import com.liferay.portal.kernel.xml.Node;
026    import com.liferay.portal.kernel.xml.SAXReaderUtil;
027    import com.liferay.portal.service.ServiceContext;
028    import com.liferay.portal.util.PortalUtil;
029    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
030    import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
031    import com.liferay.portlet.expando.model.ExpandoBridge;
032    import com.liferay.portlet.journal.util.JournalConverterUtil;
033    
034    import java.io.Serializable;
035    
036    import java.util.Date;
037    import java.util.HashMap;
038    import java.util.List;
039    import java.util.Locale;
040    import java.util.Map;
041    
042    /**
043     * @author Marcellus Tavares
044     */
045    public class JournalStructureAdapter implements JournalStructure {
046    
047            public JournalStructureAdapter(DDMStructure ddmStructure)
048                    throws SystemException {
049    
050                    _ddmStructure = ddmStructure;
051    
052                    _setXsd(ddmStructure.getXsd());
053            }
054    
055            @Override
056            public Object clone() {
057                    JournalStructureAdapter journalStructureAdapter =
058                            new JournalStructureAdapter();
059    
060                    journalStructureAdapter.setUuid(getUuid());
061                    journalStructureAdapter.setId(getId());
062                    journalStructureAdapter.setGroupId(getGroupId());
063                    journalStructureAdapter.setCompanyId(getCompanyId());
064                    journalStructureAdapter.setUserId(getUserId());
065                    journalStructureAdapter.setUserName(getUserName());
066                    journalStructureAdapter.setCreateDate(getCreateDate());
067                    journalStructureAdapter.setModifiedDate(getModifiedDate());
068                    journalStructureAdapter.setStructureId(getStructureId());
069                    journalStructureAdapter.setParentStructureId(getParentStructureId());
070                    journalStructureAdapter.setName(getName());
071                    journalStructureAdapter.setDescription(getDescription());
072                    journalStructureAdapter.setXsd(getXsd());
073    
074                    return journalStructureAdapter;
075            }
076    
077            @Override
078            public int compareTo(JournalStructure journalStructure) {
079                    String structureId = getStructureId();
080    
081                    int value = structureId.compareTo(journalStructure.getStructureId());
082    
083                    if (value != 0) {
084                            return value;
085                    }
086    
087                    return 0;
088            }
089    
090            @Override
091            public boolean equals(Object obj) {
092                    if (this == obj) {
093                            return true;
094                    }
095    
096                    if (!(obj instanceof JournalStructure)) {
097                            return false;
098                    }
099    
100                    JournalStructure journalStructure = (JournalStructure)obj;
101    
102                    if (Validator.equals(getId(), journalStructure.getId())) {
103                            return true;
104                    }
105    
106                    return false;
107            }
108    
109            @Override
110            public long getCompanyId() {
111                    return _ddmStructure.getCompanyId();
112            }
113    
114            @Override
115            public Date getCreateDate() {
116                    return _ddmStructure.getCreateDate();
117            }
118    
119            @Override
120            public String getDescription() {
121                    return _ddmStructure.getDescription();
122            }
123    
124            @Override
125            public String getDescription(Locale locale) {
126                    return _ddmStructure.getDescription(locale);
127            }
128    
129            @Override
130            public String getDescription(Locale locale, boolean useDefault) {
131                    return _ddmStructure.getDescription(locale, useDefault);
132            }
133    
134            @Override
135            public String getDescription(String languageId) {
136                    return _ddmStructure.getDescription(languageId);
137            }
138    
139            @Override
140            public String getDescription(String languageId, boolean useDefault) {
141                    return _ddmStructure.getDescription(languageId, useDefault);
142            }
143    
144            @Override
145            public String getDescriptionCurrentLanguageId() {
146                    return _ddmStructure.getDescriptionCurrentLanguageId();
147            }
148    
149            @Override
150            public String getDescriptionCurrentValue() {
151                    return _ddmStructure.getDescriptionCurrentValue();
152            }
153    
154            @Override
155            public Map<Locale, String> getDescriptionMap() {
156                    return _ddmStructure.getDescriptionMap();
157            }
158    
159            @Override
160            public ExpandoBridge getExpandoBridge() {
161                    return _ddmStructure.getExpandoBridge();
162            }
163    
164            @Override
165            public long getGroupId() {
166                    return _ddmStructure.getGroupId();
167            }
168    
169            @Override
170            public long getId() {
171                    return _ddmStructure.getStructureId();
172            }
173    
174            @Override
175            public String getMergedXsd() {
176                    String parentStructureId = getParentStructureId();
177    
178                    String xsd = getXsd();
179    
180                    if (Validator.isNull(parentStructureId)) {
181                            return xsd;
182                    }
183    
184                    try {
185                            @SuppressWarnings("deprecation")
186                            JournalStructure parentStructure =
187                                    com.liferay.portlet.journal.service.
188                                            JournalStructureLocalServiceUtil.getStructure(
189                                                    getGroupId(), parentStructureId, true);
190    
191                            Document document = SAXReaderUtil.read(getXsd());
192    
193                            Element rootElement = document.getRootElement();
194    
195                            Document parentDocument = SAXReaderUtil.read(
196                                    parentStructure.getMergedXsd());
197    
198                            Element parentRootElement = parentDocument.getRootElement();
199    
200                            addParentStructureId(parentRootElement, parentStructureId);
201    
202                            List<Node> nodes = rootElement.content();
203    
204                            nodes.addAll(0, parentRootElement.content());
205    
206                            xsd = rootElement.asXML();
207                    }
208                    catch (Exception e) {
209                    }
210    
211                    return xsd;
212            }
213    
214            @Override
215            public Map<String, Object> getModelAttributes() {
216                    Map<String, Object> attributes = new HashMap<String, Object>();
217    
218                    attributes.put("uuid", getUuid());
219                    attributes.put("id", getId());
220                    attributes.put("groupId", getGroupId());
221                    attributes.put("companyId", getCompanyId());
222                    attributes.put("userId", getUserId());
223                    attributes.put("userName", getUserName());
224                    attributes.put("createDate", getCreateDate());
225                    attributes.put("modifiedDate", getModifiedDate());
226                    attributes.put("structureId", getStructureId());
227                    attributes.put("parentStructureId", getParentStructureId());
228                    attributes.put("name", getName());
229                    attributes.put("description", getDescription());
230                    attributes.put("xsd", getXsd());
231    
232                    return attributes;
233            }
234    
235            @Override
236            public Class<?> getModelClass() {
237                    return JournalStructure.class;
238            }
239    
240            @Override
241            public String getModelClassName() {
242                    return JournalStructure.class.getName();
243            }
244    
245            @Override
246            public Date getModifiedDate() {
247                    return _ddmStructure.getModifiedDate();
248            }
249    
250            @Override
251            public String getName() {
252                    return _ddmStructure.getName();
253            }
254    
255            @Override
256            public String getName(Locale locale) {
257                    return _ddmStructure.getName(locale);
258            }
259    
260            @Override
261            public String getName(Locale locale, boolean useDefault) {
262                    return _ddmStructure.getName(locale, useDefault);
263            }
264    
265            @Override
266            public String getName(String languageId) {
267                    return _ddmStructure.getName(languageId);
268            }
269    
270            @Override
271            public String getName(String languageId, boolean useDefault) {
272                    return _ddmStructure.getName(languageId, useDefault);
273            }
274    
275            @Override
276            public String getNameCurrentLanguageId() {
277                    return _ddmStructure.getNameCurrentLanguageId();
278            }
279    
280            @Override
281            public String getNameCurrentValue() {
282                    return _ddmStructure.getNameCurrentValue();
283            }
284    
285            @Override
286            public Map<Locale, String> getNameMap() {
287                    return _ddmStructure.getNameMap();
288            }
289    
290            @Override
291            public String getParentStructureId() {
292                    if (_ddmStructure.getParentStructureId() == 0) {
293                            return null;
294                    }
295    
296                    try {
297                            DDMStructure parentDDMStructure =
298                                    DDMStructureLocalServiceUtil.getStructure(
299                                            _ddmStructure.getParentStructureId());
300    
301                            return parentDDMStructure.getStructureKey();
302                    }
303                    catch (Exception e) {
304                            _log.error(e, e);
305                    }
306    
307                    return null;
308            }
309    
310            @Override
311            public long getPrimaryKey() {
312                    return _ddmStructure.getPrimaryKey();
313            }
314    
315            @Override
316            public Serializable getPrimaryKeyObj() {
317                    return _ddmStructure.getPrimaryKeyObj();
318            }
319    
320            @Override
321            public String getStructureId() {
322                    return _ddmStructure.getStructureKey();
323            }
324    
325            @Override
326            public long getUserId() {
327                    return _ddmStructure.getUserId();
328            }
329    
330            @Override
331            public String getUserName() {
332                    return _ddmStructure.getUserName();
333            }
334    
335            @Override
336            public String getUserUuid() throws SystemException {
337                    return _ddmStructure.getUserUuid();
338            }
339    
340            @Override
341            public String getUuid() {
342                    return _ddmStructure.getUuid();
343            }
344    
345            @Override
346            public String getXsd() {
347                    return _xsd;
348            }
349    
350            @Override
351            public int hashCode() {
352                    return (int)getPrimaryKey();
353            }
354    
355            @Override
356            public boolean isNew() {
357                    return _ddmStructure.isNew();
358            }
359    
360            @Override
361            public void prepareLocalizedFieldsForImport(Locale defaultImportLocale)
362                    throws LocaleException {
363    
364                    _ddmStructure.prepareLocalizedFieldsForImport(defaultImportLocale);
365            }
366    
367            @Override
368            public void setCompanyId(long companyId) {
369                    _ddmStructure.setCompanyId(companyId);
370            }
371    
372            @Override
373            public void setCreateDate(Date createDate) {
374                    _ddmStructure.setCreateDate(createDate);
375            }
376    
377            @Override
378            public void setDescription(String description) {
379                    _ddmStructure.setDescription(description);
380            }
381    
382            @Override
383            public void setDescription(String description, Locale locale) {
384                    _ddmStructure.setDescription(description, locale);
385            }
386    
387            @Override
388            public void setDescription(
389                    String description, Locale locale, Locale defaultLocale) {
390    
391                    _ddmStructure.setDescription(description, locale, defaultLocale);
392            }
393    
394            @Override
395            public void setDescriptionCurrentLanguageId(String languageId) {
396                    _ddmStructure.setDescriptionCurrentLanguageId(languageId);
397            }
398    
399            @Override
400            public void setDescriptionMap(Map<Locale, String> descriptionMap) {
401                    _ddmStructure.setDescriptionMap(descriptionMap);
402            }
403    
404            @Override
405            public void setDescriptionMap(
406                    Map<Locale, String> descriptionMap, Locale defaultLocale) {
407    
408                    _ddmStructure.setDescriptionMap(descriptionMap, defaultLocale);
409            }
410    
411            @Override
412            public void setExpandoBridgeAttributes(ExpandoBridge expandoBridge) {
413                    _ddmStructure.setExpandoBridgeAttributes(expandoBridge);
414            }
415    
416            @Override
417            public void setExpandoBridgeAttributes(JournalStructure journalStructure) {
418                    ExpandoBridge expandoBridge = getExpandoBridge();
419    
420                    ExpandoBridge journalStructureExpandoBridge =
421                            journalStructure.getExpandoBridge();
422    
423                    expandoBridge.setAttributes(
424                            journalStructureExpandoBridge.getAttributes());
425            }
426    
427            @Override
428            public void setExpandoBridgeAttributes(ServiceContext serviceContext) {
429                    _ddmStructure.setExpandoBridgeAttributes(serviceContext);
430            }
431    
432            @Override
433            public void setGroupId(long groupId) {
434                    _ddmStructure.setGroupId(groupId);
435            }
436    
437            @Override
438            public void setId(long id) {
439                    _ddmStructure.setStructureId(id);
440            }
441    
442            @Override
443            public void setModelAttributes(Map<String, Object> attributes) {
444                    String uuid = (String)attributes.get("uuid");
445    
446                    if (uuid != null) {
447                            setUuid(uuid);
448                    }
449    
450                    Long id = (Long)attributes.get("id");
451    
452                    if (id != null) {
453                            setId(id);
454                    }
455    
456                    Long groupId = (Long)attributes.get("groupId");
457    
458                    if (groupId != null) {
459                            setGroupId(groupId);
460                    }
461    
462                    Long companyId = (Long)attributes.get("companyId");
463    
464                    if (companyId != null) {
465                            setCompanyId(companyId);
466                    }
467    
468                    Long userId = (Long)attributes.get("userId");
469    
470                    if (userId != null) {
471                            setUserId(userId);
472                    }
473    
474                    String userName = (String)attributes.get("userName");
475    
476                    if (userName != null) {
477                            setUserName(userName);
478                    }
479    
480                    Date createDate = (Date)attributes.get("createDate");
481    
482                    if (createDate != null) {
483                            setCreateDate(createDate);
484                    }
485    
486                    Date modifiedDate = (Date)attributes.get("modifiedDate");
487    
488                    if (modifiedDate != null) {
489                            setModifiedDate(modifiedDate);
490                    }
491    
492                    String structureId = (String)attributes.get("structureId");
493    
494                    if (structureId != null) {
495                            setStructureId(structureId);
496                    }
497    
498                    String parentStructureId = (String)attributes.get("parentStructureId");
499    
500                    if (parentStructureId != null) {
501                            setParentStructureId(parentStructureId);
502                    }
503    
504                    String name = (String)attributes.get("name");
505    
506                    if (name != null) {
507                            setName(name);
508                    }
509    
510                    String description = (String)attributes.get("description");
511    
512                    if (description != null) {
513                            setDescription(description);
514                    }
515    
516                    String xsd = (String)attributes.get("xsd");
517    
518                    if (xsd != null) {
519                            setXsd(xsd);
520                    }
521            }
522    
523            @Override
524            public void setModifiedDate(Date modifiedDate) {
525                    _ddmStructure.setModifiedDate(modifiedDate);
526            }
527    
528            @Override
529            public void setName(String name) {
530                    _ddmStructure.setName(name);
531            }
532    
533            @Override
534            public void setName(String name, Locale locale) {
535                    _ddmStructure.setName(name, locale);
536            }
537    
538            @Override
539            public void setName(String name, Locale locale, Locale defaultLocale) {
540                    _ddmStructure.setName(name, locale, defaultLocale);
541            }
542    
543            @Override
544            public void setNameCurrentLanguageId(String languageId) {
545                    _ddmStructure.setNameCurrentLanguageId(languageId);
546            }
547    
548            @Override
549            public void setNameMap(Map<Locale, String> nameMap) {
550                    _ddmStructure.setNameMap(nameMap);
551            }
552    
553            @Override
554            public void setNameMap(Map<Locale, String> nameMap, Locale defaultLocale) {
555                    _ddmStructure.setNameMap(nameMap, defaultLocale);
556            }
557    
558            @Override
559            public void setNew(boolean n) {
560                    _ddmStructure.setNew(n);
561            }
562    
563            @Override
564            public void setParentStructureId(String parentStructureId) {
565                    if (parentStructureId == null) {
566                            _ddmStructure.setParentStructureId(0);
567                    }
568    
569                    try {
570                            DDMStructure parentDDMStructure =
571                                    DDMStructureLocalServiceUtil.getStructure(
572                                            getGroupId(),
573                                            PortalUtil.getClassNameId(JournalArticle.class.getName()),
574                                            parentStructureId);
575    
576                            _ddmStructure.setParentStructureId(
577                                    parentDDMStructure.getStructureId());
578                    }
579                    catch (Exception e) {
580                            _log.error(e, e);
581                    }
582            }
583    
584            @Override
585            public void setPrimaryKey(long primaryKey) {
586                    _ddmStructure.setPrimaryKey(primaryKey);
587            }
588    
589            @Override
590            public void setPrimaryKeyObj(Serializable primaryKeyObj) {
591                    _ddmStructure.setPrimaryKeyObj(primaryKeyObj);
592            }
593    
594            @Override
595            public void setStructureId(String structureId) {
596                    _ddmStructure.setStructureKey(structureId);
597            }
598    
599            @Override
600            public void setUserId(long userId) {
601                    _ddmStructure.setUserId(userId);
602            }
603    
604            @Override
605            public void setUserName(String userName) {
606                    _ddmStructure.setUserName(userName);
607            }
608    
609            @Override
610            public void setUserUuid(String userUuid) {
611                    _ddmStructure.setUserUuid(userUuid);
612            }
613    
614            @Override
615            public void setUuid(String uuid) {
616                    _ddmStructure.setUuid(uuid);
617            }
618    
619            @Override
620            public void setXsd(String xsd) {
621                    _xsd = xsd;
622            }
623    
624            @Override
625            public String toString() {
626                    StringBundler sb = new StringBundler(27);
627    
628                    sb.append("{uuid=");
629                    sb.append(getUuid());
630                    sb.append(", id=");
631                    sb.append(getId());
632                    sb.append(", groupId=");
633                    sb.append(getGroupId());
634                    sb.append(", companyId=");
635                    sb.append(getCompanyId());
636                    sb.append(", userId=");
637                    sb.append(getUserId());
638                    sb.append(", userName=");
639                    sb.append(getUserName());
640                    sb.append(", createDate=");
641                    sb.append(getCreateDate());
642                    sb.append(", modifiedDate=");
643                    sb.append(getModifiedDate());
644                    sb.append(", structureId=");
645                    sb.append(getStructureId());
646                    sb.append(", parentStructureId=");
647                    sb.append(getParentStructureId());
648                    sb.append(", name=");
649                    sb.append(getName());
650                    sb.append(", description=");
651                    sb.append(getDescription());
652                    sb.append(", xsd=");
653                    sb.append(getXsd());
654                    sb.append("}");
655    
656                    return sb.toString();
657            }
658    
659            protected void addParentStructureId(
660                    Element parentElement, String parentStructureId) {
661    
662                    List<Element> dynamicElementElements = parentElement.elements(
663                            "dynamic-element");
664    
665                    for (Element dynamicElementElement : dynamicElementElements) {
666                            dynamicElementElement.addAttribute(
667                                    "parent-structure-id", parentStructureId);
668    
669                            addParentStructureId(dynamicElementElement, parentStructureId);
670                    }
671            }
672    
673            private JournalStructureAdapter() {
674            }
675    
676            private void _setXsd(String ddmXsd) throws SystemException {
677                    if (Validator.isNull(ddmXsd)) {
678                            return;
679                    }
680    
681                    try {
682                            _xsd = JournalConverterUtil.getJournalXSD(ddmXsd);
683                    }
684                    catch (Exception e) {
685                            throw new SystemException(e);
686                    }
687            }
688    
689            private static Log _log = LogFactoryUtil.getLog(
690                    JournalStructureAdapter.class);
691    
692            private DDMStructure _ddmStructure;
693            private String _xsd;
694    
695    }