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