/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This 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.1 of * the License, or (at your option) any later version. * * This software 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 software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.resource.entity; import java.util.Locale; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.xwiki.model.reference.EntityReference; import org.xwiki.resource.AbstractResourceReference; import org.xwiki.resource.ResourceType; import org.xwiki.text.XWikiToStringBuilder; /** * Represents an XWiki Resource Reference pointing to an Entity (Document, Space, Wiki, Object, etc). * * @version $Id: 09786643d719cfc976b04e434e509489f96cf1d0 $ * @since 6.1M2 */ public class EntityResourceReference extends AbstractResourceReference { /** * Represents an Entity Resource Type. */ public static final ResourceType TYPE = new ResourceType("entity"); /** * The parameter name that represents a version of the entity. */ private static final String REVISION_PARAMETER_NAME = "rev"; /** * @see #getEntityReference() */ private EntityReference entityReference; /** * @see #getLocale() */ private Locale locale; /** * @see #getAction() */ private EntityResourceAction action; /** * @param entityReference the entity reference being wrapped * @param action the instance representing the technical Action id (e.g. View, Download, etc) */ public EntityResourceReference(EntityReference entityReference, EntityResourceAction action) { setType(TYPE); setEntityReference(entityReference); setAction(action); } /** * @return the action requested on this resource (e.g. View, Download, Edit, etc) */ public EntityResourceAction getAction() { return this.action; } /** * @param action see {@link #getAction()} */ public void setAction(EntityResourceAction action) { this.action = action; } /** * @return the wrapped entity reference */ public EntityReference getEntityReference() { return this.entityReference; } /** * @param entityReference see {@link #getEntityReference()} */ public void setEntityReference(EntityReference entityReference) { this.entityReference = entityReference; } /** * @param locale see {@link #getLocale()} */ public void setLocale(Locale locale) { this.locale = locale; } /** * @return the locale of the entity */ public Locale getLocale() { return this.locale; } /** * @param revision see {@link #getRevision()} */ public void setRevision(String revision) { addParameter(REVISION_PARAMETER_NAME, revision); } /** * @return the version of the resource (eg "2.1", etc) */ public String getRevision() { return getParameterValue(REVISION_PARAMETER_NAME); } @Override public int hashCode() { return new HashCodeBuilder(9, 9) .appendSuper(super.hashCode()) .append(getEntityReference()) .append(getLocale()) .append(getAction()) .toHashCode(); } @Override public boolean equals(Object object) { if (object == null) { return false; } if (object == this) { return true; } if (object.getClass() != getClass()) { return false; } EntityResourceReference rhs = (EntityResourceReference) object; return new EqualsBuilder() .appendSuper(super.equals(object)) .append(getEntityReference(), rhs.getEntityReference()) .append(getLocale(), rhs.getLocale()) .append(getAction(), rhs.getAction()) .isEquals(); } @Override public String toString() { ToStringBuilder builder = new XWikiToStringBuilder(this); builder.appendSuper(super.toString()); builder.append("reference", getEntityReference()); builder.append("action", getAction()); builder.append("locale", getLocale()); return builder.toString(); } }