Return-Path: X-Original-To: apmail-sling-commits-archive@www.apache.org Delivered-To: apmail-sling-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A3E6910842 for ; Wed, 6 Nov 2013 14:31:42 +0000 (UTC) Received: (qmail 59798 invoked by uid 500); 6 Nov 2013 14:30:41 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 59341 invoked by uid 500); 6 Nov 2013 14:30:18 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 59175 invoked by uid 99); 6 Nov 2013 14:30:15 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Nov 2013 14:30:15 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Nov 2013 14:30:11 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8489123889BB; Wed, 6 Nov 2013 14:29:51 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1539345 [2/2] - in /sling/whiteboard/dklco: dynamic-proxy/ dynamic-proxy/src/main/java/org/apache/sling/commons/ dynamic-proxy/src/main/java/org/apache/sling/extensions/ dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/... Date: Wed, 06 Nov 2013 14:29:49 -0000 To: commits@sling.apache.org From: dklco@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131106142951.8489123889BB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/reflection/package-info.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/reflection/package-info.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/reflection/package-info.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/reflection/package-info.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides helper classes for interacting with Classes, Annotations and Methods. + * + * @version 1.0 + */ +@Version("1.0") +package org.apache.sling.extensions.dynamicproxy.impl.reflection; + +import aQute.bnd.annotation.Version; + Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedChildrenTO.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedChildrenTO.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedChildrenTO.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedChildrenTO.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.impl.to; + +import java.lang.reflect.Method; + +import org.apache.sling.extensions.dynamicproxy.annotations.SlingChildren; + +/** + * Transfer object for SlingChildren method invocations. + */ +public final class InvokedChildrenTO extends PathBasedInvokedTO { + + /** + * Returns a new instance of the InvokedChildrenTO + * + * @param method + * the method being invoked + * @return the InvokedChildrenTO + */ + public static InvokedChildrenTO newInstance(Method method) { + SlingChildren sc = method.getAnnotation(SlingChildren.class); + String path = sc.path(); + InvokedChildrenTO to = new InvokedChildrenTO(method, sc, path); + return to; + } + + /** + * The generic type to return when constructing the Iterator of children. + */ + private final Class returnType; + + /** + * Constructs a new Invoked Children Transfer Object. + * + * @param method + * the invoked method + * @param args + * the method arguments + * @param path + * the path specified in the annotation + * @param returnType + * the return type specified in the annotation + * @param mt + * the method type + */ + protected InvokedChildrenTO(final Method method, final SlingChildren sc, + final String path) { + super(method, path); + this.returnType = sc.returnType(); + } + + /** + * Gets the generic type to return when constructing the Iterator of + * children. + * + * @return the returnType + */ + public final Class getReturnType() { + return this.returnType; + } + +} Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedPropertyTO.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedPropertyTO.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedPropertyTO.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedPropertyTO.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,207 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.impl.to; + +import java.lang.reflect.Method; + +import org.apache.sling.extensions.dynamicproxy.annotations.SlingProperty; + +/** + * InvokedPropertyTO - Transfer Object Meant as a convenient way to maintain and + * pass a method invocation around The members are not private because the class + * is package protected and they are final. + */ +public final class InvokedPropertyTO extends PathBasedInvokedTO { + + /** + * Returns a new instance of the InvokedPropertyTO + * + * @param method + * the method being invoked + * @return the InvokedPropertyTO + */ + public static InvokedPropertyTO newInstance(Method method) { + SlingProperty sp = method.getAnnotation(SlingProperty.class); + InvokedPropertyTO to = new InvokedPropertyTO(method, sp, sp.path()); + return to; + } + + /** The default bytes. */ + private final byte[] defaultBytes; + + /** The default date. */ + private final long defaultDate; + + /** The default double. */ + private final double defaultDouble; + + /** The default int. */ + private final int defaultInt; + + /** The default long. */ + private final long defaultLong; + + /** The default string. */ + private final String defaultString; + + /** The default strings. */ + private final String[] defaultStrings; + + /** The property name specified in the annotation. */ + private final String name; + + /** + * The full property name, calculated from the path and name from the + * annotation parameters. + */ + private final String propertyName; + + /** The use default flag. */ + private final boolean useDefault; + + /** The default boolean value */ + private final boolean defaultBoolean; + + /** + * Constructs a new Invoked Transfer Object. + * + * @param method + * the invoked method + * @param sp + * the sling property annotation + * @param path + * the path annotation value + */ + protected InvokedPropertyTO(final Method method, SlingProperty sp, + String path) { + super(method, path); + this.name = sp.name(); + this.propertyName = (path != null ? path + "/" : "") + name; + this.defaultBoolean = sp.defaultBoolean(); + this.defaultBytes = sp.defaultBytes(); + this.defaultDate = sp.defaultDate(); + this.defaultDouble = sp.defaultDouble(); + this.defaultInt = sp.defaultInt(); + this.defaultLong = sp.defaultLong(); + this.defaultString = sp.defaultString(); + this.defaultStrings = sp.defaultStrings(); + this.useDefault = sp.useDefault(); + + } + + /** + * Gets the default boolean value. + * + * @return the default boolean + */ + public boolean getDefaultBoolean() { + return this.defaultBoolean; + } + + /** + * Gets the default bytes. + * + * @return the default bytes + */ + public byte[] getDefaultBytes() { + return this.defaultBytes; + } + + /** + * Gets the default date. + * + * @return the default date + */ + public long getDefaultDate() { + return this.defaultDate; + } + + /** + * Gets the default double. + * + * @return the default double + */ + public double getDefaultDouble() { + return this.defaultDouble; + } + + /** + * Gets the default integer. + * + * @return the default integer + */ + public Integer getDefaultInt() { + return this.defaultInt; + } + + /** + * Gets the default long. + * + * @return the default long + */ + public long getDefaultLong() { + return this.defaultLong; + } + + /** + * Gets the default string. + * + * @return the default string + */ + public String getDefaultString() { + return this.defaultString; + } + + /** + * Gets the default strings. + * + * @return the default strings + */ + public String[] getDefaultStrings() { + return this.defaultStrings; + } + + /** + * Get the name annotation value. + * + * @return the name + */ + public String getName() { + return this.name; + } + + /** + * Get the property name to retrieve, this is calculated from the annotation + * name and path. + * + * @return the property name + */ + public String getPropertyName() { + return this.propertyName; + } + + /** + * Checks if is use default. + * + * @return true, if is use default + */ + public boolean isUseDefault() { + return this.useDefault; + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedTO.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedTO.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedTO.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/InvokedTO.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.impl.to; + +import java.lang.reflect.Method; + +import org.apache.sling.extensions.dynamicproxy.impl.lang.MethodType; + +/** + * Represents a method invocation on the InvocationHandler. + */ +public class InvokedTO { + + /** + * The method which was invokedF + */ + private Method method; + + /** + * The type of the method being invoked. + */ + private MethodType mt; + + /** + * Constructs a new InvokedTO from the method. + * + * @param method + * the method being invoked + */ + protected InvokedTO(Method method) { + this.method = method; + this.mt = MethodType.getMethodType(method); + } + + /** + * Gets the method which was invoked. + * + * @return the invoked method + */ + public Method getMethod() { + return method; + } + + /** + * Gets the type of method which was invoked. + * + * @return the type of method invoked + */ + public MethodType getMethodType() { + return mt; + } + + /** + * Checks whether or not the method invoked was a getter. + * + * @return true if the method is a JavaBean getter + */ + public boolean isGetter() { + return MethodType.contains(new MethodType[] { MethodType.JavaBeanIs, + MethodType.JavaBeanGet }, this.mt); + } + + /** + * Checks whether or not the method invoked is compliant with JavaBean + * naming conventions. + * + * @return true if the method is a valid JavaBean method + */ + public boolean isJavaBean() { + return MethodType.contains(new MethodType[] { MethodType.JavaBeanIs, + MethodType.JavaBeanGet, MethodType.JavaBeanSet }, this.mt); + } + + /** + * Checks if the method is of the specified type. + * + * @param _mt + * the type to check + * @return if the method invoked is the same type as the specified method + * type + */ + public boolean isType(final MethodType _mt) { + return this.mt == _mt; + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/PathBasedInvokedTO.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/PathBasedInvokedTO.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/PathBasedInvokedTO.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/PathBasedInvokedTO.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.impl.to; + +import java.lang.reflect.Method; + +/** + * PathBasedInvokedTO - Transfer Object Meant as a convenient way to maintain and + * pass a method invocation around The members are not private because the class + * is package protected and they are final. + */ +public class PathBasedInvokedTO extends InvokedTO { + + /** + * The path from the annotations + */ + private final String path; + + /** + * Constructs a new Base Invoked Transfer Object. + * + * @param method + * the method being invoked + * @param path + * the path from the annotations + * @param mt + * the type of method being invoked + */ + public PathBasedInvokedTO(final Method method, final String path) { + super(method); + this.path = path; + } + + /** + * Gets the path specified in the annotation. + * + * @return the path + */ + public final String getPath() { + return this.path; + } + + /** + * Checks whether or not the path is absolute (starts with '/'). + * + * @return true if the path is relative + */ + public boolean isAbsolute() { + return (this.path != null) && this.path.startsWith("/"); + } + + /** + * Checks whether or not the path is relative (does not start with '/'). + * + * @return true if the path is relative + */ + public boolean isRelative() { + return (this.path != null) && !this.isAbsolute() + && this.path.contains("/"); + } + +} Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/SlingServiceInvocationTO.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/SlingServiceInvocationTO.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/SlingServiceInvocationTO.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/SlingServiceInvocationTO.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.impl.to; + +import java.lang.reflect.Method; + +import org.apache.sling.extensions.dynamicproxy.annotations.SlingServiceInvocation; + +/** + * Transfer object for SlingServiceInvocation method invocations. + */ +public final class SlingServiceInvocationTO extends InvokedTO { + + /** + * The service to invoke + */ + private final Class service; + + /** + * The method arguments + */ + private Object[] args; + + /** + * Gets a new instance of the SlingServiceInvocationTO. + * + * @param method + * the method being invoked + * @param args + * the method arguments + * @return a new SlingServiceInvocationTO + */ + public static SlingServiceInvocationTO newInstance(Method method, + Object[] args) { + SlingServiceInvocationTO to = new SlingServiceInvocationTO(method, args); + return to; + } + + /** + * Constructs a new Invoked Children Transfer Object. + * + * @param method + * the invoked method + * @param args + * the method arguments + * @param service + * the service to invoke + * @param mt + * the method type + */ + protected SlingServiceInvocationTO(final Method method, Object[] args) { + super(method); + SlingServiceInvocation ssi = method + .getAnnotation(SlingServiceInvocation.class); + this.service = ssi.service(); + this.args = args; + } + + /** + * Gets the parameters passed into the method + * + * @return the arguments + */ + public Object[] getArgs() { + return args; + } + + /** + * Gets the service to invoke + * + * @return the service + */ + public final Class getService() { + return this.service; + } + +} Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/package-info.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/package-info.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/package-info.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/impl/to/package-info.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides the Transfer Objects for transferring method invocation data. + * + * @version 1.0 + */ +@Version("1.0") +package org.apache.sling.extensions.dynamicproxy.impl.to; + +import aQute.bnd.annotation.Version; + Added: sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/package-info.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/package-info.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/package-info.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/main/java/org/apache/sling/extensions/dynamicproxy/package-info.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Provides an implementation of the Java Dynamic Proxy API for Apache Sling. + * + * @version 1.0 + */ +@Version("1.0") +package org.apache.sling.extensions.dynamicproxy; + +import aQute.bnd.annotation.Version; + Modified: sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/annotations.md URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/annotations.md?rev=1539345&r1=1534883&r2=1539345&view=diff ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/annotations.md (original) +++ sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/annotations.md Wed Nov 6 14:29:48 2013 @@ -28,7 +28,6 @@ Annotation used to mark a Method as retr The child Resources at the path will be returned as an Iterator of either a resource or the type specified in the returnType property, according to the following rules (in order): - * If the return type is an instance of a Resource, the resource at the path will be returned * If adapting the resource into the return class returns a non-null, this object will be returned * If using the ProxyService to retrieve a proxy instance does not throw and error and does not return null, the resulting object will returned @@ -87,6 +86,11 @@ The following return types are supported | Calendar | defaultDate | | Date | defaultDate | | Double | defaultDouble | +| Integer | defaultInteger | +| int | defaultInteger | +| int | defaultInteger | +| Long | defaultLong | +| long | defaultLong | | String | defaultString | | String[] | defaultStrings | @@ -137,4 +141,35 @@ The following parameters can be specifie | Name | Description | Type | Default | |--|--|--|--| -| path | The path to the resource being referenced, if it begins with '/' it will be treated as an absolute path, otherwise, it will be treated as a relative path. | String | | \ No newline at end of file +| path | The path to the resource being referenced, if it begins with '/' it will be treated as an absolute path, otherwise, it will be treated as a relative path. | String | | + +## SlingServiceInvocation + +Annotation used to mark a Method as returning the result of a method on another service. When the method on the proxy interface is invoked, it will retrieve an instance of the Service and attempt to find a method matching the signature of the proxy method. If the first parameter of the method is the proxy interface, the proxy will inject an instance of itself. + +Below are two examples, showing configurations, they assume you have a service with the interface: + + public interface MyCustomService { + Resource doStuff(); + Resource doOtherStuff(MyProxy proxy); + Resource doEvenMoreStuff(MyProxy proxy, String path); + } + + + + @SlingServiceInvocation(service = MyCustomService.class) + Resource doStuff(); + + @SlingServiceInvocation(service = MyCustomService.class) + Resource doOtherStuff(); + + @SlingServiceInvocation(service = MyCustomService.class) + Resource doEvenMoreStuff(String path); + +### Parameters + +The following parameters can be specified for the `@SlingServiceInvocation` annotation to configure how the properties is retrieved. + +| Name | Description | Type | Default | +|--|--|--|--| +| service | The service interface to reference. This service should have a single implementation and should have a method matching the signature of the method upon which this annotation is added. | Class | | \ No newline at end of file Modified: sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/index.md URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/index.md?rev=1539345&r1=1534883&r2=1539345&view=diff ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/index.md (original) +++ sling/whiteboard/dklco/dynamic-proxy/src/site/markdown/index.md Wed Nov 6 14:29:48 2013 @@ -24,7 +24,7 @@ Sling Proxy allows you to develop interf ## Creating a Sling Proxy -To create a Sling Proxy, simply create an interface which extends the SlingProxy interface. All methods on the interface should be annotated with one of the [Sling Proxy Annotations](annotations.html) +To create a Sling Proxy, simply create an interface which extends the SlingProxy interface. All methods on the interface should be annotated with one of the [Sling Proxy Annotations](annotations.html). ## Retrieving a Sling Proxy Instance Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/BaseSlingProxyTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/BaseSlingProxyTest.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/BaseSlingProxyTest.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/BaseSlingProxyTest.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy; + +import org.apache.sling.commons.testing.sling.MockResource; +import org.apache.sling.commons.testing.sling.MockResourceResolver; +import org.apache.sling.extensions.dynamicproxy.SlingProxy; +import org.apache.sling.extensions.dynamicproxy.SlingProxyService; +import org.apache.sling.extensions.dynamicproxy.impl.DefaultSlingProxyServiceImpl; +import org.junit.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Base SlingProxy test class. Sets up the Sling mock objects. + */ +public class BaseSlingProxyTest { + public static final String TITLE = "My Title"; + public static final String CONTENT_RESOURCE_TYPE = "myapp/components/page"; + public static final String PAGE_RESOURCE_TYPE = "myapp:Page"; + private final static Logger log = LoggerFactory + .getLogger(TestSlingPropertyProxy.class); + protected final MockResourceResolver resolver = new MockResourceResolver(); + protected final SlingProxyService slingProxyService = new DefaultSlingProxyServiceImpl(); + + /** + * Sets up the Sling mock objects + * + * @throws Exception + */ + @Before + public void init() throws Exception { + log.info("init"); + + log.info("Creating Mock Resources"); + final MockResource pageResource = new MockResource(resolver, + "/content/test", PAGE_RESOURCE_TYPE) { + public AdapterType adaptTo(Class type) { + if (SlingProxy.class.isAssignableFrom(type)) { + return slingProxyService.getProxy(this, type); + } else { + return super.adaptTo(type); + } + } + }; + pageResource.addProperty("sling:resourceType", PAGE_RESOURCE_TYPE); + resolver.addResource(pageResource); + final MockResource contentResource = new MockResource(resolver, + "/content/test/jcr:content", CONTENT_RESOURCE_TYPE) { + public AdapterType adaptTo(Class type) { + if (SlingProxy.class.isAssignableFrom(type)) { + return slingProxyService.getProxy(this, type); + } else { + return super.adaptTo(type); + } + } + }; + contentResource.addProperty("jcr:title", TITLE); + contentResource + .addProperty("sling:resourceType", CONTENT_RESOURCE_TYPE); + contentResource.addProperty("active", false); + resolver.addResource(contentResource); + + log.info("Initialization complete"); + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingDefaultProxy.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingDefaultProxy.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingDefaultProxy.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingDefaultProxy.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.io.IOException; +import java.util.Calendar; +import java.util.Date; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.extensions.dynamicproxy.samples.SlingDefaultsProxy; +import org.apache.tika.io.IOUtils; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Tests the default value capability in the Sling Proxy. + */ +public class TestSlingDefaultProxy extends BaseSlingProxyTest { + + private static final Logger log = LoggerFactory + .getLogger(TestSlingDefaultProxy.class); + + /** + * This test checks all of the default value options, ensuring the correct + * default value is returned. + * + * @throws IOException + */ + @Test + public void testDefaults() throws IOException { + + log.info("Testing defaults"); + + Resource resource = resolver.getResource("/content/test/jcr:content"); + + SlingDefaultsProxy sdp = this.slingProxyService.getProxy(resource, + SlingDefaultsProxy.class); + + assertFalse(sdp.getBoolean()); + assertArrayEquals(new byte[0], sdp.getBytes()); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(0); + assertEquals(cal, sdp.getCalendarDate()); + assertEquals(new Date(0), sdp.getDate()); + assertEquals(1.0, sdp.getDouble(), 1.0); + byte[] data = IOUtils.toByteArray(sdp.getInputStream()); + assertArrayEquals(new byte[0], data); + + assertEquals(10, sdp.getInt()); + assertEquals(10, sdp.getLong()); + assertEquals("bob", sdp.getString()); + assertArrayEquals(new String[] { "bob", "jones" }, sdp.getStrings()); + + log.info("Tests successful"); + } + + /** + * This test checks to ensure the proxy returns the original value if a + * value is set instead of the default value. + * + * @throws IOException + */ + @Test + public void testDefaultWithValue() throws IOException { + log.info("Testing default with a value"); + + Resource resource = resolver.getResource("/content/test"); + + SlingDefaultsProxy sdp = this.slingProxyService.getProxy(resource, + SlingDefaultsProxy.class); + + assertEquals(BaseSlingProxyTest.TITLE, sdp.getBackupTitle()); + + log.info("Test successful"); + } + +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingPropertyProxy.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingPropertyProxy.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingPropertyProxy.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/TestSlingPropertyProxy.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.extensions.dynamicproxy.samples.NoAnnotationSlingProxy; +import org.apache.sling.extensions.dynamicproxy.samples.SlingPropertyProxy; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Tests the Sling Proxy retrieval of properties. + */ +public class TestSlingPropertyProxy extends BaseSlingProxyTest { + private static final Logger log = LoggerFactory + .getLogger(TestSlingPropertyProxy.class); + + @Test + public void runTests() { + + log.info("runTests"); + + Resource resource = resolver.getResource("/content/test/jcr:content"); + try { + NoAnnotationSlingProxy simpleSlingProxy = resource + .adaptTo(NoAnnotationSlingProxy.class); + fail("Expected UnsupportedOperationException getting: " + + simpleSlingProxy); + } catch (UnsupportedOperationException uoe) { + log.debug("Passed initial test"); + } + + Resource pageResource = resolver.getResource("/content/test"); + SlingPropertyProxy pageProxy = pageResource + .adaptTo(SlingPropertyProxy.class); + + log.info("Testing backing resource"); + assertEquals(pageProxy.getBackingResource(), pageResource); + + log.info("Testing property retrieval"); + assertEquals(TITLE, pageProxy.getTitle()); + assertEquals(PAGE_RESOURCE_TYPE, pageProxy.getSlingResourceType()); + assertEquals(null, pageProxy.getNonExistentProperty()); + assertEquals(false, pageProxy.isActive()); + + log.info("Tests Successful"); + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPEquals.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPEquals.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPEquals.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPEquals.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.lang; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.extensions.dynamicproxy.BaseSlingProxyTest; +import org.apache.sling.extensions.dynamicproxy.SlingProxyService; +import org.apache.sling.extensions.dynamicproxy.impl.DefaultSlingProxyServiceImpl; +import org.apache.sling.extensions.dynamicproxy.samples.DuplicateSlingPropertyProxy; +import org.apache.sling.extensions.dynamicproxy.samples.SlingPropertyProxy; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Tests for the Sling Proxy hashCode implementation. + */ +public class TestJDPEquals extends BaseSlingProxyTest { + private static final Logger log = LoggerFactory + .getLogger(TestJDPEquals.class); + + /** + * All of the tests for the hashCode implementation. + */ + @Test + public void runTests() { + + log.info("runTests"); + + Resource pageResource = resolver.getResource("/content/test"); + SlingPropertyProxy pageProxy = pageResource + .adaptTo(SlingPropertyProxy.class); + + log.info("Testing Equals functionality"); + + log.info("Ensuring the same proxy interface from the same resource are equal"); + SlingPropertyProxy pageProxy2 = pageResource + .adaptTo(SlingPropertyProxy.class); + assertTrue(pageProxy.equals(pageProxy2)); + + log.info("Ensuring different proxy interfaces from the same resource are not equal"); + DuplicateSlingPropertyProxy pageProxy3 = pageResource + .adaptTo(DuplicateSlingPropertyProxy.class); + assertFalse(pageProxy.equals(pageProxy3)); + + + log.info("Ensuring retrieving the same proxy from different proxy services are equal"); + SlingProxyService slingProxyService2 = new DefaultSlingProxyServiceImpl(); + SlingPropertyProxy pageProxy4 = slingProxyService2.getProxy( + pageResource, SlingPropertyProxy.class); + assertTrue(pageProxy.equals(pageProxy4)); + + log.info("Ensuring the same proxy interfaces from the differet resources are not equal"); + Resource pageContentResource = resolver.getResource("/content/test/jcr:content"); + SlingPropertyProxy pageProxy5 = pageContentResource + .adaptTo(SlingPropertyProxy.class); + assertFalse(pageProxy.equals(pageProxy5)); + + log.info("Tests Successful"); + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPHashCode.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPHashCode.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPHashCode.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPHashCode.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.lang; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertEquals; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.extensions.dynamicproxy.BaseSlingProxyTest; +import org.apache.sling.extensions.dynamicproxy.SlingProxyService; +import org.apache.sling.extensions.dynamicproxy.impl.DefaultSlingProxyServiceImpl; +import org.apache.sling.extensions.dynamicproxy.samples.DuplicateSlingPropertyProxy; +import org.apache.sling.extensions.dynamicproxy.samples.SlingPropertyProxy; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Tests for the Sling Proxy hashCode implementation. + */ +public class TestJDPHashCode extends BaseSlingProxyTest { + private static final Logger log = LoggerFactory + .getLogger(TestJDPHashCode.class); + + /** + * All of the tests for the hashCode implementation. + */ + @Test + public void runTests() { + + log.info("runTests"); + + Resource pageResource = resolver.getResource("/content/test"); + SlingPropertyProxy pageProxy = pageResource + .adaptTo(SlingPropertyProxy.class); + + log.info("Testing Equals functionality"); + int hashCode = pageProxy.hashCode(); + assertNotNull(hashCode); + log.info("HashCode: " + hashCode); + + log.info("Ensuring the same proxy interface from the same resource get the same hash code"); + SlingPropertyProxy pageProxy2 = pageResource + .adaptTo(SlingPropertyProxy.class); + log.info("HashCode1 {}, HashCode 2 {}", hashCode, pageProxy2.hashCode()); + assertEquals(pageProxy2.hashCode(), hashCode); + + log.info("Ensuring different proxy interfaces from the same resource get different hash codes"); + DuplicateSlingPropertyProxy pageProxy3 = pageResource + .adaptTo(DuplicateSlingPropertyProxy.class); + log.info("HashCode1 {}, HashCode 2 {}", hashCode, pageProxy3.hashCode()); + assertFalse(pageProxy3.hashCode() == hashCode); + + log.info("Ensuring retrieving the same proxy from different proxy services results in the same hashCode"); + SlingProxyService slingProxyService2 = new DefaultSlingProxyServiceImpl(); + SlingPropertyProxy pageProxy4 = slingProxyService2.getProxy( + pageResource, SlingPropertyProxy.class); + log.info("HashCode1 {}, HashCode 2 {}", hashCode, pageProxy4.hashCode()); + assertEquals(hashCode, pageProxy4.hashCode()); + + log.info("Tests Successful"); + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPToString.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPToString.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPToString.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/lang/TestJDPToString.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.lang; + +import static org.junit.Assert.assertNotNull; + +import org.apache.sling.api.resource.Resource; +import org.apache.sling.extensions.dynamicproxy.BaseSlingProxyTest; +import org.apache.sling.extensions.dynamicproxy.samples.SlingPropertyProxy; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Tests for the SlingProxy toString method. + */ +public class TestJDPToString extends BaseSlingProxyTest { + private static final Logger log = LoggerFactory + .getLogger(TestJDPToString.class); + + /** + * Test the SlingProxy toString method. + */ + @Test + public void runTests() { + + log.info("runTests"); + + Resource pageResource = resolver.getResource("/content/test"); + SlingPropertyProxy pageProxy = pageResource + .adaptTo(SlingPropertyProxy.class); + + log.info("Testing toString functionality"); + String stringed = pageProxy.toString(); + assertNotNull(stringed); + log.info(stringed); + + log.info("Tests Successful"); + } +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/DuplicateSlingPropertyProxy.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/DuplicateSlingPropertyProxy.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/DuplicateSlingPropertyProxy.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/DuplicateSlingPropertyProxy.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.samples; + +import org.apache.sling.extensions.dynamicproxy.SlingProxy; +import org.apache.sling.extensions.dynamicproxy.annotations.SlingProperty; + +/** + * Duplicate of the SlingPropertyProxy class. This is used to see if really + * similar proxies are treated as different. + */ +public interface DuplicateSlingPropertyProxy extends SlingProxy { + + @SlingProperty(path = "jcr:content") + public String getNonExistentProperty(); + + @SlingProperty(name = "sling:resourceType") + public String getSlingResourceType(); + + @SlingProperty(name = "jcr:title", path = "jcr:content") + public String getTitle(); + + @SlingProperty(path = "jcr:content", name = "active") + public Boolean isActive(); +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/NoAnnotationSlingProxy.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/NoAnnotationSlingProxy.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/NoAnnotationSlingProxy.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/NoAnnotationSlingProxy.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.samples; + +import org.apache.sling.extensions.dynamicproxy.SlingProxy; + +/** + * A simple proxy interface for testing the SlingProxy API. This proxy interface + * only utilizes the default property retrieval mechanism. + */ +public interface NoAnnotationSlingProxy extends SlingProxy { + + /** + * Gets the jcr:title attribute + * + * @return + */ + public String getJcrTitle(); + + /** + * Gets the sling:resourceType attribute. + * + * @return + */ + public String getSlingResourceType(); + + /** + * Another form of retrieving the jcr:title. + * + * @return + */ + public String jcrTitle(); + + /** + * Gets the active attribute. + * + * @return + */ + public Boolean isActive(); + + /** + * Gets the active attribute as a string. + * + * @return + */ + public String active(); + + /** + * Attempts to retrieve a property which does not exist. + * + * @return + */ + public String getNonExistentProperty(); + +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingDefaultsProxy.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingDefaultsProxy.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingDefaultsProxy.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingDefaultsProxy.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.samples; + +import java.io.InputStream; +import java.util.Calendar; +import java.util.Date; + +import org.apache.sling.extensions.dynamicproxy.annotations.SlingProperty; + +/** + * A proxy for testing the defaults functionality + */ +public interface SlingDefaultsProxy extends SlingPropertyProxy { + + @SlingProperty(name = "boolean", useDefault=true, defaultBoolean=false) + public boolean getBoolean(); + + @SlingProperty(name="bytes", useDefault=true) + public byte[] getBytes(); + + @SlingProperty(name="input", useDefault=true) + public InputStream getInputStream(); + + @SlingProperty(name="date", useDefault=true, defaultDate=0) + public Date getDate(); + + @SlingProperty(name="calendar", useDefault=true, defaultDate=0) + public Calendar getCalendarDate(); + + @SlingProperty(name="double", useDefault=true, defaultDouble=1.0) + public double getDouble(); + + @SlingProperty(name = "int", useDefault=true, defaultInt=10) + public int getInt(); + + @SlingProperty(name = "long", useDefault=true, defaultLong=10) + public long getLong(); + + @SlingProperty(name = "string", useDefault=true, defaultString="bob") + public String getString(); + + @SlingProperty(name = "strings", useDefault=true, defaultStrings={"bob","jones"}) + public String[] getStrings(); + + + @SlingProperty(name = "jcr:title", path = "jcr:content", useDefault=true, defaultString="Default Title") + public String getBackupTitle(); +} Added: sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingPropertyProxy.java URL: http://svn.apache.org/viewvc/sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingPropertyProxy.java?rev=1539345&view=auto ============================================================================== --- sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingPropertyProxy.java (added) +++ sling/whiteboard/dklco/dynamic-proxy/src/test/java/org/apache/sling/extensions/dynamicproxy/samples/SlingPropertyProxy.java Wed Nov 6 14:29:48 2013 @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sling.extensions.dynamicproxy.samples; + +import org.apache.sling.extensions.dynamicproxy.SlingProxy; +import org.apache.sling.extensions.dynamicproxy.annotations.SlingProperty; + +/** + * A simple proxy with only properties. + */ +public interface SlingPropertyProxy extends SlingProxy { + + @SlingProperty(name = "jcr:title", path = "jcr:content") + public String getTitle(); + + @SlingProperty(name = "sling:resourceType") + public String getSlingResourceType(); + + @SlingProperty(path = "jcr:content", name = "active") + public Boolean isActive(); + + @SlingProperty(path = "jcr:content") + public String getNonExistentProperty(); +}