/**
* Copyright (C) 2003-2008 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.etk.core.rest.impl.resource;
import java.lang.reflect.Method;
import java.util.List;
import org.etk.core.rest.impl.uri.UriPattern;
import org.etk.core.rest.method.MethodInvoker;
import org.etk.core.rest.method.MethodParameter;
import org.etk.core.rest.resource.AbstractResourceDescriptor;
import org.etk.core.rest.resource.ResourceDescriptorVisitor;
import org.etk.core.rest.resource.SubResourceLocatorDescriptor;
/**
* @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a>
* @version $Id: $
*/
public class SubResourceLocatorDescriptorImpl implements SubResourceLocatorDescriptor {
/**
* See {@link PathValue}.
*/
private final PathValue path;
/**
* See {@link UriPattern}.
*/
private final UriPattern uriPattern;
/**
* See {@link Method}.
*/
private final Method method;
/**
* Parent resource for this method resource, in other words class which
* contains this method.
*/
private final AbstractResourceDescriptor parentResource;
/**
* List of method's parameters. See {@link MethodParameter} .
*/
private final List<MethodParameter> parameters;
/**
* Method invoker.
*/
private final MethodInvoker invoker;
/**
* Constructs new instance of {@link SubResourceLocatorDescriptor}.
*
* @param path See {@link PathValue}
* @param method See {@link Method}
* @param parameters list of method parameters. See {@link MethodParameter}
* @param parentResource parent resource for this method
* @param invoker method invoker
*/
SubResourceLocatorDescriptorImpl(PathValue path,
Method method,
List<MethodParameter> parameters,
AbstractResourceDescriptor parentResource,
MethodInvoker invoker) {
this.path = path;
this.uriPattern = new UriPattern(path.getPath());
this.method = method;
this.parameters = parameters;
this.parentResource = parentResource;
this.invoker = invoker;
}
/**
* {@inheritDoc}
*/
public PathValue getPathValue() {
return path;
}
/**
* {@inheritDoc}
*/
public UriPattern getUriPattern() {
return uriPattern;
}
/**
* {@inheritDoc}
*/
public void accept(ResourceDescriptorVisitor visitor) {
visitor.visitSubResourceLocatorDescriptor(this);
}
/**
* {@inheritDoc}
*/
public Method getMethod() {
return method;
}
/**
* {@inheritDoc}
*/
public List<MethodParameter> getMethodParameters() {
return parameters;
}
/**
* {@inheritDoc}
*/
public AbstractResourceDescriptor getParentResource() {
return parentResource;
}
/**
* {@inheritDoc}
*/
public MethodInvoker getMethodInvoker() {
return invoker;
}
/**
* {@inheritDoc}
*/
public Class<?> getResponseType() {
return getMethod().getReturnType();
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
StringBuffer sb = new StringBuffer("[ SubResourceMethodDescriptorImpl: ");
sb.append("resource: " + getParentResource() + "; ")
.append("path: " + getPathValue() + "; ")
.append("return type: " + getResponseType() + "; ")
.append("invoker: " + getMethodInvoker() + "; ")
.append("parameters: [ ");
for (MethodParameter p : getMethodParameters())
sb.append(p.toString() + " ");
sb.append("] ]");
return sb.toString();
}
}