(no commit message)
[utils] / security / impl / src / main / java / org / wamblee / security / authorization / IsaOperationCondition.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */ 
16 package org.wamblee.security.authorization;
17
18 import javax.persistence.Access;
19 import javax.persistence.AccessType;
20 import javax.persistence.Column;
21 import javax.persistence.DiscriminatorValue;
22 import javax.persistence.Entity;
23
24 import org.wamblee.security.AbstractPersistent;
25
26 /**
27  * Determiens if an operation is a subclass of a specified operation.
28  */
29 @Entity
30 @DiscriminatorValue("ISA")
31 @Access(AccessType.PROPERTY)
32 public class IsaOperationCondition extends OperationCondition {
33     /**
34      * Operation that the other operation must be a subclass of.
35      */
36     private Class<? extends Operation> operation;
37
38     /**
39      * Constructs the condition.
40      * 
41      * @param aOperation
42      *            Operation that an operation must be an instance of.
43      */
44     public IsaOperationCondition(Class<? extends Operation> aOperation) {
45         operation = aOperation;
46     }
47
48     /**
49      * For OR mapping.
50      * 
51      */
52     public IsaOperationCondition() {
53         operation = null;
54     }
55
56     /*
57      * (non-Javadoc)
58      * 
59      * @see
60      * org.wamblee.security.authorization.OperationCondition#matches(org.wamblee
61      * .security.authorization.Operation)
62      */
63     public boolean matches(Operation aOperation) {
64         return operation.isInstance(aOperation);
65     }
66
67     /**
68      * Gets the operation as a string. For OR mapping only.
69      * 
70      * @return Operation string.
71      */
72     @Column(name = "CLASSNAME")
73     protected String getOperationString() {
74         if (operation == null) {
75             return null;
76         }
77
78         return operation.getName();
79     }
80
81     /**
82      * Sets the operation as a string. For OR mapping only.
83      * 
84      * @param aOperation
85      *            Operation string.
86      * 
87      */
88     protected void setOperationString(String aOperation) {
89         if (aOperation == null) {
90             return;
91         }
92
93         try {
94             operation = (Class<? extends Operation>) Class.forName(aOperation);
95         } catch (Exception e) {
96             throw new IllegalArgumentException("Unknown class '" + aOperation +
97                 "'");
98         }
99     }
100
101     /*
102      * (non-Javadoc)
103      * 
104      * @see java.lang.Object#toString()
105      */
106     @Override
107     public String toString() {
108         return "IsaOperationCondition(operation=" + operation.getName() + ")";
109     }
110 }