Java tutorial
/* * Weblounge: Web Content Management System * Copyright (c) 2003 - 2011 The Weblounge Team * http://entwinemedia.com/weblounge * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package ch.entwine.weblounge.common.impl.content; import ch.entwine.weblounge.common.content.ResourceContent; import ch.entwine.weblounge.common.language.Language; import ch.entwine.weblounge.common.security.User; import org.apache.commons.lang.StringUtils; import java.net.URL; import java.util.Date; /** * Default implementation of a resource content. */ public class ResourceContentImpl implements ResourceContent { /** The content's name */ protected String filename = null; /** The content's source */ protected String source = null; /** The content's external location */ protected URL externalLocation = null; /** author of the picture */ protected String author = null; /** The file's mime type */ protected String mimetype = null; /** The file size in bytes */ protected long size = -1L; /** The content's language */ protected Language language = null; /** Creation information */ protected CreationContext creationCtx = new CreationContext(); /** True if this is the original content */ protected boolean isOriginal = false; /** * Creates a new resource content representation. */ protected ResourceContentImpl() { } /** * Creates a new resource content representation. * * @param language * the content language * @param name * the content name */ protected ResourceContentImpl(Language language, String name) { if (language == null) throw new IllegalArgumentException("Language cannot be null"); this.language = language; this.filename = name; } /** * Creates a new resource content representation. * * @param language * the content language * @param name * the content name * @param mimetype * the content's mimetype * @param size * the content size in bytes */ protected ResourceContentImpl(Language language, String name, String mimetype, long size) { if (language == null) throw new IllegalArgumentException("Language cannot be null"); this.language = language; this.filename = name; this.mimetype = mimetype; this.size = size; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setFilename(java.lang.String) */ public void setFilename(String name) { this.filename = name; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getFilename() */ public String getFilename() { return filename; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setSource(java.lang.String) */ public void setSource(String source) { this.source = source; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getSource() */ public String getSource() { return source; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setExternalLocation(java.net.URL) */ public void setExternalLocation(URL externalLocation) { this.externalLocation = externalLocation; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getExternalLocation() */ public URL getExternalLocation() { return externalLocation; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setAuthor(java.lang.String) */ public void setAuthor(String author) { this.author = author; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getAuthor() */ public String getAuthor() { return author; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setLanguage(ch.entwine.weblounge.common.language.Language) */ public void setLanguage(Language language) { if (language == null) throw new IllegalArgumentException("Language must not be null"); this.language = language; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getLanguage() */ public Language getLanguage() { return language; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#setCreationDate(java.util.Date) */ public void setCreationDate(Date date) { creationCtx.setCreationDate(date); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#getCreationDate() */ public Date getCreationDate() { return creationCtx.getCreationDate(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#isCreatedAfter(java.util.Date) */ public boolean isCreatedAfter(Date date) { return creationCtx.isCreatedAfter(date); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#setCreator(ch.entwine.weblounge.common.security.User) */ public void setCreator(User user) { creationCtx.setCreator(user); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#getCreator() */ public User getCreator() { return creationCtx.getCreator(); } /** * Sets the creation date and the user who created the content. * * @param date * the creation date * @param user * the creator */ public void setCreated(Date date, User user) { creationCtx.setCreated(user, date); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setMimetype(java.lang.String) */ public void setMimetype(String mimetype) { if (mimetype == null) throw new IllegalArgumentException("Mimetype must not be null"); this.mimetype = mimetype; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getMimetype() */ public String getMimetype() { return mimetype; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#setSize(long) */ public void setSize(long size) { if (size <= 0) throw new IllegalArgumentException("Content size must be greater than 0 bytes"); this.size = size; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#getSize() */ public long getSize() { return size; } /** * {@inheritDoc} * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return super.hashCode(); } /** * {@inheritDoc} * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj instanceof ResourceContent) { ResourceContent c = (ResourceContent) obj; if (!StringUtils.trimToEmpty(filename).equals(StringUtils.trimToEmpty(c.getFilename()))) return false; if (!StringUtils.trimToEmpty(author).equals(StringUtils.trimToEmpty(c.getAuthor()))) return false; return language.equals(c.getLanguage()); } return false; } /** * Callback for subclasses that need to add additional information to the file * content representation. Implementations should append their data to the * <code>StringBuffer</code> and return it once they're done. * * @param xml * the string buffer * @return the modified string buffer */ protected StringBuffer extendXml(StringBuffer xml) { return xml; } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.ResourceContent#toXml() */ public String toXml() { StringBuffer buf = new StringBuffer(); buf.append("<content language=\"").append(getLanguage().getIdentifier()).append("\">"); buf.append(creationCtx.toXml()); if (filename != null) buf.append("<filename><![CDATA[").append(filename).append("]]></filename>"); if (source != null) buf.append("<source>").append(source).append("</source>"); if (externalLocation != null) buf.append("<external>").append(externalLocation).append("</external>"); if (!StringUtils.isBlank(author)) buf.append("<author><![CDATA[").append(author).append("]]></author>"); if (mimetype != null) buf.append("<mimetype>").append(mimetype).append("</mimetype>"); if (size >= 0) buf.append("<size>").append(size).append("</size>"); extendXml(buf); buf.append("</content>"); return buf.toString(); } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ @Override public String toString() { if (filename != null) { return filename; } else { StringBuffer buf = new StringBuffer(language.toString().toLowerCase()); buf.append(" content"); return buf.toString(); } } }