use of org.springframework.roo.classpath.details.annotations.AnnotationAttributeValue in project spring-roo by spring-projects.
the class SecurityOperationsImpl method checkRooSecurityFilterMaintainAnnotation.
/**
* Check if {@link RooSecurityFilter} annotation should be kept
* or should be replaced because is defined in the annotations list to add.
*
* @param rooSecurityFiltersToAdd Annotations list to add
* @param filterAnnotation Annotation to check
* @return
*/
private boolean checkRooSecurityFilterMaintainAnnotation(List<AnnotationAttributeValue<?>> rooSecurityFiltersToAdd, NestedAnnotationAttributeValue filterAnnotation) {
boolean maintainAnnotation = true;
String annotationMethod = (String) filterAnnotation.getValue().getAttribute("method").getValue();
List<?> annotationParameters = (List<?>) filterAnnotation.getValue().getAttribute("parameters").getValue();
String annotationWhen = (String) filterAnnotation.getValue().getAttribute("when").getValue();
Iterator<AnnotationAttributeValue<?>> iterParamTypes = rooSecurityFiltersToAdd.iterator();
while (iterParamTypes.hasNext()) {
NestedAnnotationAttributeValue rooSecurityFilterToAdd = (NestedAnnotationAttributeValue) iterParamTypes.next();
String annotationMethodToAdd = (String) rooSecurityFilterToAdd.getValue().getAttribute("method").getValue();
List<?> annotationParametersToAdd = (List<?>) rooSecurityFilterToAdd.getValue().getAttribute("parameters").getValue();
String annotationWhenToAdd = (String) rooSecurityFilterToAdd.getValue().getAttribute("when").getValue();
boolean parametersAreEquals = true;
if (annotationParametersToAdd.size() != annotationParameters.size()) {
parametersAreEquals = false;
} else {
for (int i = 0; i < annotationParametersToAdd.size(); i++) {
ClassAttributeValue classAnnotationParametersToAdd = (ClassAttributeValue) annotationParametersToAdd.get(i);
ClassAttributeValue classAnnotationParameters = (ClassAttributeValue) annotationParameters.get(i);
if (!classAnnotationParametersToAdd.getValue().getSimpleTypeName().equals(classAnnotationParameters.getValue().getSimpleTypeName())) {
parametersAreEquals = false;
break;
}
}
}
if (annotationMethodToAdd.equals(annotationMethod) && annotationWhenToAdd.equals(annotationWhen) && parametersAreEquals) {
maintainAnnotation = false;
break;
}
}
return maintainAnnotation;
}
use of org.springframework.roo.classpath.details.annotations.AnnotationAttributeValue in project spring-roo by spring-projects.
the class SecurityOperationsImpl method checkRooSecurityAuthorizationMaintainAnnotation.
/**
* Check if {@link RooSecurityAuthorization} annotation should be kept
* or should be replaced because is defined in the annotations list to add.
*
* @param rooSecurityAuthorizationsToAdd Annotations list to add
* @param authorizationAnnotation Annotation to check
* @return
*/
private boolean checkRooSecurityAuthorizationMaintainAnnotation(List<AnnotationAttributeValue<?>> rooSecurityAuthorizationsToAdd, NestedAnnotationAttributeValue authorizationAnnotation) {
boolean maintainAnnotation = true;
String annotationMethod = (String) authorizationAnnotation.getValue().getAttribute("method").getValue();
List<?> annotationParameters = (List<?>) authorizationAnnotation.getValue().getAttribute("parameters").getValue();
Iterator<AnnotationAttributeValue<?>> iterParamTypes = rooSecurityAuthorizationsToAdd.iterator();
while (iterParamTypes.hasNext()) {
NestedAnnotationAttributeValue rooSecurityAuthorizationToAdd = (NestedAnnotationAttributeValue) iterParamTypes.next();
String annotationMethodToAdd = (String) rooSecurityAuthorizationToAdd.getValue().getAttribute("method").getValue();
List<?> annotationParametersToAdd = (List<?>) rooSecurityAuthorizationToAdd.getValue().getAttribute("parameters").getValue();
boolean parametersAreEquals = true;
if (annotationParametersToAdd.size() != annotationParameters.size()) {
parametersAreEquals = false;
} else {
for (int i = 0; i < annotationParametersToAdd.size(); i++) {
ClassAttributeValue classAnnotationParametersToAdd = (ClassAttributeValue) annotationParametersToAdd.get(i);
ClassAttributeValue classAnnotationParameters = (ClassAttributeValue) annotationParameters.get(i);
if (!classAnnotationParametersToAdd.getValue().getSimpleTypeName().equals(classAnnotationParameters.getValue().getSimpleTypeName())) {
parametersAreEquals = false;
break;
}
}
}
if (annotationMethodToAdd.equals(annotationMethod) && parametersAreEquals) {
maintainAnnotation = false;
break;
}
}
return maintainAnnotation;
}
use of org.springframework.roo.classpath.details.annotations.AnnotationAttributeValue in project spring-roo by spring-projects.
the class SecurityOperationsImpl method getRooSecurityFilterAnnotation.
/**
* This method provides {@link RooSecurityFilter} annotation with all the necessary
* attributes
*
* @param method Method to add the annotation
* @param lstParamTypes Parameter types of the method to add the annotation
* @param roles Roles to apply by the filter
* @param usernames Usernames apply by the filter
* @param when Indicate the type of filter 'PRE' (@PreFilter) or 'POST' (@PostFilter)
* @return the annotation created
*/
private AnnotationMetadataBuilder getRooSecurityFilterAnnotation(final String method, final List<AnnotationAttributeValue<?>> lstParamTypes, final String roles, final String usernames, final String when) {
final List<AnnotationAttributeValue<?>> attributes = new ArrayList<AnnotationAttributeValue<?>>();
attributes.add(new StringAttributeValue(new JavaSymbolName("method"), method));
ArrayAttributeValue<AnnotationAttributeValue<?>> newParameters = new ArrayAttributeValue<AnnotationAttributeValue<?>>(new JavaSymbolName("parameters"), lstParamTypes);
attributes.add(newParameters);
if (roles != null) {
attributes.add(new StringAttributeValue(new JavaSymbolName("roles"), roles));
}
if (usernames != null) {
attributes.add(new StringAttributeValue(new JavaSymbolName("usernames"), usernames));
}
attributes.add(new StringAttributeValue(new JavaSymbolName("when"), when));
return new AnnotationMetadataBuilder(RooJavaType.ROO_SECURITY_FILTER, attributes);
}
use of org.springframework.roo.classpath.details.annotations.AnnotationAttributeValue in project spring-roo by spring-projects.
the class SecurityOperationsImpl method generateAuthorizeAnnotations.
@Override
public void generateAuthorizeAnnotations(JavaType klass, String methodName, String roles, String usernames) {
Validate.notNull(klass, "ERROR: klass parameter is mandatory on 'generateAuthorizeAnnotations' method");
Validate.notNull(methodName, "ERROR: method parameter is mandatory on 'generateAuthorizeAnnotations' method");
// Get methods to annotate.
// With the last parameter to false, we avoid that push in action occurs.
List<Object> pushedElements = getPushInOperations().pushIn(klass.getPackage(), klass, methodName, false);
List<AnnotationAttributeValue<?>> rooSecurityAuthorizationsToAdd = new ArrayList<AnnotationAttributeValue<?>>();
for (Object pushedElement : pushedElements) {
if (pushedElement instanceof DefaultMethodMetadata) {
DefaultMethodMetadata method = (DefaultMethodMetadata) pushedElement;
// Get parameters
List<AnnotationAttributeValue<?>> lstParamTypes = new ArrayList<AnnotationAttributeValue<?>>();
List<AnnotatedJavaType> parameterTypes = method.getParameterTypes();
Iterator<AnnotatedJavaType> iterParamTypes = parameterTypes.iterator();
while (iterParamTypes.hasNext()) {
ClassAttributeValue parameterAttributeValue = new ClassAttributeValue(new JavaSymbolName("value"), iterParamTypes.next().getJavaType());
lstParamTypes.add(parameterAttributeValue);
}
// Generate new annotations @RooSecurityAuthorization
NestedAnnotationAttributeValue newFilter = new NestedAnnotationAttributeValue(new JavaSymbolName("value"), getRooSecurityAuthorizationsAnnotation(method.getMethodName().getSymbolName(), lstParamTypes, roles, usernames).build());
rooSecurityAuthorizationsToAdd.add(newFilter);
}
}
// Get actual values of @RooSecurityAuthorizations
ClassOrInterfaceTypeDetails serviceDetails = getTypeLocationService().getTypeDetails(klass);
ClassOrInterfaceTypeDetailsBuilder cidBuilder = new ClassOrInterfaceTypeDetailsBuilder(serviceDetails);
// Check annotation @RooSecurityAuthorizations to delete defined annotations
// that will be redefined
AnnotationMetadata annotationAuthorizations = serviceDetails.getAnnotation(RooJavaType.ROO_SECURITY_AUTHORIZATIONS);
AnnotationMetadataBuilder annotationAuthorizationsMetadataBuilder;
if (annotationAuthorizations != null) {
// Getting authorizations from annotation
AnnotationAttributeValue<?> attributeAuthorizations = annotationAuthorizations.getAttribute("authorizations");
List<?> values = (List<?>) attributeAuthorizations.getValue();
if (values != null && !values.isEmpty()) {
Iterator<?> valuesIt = values.iterator();
while (valuesIt.hasNext()) {
NestedAnnotationAttributeValue authorizationAnnotation = (NestedAnnotationAttributeValue) valuesIt.next();
if (checkRooSecurityAuthorizationMaintainAnnotation(rooSecurityAuthorizationsToAdd, authorizationAnnotation)) {
// Maintain annotation if 'method' or 'parameters' are different
rooSecurityAuthorizationsToAdd.add(authorizationAnnotation);
}
}
}
annotationAuthorizationsMetadataBuilder = new AnnotationMetadataBuilder(annotationAuthorizations);
// remove annotation
cidBuilder.removeAnnotation(RooJavaType.ROO_SECURITY_AUTHORIZATIONS);
} else {
// Doesn't exist @RooSecurityAuthorizations, create it
annotationAuthorizationsMetadataBuilder = new AnnotationMetadataBuilder(RooJavaType.ROO_SECURITY_AUTHORIZATIONS);
}
// Add authorizations attribute
ArrayAttributeValue<AnnotationAttributeValue<?>> newAuthorizations = new ArrayAttributeValue<AnnotationAttributeValue<?>>(new JavaSymbolName("authorizations"), rooSecurityAuthorizationsToAdd);
annotationAuthorizationsMetadataBuilder.addAttribute(newAuthorizations);
// Include new @RooSecurityAuthorizations annotation
cidBuilder.addAnnotation(annotationAuthorizationsMetadataBuilder);
// Write on disk
getTypeManagementService().createOrUpdateTypeOnDisk(cidBuilder.build());
// Add Spring Security dependency
getProjectOperations().addDependency(klass.getModule(), SPRING_SECURITY_CORE, false);
}
use of org.springframework.roo.classpath.details.annotations.AnnotationAttributeValue in project spring-roo by spring-projects.
the class SecurityOperationsImpl method generateFilterAnnotations.
public void generateFilterAnnotations(JavaType klass, String methodName, String roles, String usernames, String when) {
// Get methods to annotate.
// With the last parameter to false, we avoid that push in action occurs.
List<Object> pushedElements = getPushInOperations().pushIn(klass.getPackage(), klass, methodName, false);
List<AnnotationAttributeValue<?>> rooSecurityFiltersToAdd = new ArrayList<AnnotationAttributeValue<?>>();
for (Object pushedElement : pushedElements) {
if (pushedElement instanceof DefaultMethodMetadata) {
DefaultMethodMetadata method = (DefaultMethodMetadata) pushedElement;
// Get parameters
List<AnnotationAttributeValue<?>> lstParamTypes = new ArrayList<AnnotationAttributeValue<?>>();
List<AnnotatedJavaType> parameterTypes = method.getParameterTypes();
Iterator<AnnotatedJavaType> iterParamTypes = parameterTypes.iterator();
while (iterParamTypes.hasNext()) {
ClassAttributeValue parameterAttributeValue = new ClassAttributeValue(new JavaSymbolName("value"), iterParamTypes.next().getJavaType());
lstParamTypes.add(parameterAttributeValue);
}
// Generate new annotations @RooSecurityFilter
NestedAnnotationAttributeValue newFilter = new NestedAnnotationAttributeValue(new JavaSymbolName("value"), getRooSecurityFilterAnnotation(method.getMethodName().getSymbolName(), lstParamTypes, roles, usernames, when).build());
rooSecurityFiltersToAdd.add(newFilter);
}
}
// Get actual values of @RooSecurityFilters
ClassOrInterfaceTypeDetails serviceDetails = getTypeLocationService().getTypeDetails(klass);
ClassOrInterfaceTypeDetailsBuilder cidBuilder = new ClassOrInterfaceTypeDetailsBuilder(serviceDetails);
// Check annotation @RooSecurityFilters to delete defined annotations
// that will be redefined
AnnotationMetadata annotationFilters = serviceDetails.getAnnotation(RooJavaType.ROO_SECURITY_FILTERS);
AnnotationMetadataBuilder annotationFiltersMetadataBuilder;
if (annotationFilters != null) {
// Getting filters from annotation
AnnotationAttributeValue<?> attributeFilters = annotationFilters.getAttribute("filters");
List<?> values = (List<?>) attributeFilters.getValue();
if (values != null && !values.isEmpty()) {
Iterator<?> valuesIt = values.iterator();
while (valuesIt.hasNext()) {
NestedAnnotationAttributeValue filterAnnotation = (NestedAnnotationAttributeValue) valuesIt.next();
if (checkRooSecurityFilterMaintainAnnotation(rooSecurityFiltersToAdd, filterAnnotation)) {
// Maintain annotation if 'method', 'parameters' or 'when' are different
rooSecurityFiltersToAdd.add(filterAnnotation);
}
}
}
annotationFiltersMetadataBuilder = new AnnotationMetadataBuilder(annotationFilters);
// remove annotation
cidBuilder.removeAnnotation(RooJavaType.ROO_SECURITY_FILTERS);
} else {
// Doesn't exist @RooSecurityFilters, create it
annotationFiltersMetadataBuilder = new AnnotationMetadataBuilder(RooJavaType.ROO_SECURITY_FILTERS);
}
// Add filters attribute
ArrayAttributeValue<AnnotationAttributeValue<?>> newFilters = new ArrayAttributeValue<AnnotationAttributeValue<?>>(new JavaSymbolName("filters"), rooSecurityFiltersToAdd);
annotationFiltersMetadataBuilder.addAttribute(newFilters);
// Include new @RooSecurityFilters annotation
cidBuilder.addAnnotation(annotationFiltersMetadataBuilder);
// Write on disk
getTypeManagementService().createOrUpdateTypeOnDisk(cidBuilder.build());
// Add Spring Security dependency
getProjectOperations().addDependency(klass.getModule(), SPRING_SECURITY_CORE, false);
}
Aggregations