Java tutorial
/* * Copyright (c) 2002-2014, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.document.business; import fr.paris.lutece.plugins.document.business.attributes.DocumentAttribute; import fr.paris.lutece.plugins.document.business.category.Category; import fr.paris.lutece.plugins.document.business.publication.DocumentPublication; import fr.paris.lutece.plugins.document.business.publication.DocumentPublicationHome; import fr.paris.lutece.portal.business.resourceenhancer.ResourceEnhancer; import fr.paris.lutece.portal.service.i18n.I18nService; import fr.paris.lutece.portal.service.i18n.Localizable; import fr.paris.lutece.portal.service.resource.IExtendableResource; import fr.paris.lutece.portal.service.util.AppPropertiesService; import fr.paris.lutece.util.date.DateUtil; import fr.paris.lutece.util.url.UrlItem; import fr.paris.lutece.util.xml.XmlUtil; import org.apache.commons.lang.StringUtils; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; import javax.servlet.http.HttpServletRequest; /** * A document of the CMS. */ public class Document implements Localizable, IExtendableResource { public static final String CODE_DOCUMENT_TYPE_DOWNLOAD = "download"; public static final String CODE_DOCUMENT_TYPE_IMAGE = "image"; public static final String PROPERTY_RESOURCE_TYPE = "document"; private static final String SERVLET_DOCUMENT_PATH = "document"; private static final String PROPERTY_DEFAULT_THUMBNAIL = "document.thumbnail.default"; private static final String PROPERTY_RESOURCE_PROVIDER_URL = "document.resource.provider.url"; ///////////////////////////////////////////////////////////////////////////////// // Xml Tags private static final String TAG_DOCUMENT = "document"; private static final String TAG_DOCUMENT_ID = "document-id"; private static final String TAG_DATE_PUBLICATION = "document-date-publication"; private static final String TAG_DOCUMENT_XML_CONTENT = "document-xml-content"; private static final String MARK_ID = "id"; private static final String MARK_ID_ATTRIBUTE = "id_attribute"; private static final String EMPTY_STRING = ""; private static final String CONSTANT_QUESTION_MARK = "?"; private static final String CONSTANT_EQUALS = "="; // Variables declarations private int _nIdDocument; private String _strCodeDocumentType; private String _strType; private String _strTitle; private String _strSummary; private int _nIdCreator; private int _nIdMailingList; private java.sql.Timestamp _dateCreation; private java.sql.Timestamp _dateModification; private java.sql.Timestamp _dateValidityBegin; private java.sql.Timestamp _dateValidityEnd; private String _strComment; private String _strXmlWorkingContent; private String _strXmlValidatedContent; private String _strXmlMetadata; private int _nIdSpace; private int _nIdPageTemplateDocument; private int _nPublishedStatus; private String _strSpace; private int _nIdState; private String _strState; private List<DocumentAttribute> _listAttributes; private Locale _locale; private List _listActions; private List<Category> _listCategories; /** * Returns the IdDocument * * @return The IdDocument */ public int getId() { return _nIdDocument; } /** * Sets the IdDocument * * @param nIdDocument The IdDocument */ public void setId(int nIdDocument) { _nIdDocument = nIdDocument; } /** * Returns the Locale * * @return The Locale */ public Locale getLocale() { return I18nService.getDefaultLocale(); //FIXME The document should store its locale } /** * Sets the Locale * * @param locale The Locale */ @Override public void setLocale(Locale locale) { _locale = locale; } /** * Returns the CodeDocumentType * * @return The CodeDocumentType */ public String getCodeDocumentType() { return _strCodeDocumentType; } /** * Sets the CodeDocumentType * * @param strCodeDocumentType The CodeDocumentType */ public void setCodeDocumentType(String strCodeDocumentType) { _strCodeDocumentType = strCodeDocumentType; } /** * Returns the Title * * @return The Title */ public String getTitle() { return _strTitle; } /** * Sets the Title * * @param strTitle The Title */ public void setTitle(String strTitle) { _strTitle = strTitle; } /** * Returns the Summary * * @return The Summary */ public String getSummary() { return (_strSummary != null) ? _strSummary : EMPTY_STRING; } /** * Sets the Summary * * @param strSummary The Summary */ public void setSummary(String strSummary) { _strSummary = strSummary; } /** * Returns the DateCreation * * @return The DateCreation */ public java.sql.Timestamp getDateCreation() { return _dateCreation; } /** * Sets the DateCreation * * @param dateCreation The DateCreation */ public void setDateCreation(java.sql.Timestamp dateCreation) { _dateCreation = dateCreation; } /** * Returns the IdCreator * * @return The IdCreator */ public int getCreatorId() { return _nIdCreator; } /** * Sets the IdCreator * * @param nIdCreator The IdCreator */ public void setCreatorId(int nIdCreator) { _nIdCreator = nIdCreator; } /** * Returns the Date of the last Modification * * @return The Date of the last Modification */ public java.sql.Timestamp getDateModification() { return _dateModification; } /** * Sets the Date of the last Modification * * @param dateModification The Date of the last Modification */ public void setDateModification(java.sql.Timestamp dateModification) { _dateModification = dateModification; } /** * Returns the begining Date of the validity period of the document * * @return The begining Date of the validity period of the document */ public java.sql.Timestamp getDateValidityBegin() { return _dateValidityBegin; } /** * Sets the begining Date of the validity period of the document * * @param dateValidityBegin The begining Date of the validity period of the * document */ public void setDateValidityBegin(java.sql.Timestamp dateValidityBegin) { _dateValidityBegin = dateValidityBegin; } /** * Returns the end Date of the validity period of the document * * @return The end Date of the validity period of the document */ public java.sql.Timestamp getDateValidityEnd() { return _dateValidityEnd; } /** * Sets the end Date of the validity period of the document * * @param dateValidityEnd The end Date of the validity period of the * document */ public void setDateValidityEnd(java.sql.Timestamp dateValidityEnd) { _dateValidityEnd = dateValidityEnd; } /** * Returns the Comment * * @return The Comment */ public String getComment() { return (_strComment != null) ? _strComment : EMPTY_STRING; } /** * Sets the Comment * * @param strComment The Comment */ public void setComment(String strComment) { _strComment = strComment; } /** * Returns the XmlWorkingContent * * @return The XmlWorkingContent */ public String getXmlWorkingContent() { return _strXmlWorkingContent; } /** * Sets the XmlWorkingContent * * @param strXmlWorkingContent The XmlWorkingContent */ public void setXmlWorkingContent(String strXmlWorkingContent) { _strXmlWorkingContent = strXmlWorkingContent; } /** * Returns the XmlValidatedContent * * @return The XmlValidatedContent */ public String getXmlValidatedContent() { return _strXmlValidatedContent; } /** * Sets the XmlValidatedContent * * @param strXmlValidatedContent The XmlValidatedContent */ public void setXmlValidatedContent(String strXmlValidatedContent) { _strXmlValidatedContent = strXmlValidatedContent; } /** * Returns the XmlMetadata * * @return The XmlMetadata */ public String getXmlMetadata() { return _strXmlMetadata; } /** * Sets the XmlMetadata * * @param strXmlMetadata The XmlMetadata */ public void setXmlMetadata(String strXmlMetadata) { _strXmlMetadata = strXmlMetadata; } /** * Returns the IdSpace * * @return The IdSpace */ public int getSpaceId() { return _nIdSpace; } /** * Sets the IdSpace * * @param nIdSpace The IdSpace */ public void setSpaceId(int nIdSpace) { _nIdSpace = nIdSpace; } /** * Returns the Space * * @return The Space */ public String getSpace() { return _strSpace; } /** * Sets the Space * * @param strSpace The Space */ public void setSpace(String strSpace) { _strSpace = strSpace; } /** * Returns the IdState * * @return The IdState */ public int getStateId() { return _nIdState; } /** * Sets the IdState * * @param nIdState The IdState */ public void setStateId(int nIdState) { _nIdState = nIdState; } /** * Returns the State * * @return The State */ public String getStateKey() { return _strState; } /** * Returns the State * * @return The State */ public String getState() { return I18nService.getLocalizedString(_strState, _locale); } /** * Sets the State * * @param strState The State */ public void setStateKey(String strState) { _strState = strState; } /** * Returns the IdMailingList * * @return The IdMailingList */ public int getMailingListId() { return _nIdMailingList; } /** * Sets the IdMailingList * * @param nIdMailingList The IdMailingList */ public void setMailingListId(int nIdMailingList) { _nIdMailingList = nIdMailingList; } /** * Returns the IdPageTemplateDocument * * @return The IdPageTemplateDocument */ public int getPageTemplateDocumentId() { return _nIdPageTemplateDocument; } /** * Sets the IdPageTemplateDocument * * @param nIdPageTemplateDocument The IdPageTemplateDocument */ public void setPageTemplateDocumentId(int nIdPageTemplateDocument) { _nIdPageTemplateDocument = nIdPageTemplateDocument; } /** * Returns attributes List * @return The document attributes list */ public List<DocumentAttribute> getAttributes() { return _listAttributes; } /** * Set the document attributes list * @param listAttributes The document attributes list */ public void setAttributes(List<DocumentAttribute> listAttributes) { _listAttributes = listAttributes; } /** * Returns Actions List * @return The document Actions list */ public List getActions() { return _listActions; } /** * Set the document Actions list * @param listActions The document Actions list */ public void setActions(List listActions) { _listActions = listActions; } /** * Returns the Type * * @return The Type */ public String getType() { return _strType; } /** * Sets the Type * * @param strType The Type */ public void setType(String strType) { _strType = strType; } /** * @return the _listCategory */ public List<Category> getCategories() { return _listCategories; } /** * @param listCategory the _listCategory to set */ public void setCategories(List<Category> listCategory) { _listCategories = listCategory; } /** * @param nPublishedStatus the nPublishedStatus to set */ public void setPublishedStatus(int nPublishedStatus) { _nPublishedStatus = nPublishedStatus; } /** * Returns the PublishedSTatus * * @return The PublishedSTatus */ public int getPublishedStatus() { return _nPublishedStatus; } /** * Returns a Thumbnail url for the document based on a document attribute or * on the document type. * @return A Thumbnail url */ public String getThumbnail() { String strThumbnailUrl = AppPropertiesService.getProperty(PROPERTY_DEFAULT_THUMBNAIL); String strResourceUrl = AppPropertiesService.getProperty(PROPERTY_RESOURCE_PROVIDER_URL); DocumentType documentType = DocumentTypeHome.findByPrimaryKey(getCodeDocumentType()); if (documentType.getThumbnailAttributeId() != 0) { strThumbnailUrl = strResourceUrl + getId(); } else if (!documentType.getDefaultThumbnailUrl().equals("")) { strThumbnailUrl = documentType.getDefaultThumbnailUrl(); } return strThumbnailUrl; } //////////////////////////////////////////////////////////////////////////// // XML Generation /** * Returns the xml of this document * @param request The HTTP Servlet request * @param nIdPortlet the id of the portlet where the document is published * @return the link xml */ public String getXml(HttpServletRequest request, int nIdPortlet) { StringBuffer strXml = new StringBuffer(); XmlUtil.beginElement(strXml, TAG_DOCUMENT); XmlUtil.addElement(strXml, TAG_DOCUMENT_ID, Integer.toString(getId())); if (nIdPortlet != -1) { DocumentPublication publication = DocumentPublicationHome.findByPrimaryKey(nIdPortlet, getId()); String strDate = DateUtil.getDateString(publication.getDatePublishing(), getLocale()); XmlUtil.addElement(strXml, TAG_DATE_PUBLICATION, strDate); } XmlUtil.addElement(strXml, TAG_DOCUMENT_XML_CONTENT, getXmlValidatedContent()); // additionnal info ResourceEnhancer.getXmlAddOn(strXml, PROPERTY_RESOURCE_TYPE, getId()); XmlUtil.endElement(strXml, TAG_DOCUMENT); return strXml.toString(); } /** * Returns the xml document of this link * * @param nIdPortlet the id of the portlet where the document is published * @param request The HTTP servlet request * @return the link xml document */ public String getXmlDocument(HttpServletRequest request, int nIdPortlet) { return XmlUtil.getXmlHeader() + getXml(request, nIdPortlet); } /** * Returns a document attribute by its code * @param strAttributeCode The Attribute Code * @return the attribute object corresponding to the code */ public DocumentAttribute getAttribute(String strAttributeCode) { if (_listAttributes != null) { for (DocumentAttribute attribute : _listAttributes) { if (attribute.getCode().equals(strAttributeCode)) { return attribute; } } } return null; } /** * Control that an document is valid, i.e. that its period of validity * defined * by its dateValidityBegin and its dateValidityEnd is valid : * an document is valid if the current date > = dateValidityBegin and if * current date < = dateValidityEnd * If the two dates are null, the test of validity will return true * if one of the dates is null, the result of the test will be that carried * out * on the non null date * @return true if the document is valid, false otherwise */ public boolean isValid() { java.sql.Timestamp dateValidityBegin = getDateValidityBegin(); java.sql.Timestamp dateValidityEnd = getDateValidityEnd(); GregorianCalendar gc = new GregorianCalendar(); java.sql.Date dateToday = new java.sql.Date(gc.getTime().getTime()); if ((dateValidityBegin == null) && (dateValidityEnd == null)) { return true; } else if (dateValidityBegin == null) { // Return true if dateValidityEnd >= DateToday, false otherwise : return (dateValidityEnd.compareTo(dateToday) >= 0); } else if (dateValidityEnd == null) { // Return true if dateValidityBegin <= DateToday, false otherwise : return (dateValidityBegin.compareTo(dateToday) <= 0); } else { // Return true if dateValidityBegin <= dateToday <= dateValidityEnd, false // otherwise : return ((dateValidityBegin.compareTo(dateToday) <= 0) && (dateValidityEnd.compareTo(dateToday) >= 0)); } } /** * Control that an document is out of date, i.e. dateValidityEnd has expired * : * @return true if the document is out of date, false otherwise */ public boolean isOutOfDate() { if (getDateValidityEnd() == null) { return false; } // Return false if dateValidityEnd >= DateToday, true otherwise : return !(getDateValidityEnd().compareTo(new Date()) >= 0); } /** * {@inheritDoc} */ @Override public String getIdExtendableResource() { return Integer.toString(_nIdDocument); } /** * {@inheritDoc} */ @Override public String getExtendableResourceType() { return PROPERTY_RESOURCE_TYPE; } /** * {@inheritDoc} */ @Override public String getExtendableResourceName() { return _strTitle; } /** * {@inheritDoc} */ @Override public String getExtendableResourceDescription() { return _strSummary; } /** * {@inheritDoc} */ @Override public String getExtendableResourceImageUrl() { if (StringUtils.equalsIgnoreCase(_strCodeDocumentType, CODE_DOCUMENT_TYPE_IMAGE)) { UrlItem urlItem = new UrlItem(SERVLET_DOCUMENT_PATH); urlItem.addParameter(MARK_ID, _nIdDocument); return urlItem.getUrl(); } if (_listAttributes != null) { for (DocumentAttribute attribute : _listAttributes) { if (StringUtils.equals(attribute.getCodeAttributeType(), "image")) { UrlItem urlItem = new UrlItem(SERVLET_DOCUMENT_PATH); urlItem.addParameter(MARK_ID, _nIdDocument); urlItem.addParameter(MARK_ID_ATTRIBUTE, attribute.getId()); return urlItem.getUrl(); } } } return null; } }