From fdeac3db35ede744acce320d2ce3bf28e1da7c4e Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Mon, 10 Jul 2006 13:32:34 +0000 Subject: [PATCH] Firts stage of Audit work git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3293 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/auditSchema.xsd | 200 ++++++++++++++++++ .../org/alfresco/service/AnnotationTest.java | 66 ++++++ .../service/AnnotationTestInterface.java | 34 +++ .../java/org/alfresco/service/Auditable.java | 51 +++++ 4 files changed, 351 insertions(+) create mode 100644 config/alfresco/auditSchema.xsd create mode 100644 source/java/org/alfresco/service/AnnotationTest.java create mode 100644 source/java/org/alfresco/service/AnnotationTestInterface.java create mode 100644 source/java/org/alfresco/service/Auditable.java diff --git a/config/alfresco/auditSchema.xsd b/config/alfresco/auditSchema.xsd new file mode 100644 index 0000000000..d38e42d2f9 --- /dev/null +++ b/config/alfresco/auditSchema.xsd @@ -0,0 +1,200 @@ + + + + + Schema to define audit configuration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/service/AnnotationTest.java b/source/java/org/alfresco/service/AnnotationTest.java new file mode 100644 index 0000000000..03ea5805c2 --- /dev/null +++ b/source/java/org/alfresco/service/AnnotationTest.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2005 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * 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.alfresco.service; + +import java.lang.reflect.Method; + +import junit.framework.TestCase; + +public class AnnotationTest extends TestCase +{ + + public AnnotationTest() + { + super(); + } + + public AnnotationTest(String arg0) + { + super(arg0); + } + + + public void testAnnotations() throws Exception, NoSuchMethodException + { + Class clazz = AnnotationTestInterface.class; + + Method method = clazz.getMethod("noArgs", new Class[]{}); + assertTrue(method.isAnnotationPresent(Auditable.class)); + Auditable auditable = method.getAnnotation(Auditable.class); + assertEquals(auditable.key(), -1); + assertEquals(auditable.parameters().length, 0); + + + method = clazz.getMethod("getString", new Class[]{String.class, String.class}); + assertTrue(method.isAnnotationPresent(Auditable.class)); + auditable = method.getAnnotation(Auditable.class); + assertEquals(auditable.key(), 0); + assertEquals(auditable.parameters().length, 2); + assertEquals(auditable.parameters()[0], "one"); + assertEquals(auditable.parameters()[1], "two"); + + + method = clazz.getMethod("getAnotherString", new Class[]{String.class}); + assertTrue(method.isAnnotationPresent(Auditable.class)); + auditable = method.getAnnotation(Auditable.class); + assertEquals(auditable.key(), 0); + assertEquals(auditable.parameters().length, 1); + assertEquals(auditable.parameters()[0], "one"); + + } + +} diff --git a/source/java/org/alfresco/service/AnnotationTestInterface.java b/source/java/org/alfresco/service/AnnotationTestInterface.java new file mode 100644 index 0000000000..652487433a --- /dev/null +++ b/source/java/org/alfresco/service/AnnotationTestInterface.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2005 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * 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.alfresco.service; + +/** + * An interface to test the use of the auditable annotation. + * + * @author Andy Hind + */ +public interface AnnotationTestInterface +{ + @Auditable() + public void noArgs(); + + @Auditable(key = 0, parameters = {"one", "two"}) + public String getString(String one, String two); + + @Auditable(key = 0, parameters = {"one"}) + public String getAnotherString(String one); +} diff --git a/source/java/org/alfresco/service/Auditable.java b/source/java/org/alfresco/service/Auditable.java new file mode 100644 index 0000000000..e4294f4373 --- /dev/null +++ b/source/java/org/alfresco/service/Auditable.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2005 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * 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.alfresco.service; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotation to defined key and parameter names for the auditing API. + * + * If this annotation is present on a public service interface it will be considered for auditing. If it is not present the method will never be audited. + * + * Note that the service name and method name can be found from the bean definition and the method invocation. + * + * @author Andy Hind + */ + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Auditable +{ + /** + * The position of the key argument in the method list. + * + * @return -1 indicates there is no key + */ + int key() default -1; + + /** + * The names of the parameters + * + * @return a String[] of parameter names, the default is an empty array. + */ + String[] parameters() default {}; +}