/* * 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.workbench; import ch.entwine.weblounge.common.content.page.Pagelet; import ch.entwine.weblounge.common.content.page.PageletURI; import ch.entwine.weblounge.common.language.Language; import ch.entwine.weblounge.common.language.Localizable; import ch.entwine.weblounge.common.security.Authority; import ch.entwine.weblounge.common.security.Permission; import ch.entwine.weblounge.common.security.PermissionSet; import ch.entwine.weblounge.common.security.SecurityListener; import ch.entwine.weblounge.common.security.User; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; /** * Wrapper around a {@link ch.entwine.weblounge.common.content.page.Pagelet} * that will replace pagelet contents and properties with their trimpath * equivalents. */ public class TrimpathPageletWrapper implements Pagelet { /** The wrapped pagelet */ protected Pagelet pagelet = null; /** * Creates a new wrapper around <code>pagelet</code>. * * @param pagelet * the pagelet */ public TrimpathPageletWrapper(Pagelet pagelet) { this.pagelet = pagelet; } /** * Returns the trimpath expression for the element with name * <code>element</code>. * * @param element * the element name * @param language * the language * @param force * whether to force the language * @return the trimpath expression */ protected String replaceContent(String element, Language language, boolean force) { StringBuilder sb = new StringBuilder(); sb.append("${ locale.current.text.").append(element).append(" }"); return sb.toString(); } /** * Returns the trimpath expression for the multivalued element with name * <code>element</code>. * * @param element * the element name * @param language * the language * @param force * whether to force the language * @return the trimpath expression */ protected String[] replaceMultivalueContent(String element, Language language, boolean force) { List<String> replacements = new ArrayList<String>(); for (int i = 0; i < pagelet.getMultiValueContent(element, language, force).length; i++) { StringBuilder sb = new StringBuilder(); sb.append("${ locale.current.text.").append(element).append("[").append(i).append("] }"); replacements.add(sb.toString()); } return replacements.toArray(new String[replacements.size()]); } /** * Returns the trimpath expression for the property with name * <code>property</code>. * * @param property * the property name * @return the trimpath expression */ protected String replaceProperty(String property) { StringBuilder sb = new StringBuilder(); sb.append("${ properties.property.").append(property).append(" }"); return sb.toString(); } /** * Returns the trimpath expression for the property with name * <code>property</code>. * * @param property * the property name * @return the trimpath expression */ protected String[] replaceMultivalueProperty(String property) { List<String> replacements = new ArrayList<String>(); for (int i = 0; i < pagelet.getMultiValueProperty(property).length; i++) { StringBuilder sb = new StringBuilder(); sb.append("${ properties.property.").append(property).append("[").append(i).append("] }"); replacements.add(sb.toString()); } return replacements.toArray(new String[replacements.size()]); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#setOwner(ch.entwine.weblounge.common.security.User) */ public void setOwner(User owner) { pagelet.setOwner(owner); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Publishable#getPublisher() */ public User getPublisher() { return pagelet.getPublisher(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#setCreationDate(java.util.Date) */ public void setCreationDate(Date date) { pagelet.setCreationDate(date); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#getOwner() */ public User getOwner() { return pagelet.getOwner(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Publishable#getPublishFrom() */ public Date getPublishFrom() { return pagelet.getPublishFrom(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#allow(ch.entwine.weblounge.common.security.Permission, * ch.entwine.weblounge.common.security.Authority) */ public void allow(Permission permission, Authority authority) { pagelet.allow(permission, authority); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#setCreator(ch.entwine.weblounge.common.security.User) */ public void setCreator(User user) { pagelet.setCreator(user); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#getCreationDate() */ public Date getCreationDate() { return pagelet.getCreationDate(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.LocalizedModifiable#getLastModificationDate() */ public Date getLastModificationDate() { return pagelet.getLastModificationDate(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#isCreatedAfter(java.util.Date) */ public boolean isCreatedAfter(Date date) { return pagelet.isCreatedAfter(date); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Publishable#getPublishTo() */ public Date getPublishTo() { return pagelet.getPublishTo(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.LocalizedModifiable#getLastModifier() */ public User getLastModifier() { return pagelet.getLastModifier(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#deny(ch.entwine.weblounge.common.security.Permission, * ch.entwine.weblounge.common.security.Authority) */ public void deny(Permission permission, Authority authority) { pagelet.deny(permission, authority); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Publishable#isPublished() */ public boolean isPublished() { return pagelet.isPublished(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Creatable#getCreator() */ public User getCreator() { return pagelet.getCreator(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.LocalizedModifiable#getModificationDate(ch.entwine.weblounge.common.language.Language) */ public Date getModificationDate(Language language) { return pagelet.getModificationDate(language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getModule() */ public String getModule() { return pagelet.getModule(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.Publishable#isPublished(java.util.Date) */ public boolean isPublished(Date date) { return pagelet.isPublished(date); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getIdentifier() */ public String getIdentifier() { return pagelet.getIdentifier(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#check(ch.entwine.weblounge.common.security.Permission, * ch.entwine.weblounge.common.security.Authority) */ public boolean check(Permission permission, Authority authority) { return pagelet.check(permission, authority); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getPropertyNames() */ public String[] getPropertyNames() { return pagelet.getPropertyNames(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.LocalizedModifiable#getModifier(ch.entwine.weblounge.common.language.Language) */ public User getModifier(Language language) { return pagelet.getModifier(language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#addProperty(java.lang.String, * java.lang.String) */ public void addProperty(String key, String value) { pagelet.addProperty(key, value); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setProperty(java.lang.String, * java.lang.String) */ public void setProperty(String key, String value) { pagelet.setProperty(key, value); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#removeProperty(java.lang.String) */ public void removeProperty(String key) { pagelet.removeProperty(key); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.LocalizedModifiable#getModificationDate() */ public Date getModificationDate() { return pagelet.getModificationDate(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.language.Localizable#supportsLanguage(ch.entwine.weblounge.common.language.Language) */ public boolean supportsLanguage(Language language) { return pagelet.supportsLanguage(language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#check(ch.entwine.weblounge.common.security.PermissionSet, * ch.entwine.weblounge.common.security.Authority) */ public boolean check(PermissionSet permissions, Authority authority) { return pagelet.check(permissions, authority); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getProperty(java.lang.String) */ public String getProperty(String key) { return replaceProperty(key); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#isMultiValueProperty(java.lang.String) */ public boolean isMultiValueProperty(String key) { return pagelet.isMultiValueProperty(key); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.language.Localizable#languages() */ public Set<Language> languages() { return pagelet.languages(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.LocalizedModifiable#getModifier() */ public User getModifier() { return pagelet.getModifier(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#checkOne(ch.entwine.weblounge.common.security.Permission, * ch.entwine.weblounge.common.security.Authority[]) */ public boolean checkOne(Permission permission, Authority[] authorities) { return pagelet.checkOne(permission, authorities); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setContent(java.lang.Object) */ public void setContent(Object content) { pagelet.setContent(content); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getContent() */ public Object getContent() { return pagelet.getContent(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getMultiValueProperty(java.lang.String) */ public String[] getMultiValueProperty(String key) { return replaceMultivalueProperty(key); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.language.Localizable#switchTo(ch.entwine.weblounge.common.language.Language) */ public Language switchTo(Language language) { return pagelet.switchTo(language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#checkAll(ch.entwine.weblounge.common.security.Permission, * ch.entwine.weblounge.common.security.Authority[]) */ public boolean checkAll(Permission permission, Authority[] authorities) { return pagelet.checkAll(permission, authorities); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getContentNames(ch.entwine.weblounge.common.language.Language) */ public String[] getContentNames(Language language) { return pagelet.getContentNames(language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setContent(java.lang.String, * java.lang.String, ch.entwine.weblounge.common.language.Language) */ public void setContent(String name, String value, Language language) { pagelet.setContent(name, value, language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#permissions() */ public Permission[] permissions() { return pagelet.permissions(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.language.Localizable#compareTo(ch.entwine.weblounge.common.language.Localizable, * ch.entwine.weblounge.common.language.Language) */ public int compareTo(Localizable o, Language l) { return pagelet.compareTo(o, l); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#addSecurityListener(ch.entwine.weblounge.common.security.SecurityListener) */ public void addSecurityListener(SecurityListener listener) { pagelet.addSecurityListener(listener); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.security.Securable#removeSecurityListener(ch.entwine.weblounge.common.security.SecurityListener) */ public void removeSecurityListener(SecurityListener listener) { pagelet.removeSecurityListener(listener); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#isMultiValueContent(java.lang.String) */ public boolean isMultiValueContent(String name) { return pagelet.isMultiValueContent(name); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getMultiValueContent(java.lang.String, * ch.entwine.weblounge.common.language.Language, boolean) */ public String[] getMultiValueContent(String name, Language language, boolean force) { return replaceMultivalueContent(name, language, force); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getMultiValueContent(java.lang.String, * ch.entwine.weblounge.common.language.Language) */ public String[] getMultiValueContent(String name, Language language) { return replaceMultivalueContent(name, language, false); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getMultiValueContent(java.lang.String) */ public String[] getMultiValueContent(String name) { return replaceMultivalueContent(name, null, false); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.language.Localizable#toString(ch.entwine.weblounge.common.language.Language) */ public String toString(Language language) { return pagelet.toString(language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getContent(java.lang.String, * ch.entwine.weblounge.common.language.Language) */ public String getContent(String name, Language language) { return replaceContent(name, language, false); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.language.Localizable#toString(ch.entwine.weblounge.common.language.Language, * boolean) */ public String toString(Language language, boolean force) { return pagelet.toString(language, force); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getContent(java.lang.String, * ch.entwine.weblounge.common.language.Language, boolean) */ public String getContent(String name, Language language, boolean force) { return replaceContent(name, language, force); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getContent(java.lang.String) */ public String getContent(String name) { return replaceContent(name, null, false); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setURI(ch.entwine.weblounge.common.content.page.PageletURI) */ public void setURI(PageletURI uri) { pagelet.setURI(uri); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#getURI() */ public PageletURI getURI() { return pagelet.getURI(); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setCreated(ch.entwine.weblounge.common.security.User, * java.util.Date) */ public void setCreated(User creator, Date creationDate) { pagelet.setCreated(creator, creationDate); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setModified(ch.entwine.weblounge.common.security.User, * java.util.Date, ch.entwine.weblounge.common.language.Language) */ public void setModified(User user, Date date, Language language) { pagelet.setModified(user, date, language); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#setPublished(ch.entwine.weblounge.common.security.User, * java.util.Date, java.util.Date) */ public void setPublished(User publisher, Date from, Date to) { pagelet.setPublished(publisher, from, to); } /** * {@inheritDoc} * * @see ch.entwine.weblounge.common.content.page.Pagelet#toXml() */ public String toXml() { return pagelet.toXml(); } }