Firts stage of Audit work

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3293 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2006-07-10 13:32:34 +00:00
parent 048bffec76
commit fdeac3db35
4 changed files with 351 additions and 0 deletions

View File

@@ -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");
}
}

View File

@@ -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);
}

View File

@@ -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 {};
}