248 lines
8.6 KiB
Java
248 lines
8.6 KiB
Java
/*
|
|
* 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.
|
|
*
|
|
* $Header:$
|
|
*/
|
|
package org.apache.beehive.netui.compiler;
|
|
|
|
import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
|
|
import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
|
|
import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
|
|
import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
|
|
|
|
import java.util.Collection;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.Iterator;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public class MergedControllerAnnotation
|
|
implements JpfLanguageConstants
|
|
{
|
|
private static final String NULL_KEY = "";
|
|
|
|
private String _strutsMerge;
|
|
private String _validatorVersion;
|
|
private String _validatorMerge;
|
|
private List _tilesDefsConfigs;
|
|
private boolean _nested = false;
|
|
private boolean _longLived = false;
|
|
private List _rolesAllowed;
|
|
private List _customValidatorConfigs;
|
|
private Boolean _loginRequired = null;
|
|
private Boolean _readOnly = null;
|
|
private boolean _inheritLocalPaths = false;
|
|
private LinkedHashMap _forwards = new LinkedHashMap();
|
|
private LinkedHashMap _sharedFlowRefs = new LinkedHashMap();
|
|
private LinkedHashMap _catches = new LinkedHashMap();
|
|
private LinkedHashMap _simpleActions = new LinkedHashMap();
|
|
private LinkedHashMap _validatableBeans = new LinkedHashMap();
|
|
private LinkedHashMap _messageResources = new LinkedHashMap();
|
|
private LinkedHashMap _messageBundles = new LinkedHashMap();
|
|
private String _multipartHandler;
|
|
|
|
public MergedControllerAnnotation( TypeDeclaration jclass )
|
|
{
|
|
mergeControllerAnnotations( jclass );
|
|
}
|
|
|
|
public void mergeAnnotation( AnnotationInstance controllerAnnotation )
|
|
{
|
|
String strutsMerge = CompilerUtils.getString( controllerAnnotation, STRUTSMERGE_ATTR, true );
|
|
if ( strutsMerge != null ) _strutsMerge = strutsMerge;
|
|
|
|
String validatorVersion = CompilerUtils.getEnumFieldName( controllerAnnotation, VALIDATOR_VERSION_ATTR, true );
|
|
if ( validatorVersion != null ) _validatorVersion = validatorVersion;
|
|
|
|
String validatorMerge = CompilerUtils.getString( controllerAnnotation, VALIDATOR_MERGE_ATTR, true );
|
|
if ( validatorMerge != null ) _validatorMerge = validatorMerge;
|
|
|
|
Boolean nested = CompilerUtils.getBoolean( controllerAnnotation, NESTED_ATTR, true );
|
|
if ( nested != null ) _nested = nested.booleanValue();
|
|
|
|
Boolean longLived = CompilerUtils.getBoolean( controllerAnnotation, LONGLIVED_ATTR, true );
|
|
if ( longLived != null ) _longLived = longLived.booleanValue();
|
|
|
|
Boolean loginRequired = CompilerUtils.getBoolean( controllerAnnotation, LOGIN_REQUIRED_ATTR, true );
|
|
if ( loginRequired != null ) _loginRequired = loginRequired;
|
|
|
|
Boolean readOnly = CompilerUtils.getBoolean( controllerAnnotation, READONLY_ATTR, true );
|
|
if ( readOnly != null ) _readOnly = readOnly;
|
|
|
|
Boolean inheritLocalPaths = CompilerUtils.getBoolean( controllerAnnotation, INHERIT_LOCAL_PATHS_ATTR, true );
|
|
if ( inheritLocalPaths != null ) _inheritLocalPaths = inheritLocalPaths.booleanValue();
|
|
|
|
_rolesAllowed = mergeStringArray( _rolesAllowed, controllerAnnotation, ROLES_ALLOWED_ATTR );
|
|
_customValidatorConfigs =
|
|
mergeStringArray( _customValidatorConfigs, controllerAnnotation, CUSTOM_VALIDATOR_CONFIGS_ATTR );
|
|
_tilesDefsConfigs = mergeStringArray( _tilesDefsConfigs, controllerAnnotation, TILES_DEFINITIONS_CONFIGS_ATTR );
|
|
mergeAnnotationArray( _forwards, controllerAnnotation, FORWARDS_ATTR, NAME_ATTR );
|
|
mergeAnnotationArray( _sharedFlowRefs, controllerAnnotation, SHARED_FLOW_REFS_ATTR, NAME_ATTR );
|
|
mergeAnnotationArray( _catches, controllerAnnotation, CATCHES_ATTR, TYPE_ATTR );
|
|
mergeAnnotationArray( _simpleActions, controllerAnnotation, SIMPLE_ACTIONS_ATTR, NAME_ATTR );
|
|
mergeAnnotationArray( _validatableBeans, controllerAnnotation, VALIDATABLE_BEANS_ATTR, TYPE_ATTR );
|
|
mergeAnnotationArray( _messageBundles, controllerAnnotation, MESSAGE_BUNDLES_ATTR, BUNDLE_NAME_ATTR );
|
|
|
|
String multipartHandler = CompilerUtils.getEnumFieldName( controllerAnnotation, MULTIPART_HANDLER_ATTR, true );
|
|
if ( multipartHandler != null ) _multipartHandler = multipartHandler;
|
|
}
|
|
|
|
private static List mergeStringArray( List memberList, AnnotationInstance parentAnnotation,
|
|
String attr )
|
|
{
|
|
List newList = CompilerUtils.getStringArray( parentAnnotation, attr, true );
|
|
|
|
if ( newList != null )
|
|
{
|
|
if ( memberList == null ) return newList;
|
|
memberList.addAll( newList );
|
|
}
|
|
|
|
return memberList;
|
|
}
|
|
|
|
private static void mergeAnnotationArray( LinkedHashMap keyedList,
|
|
AnnotationInstance parentAnnotation, String attr, String keyAttr )
|
|
{
|
|
List annotations = CompilerUtils.getAnnotationArray( parentAnnotation, attr, true );
|
|
|
|
if ( annotations != null )
|
|
{
|
|
for ( Iterator ii = annotations.iterator(); ii.hasNext(); )
|
|
{
|
|
AnnotationInstance ann = ( AnnotationInstance ) ii.next();
|
|
Object key = CompilerUtils.getAnnotationValue( ann, keyAttr, true );
|
|
if ( key != null ) {
|
|
keyedList.put( key.toString(), ann );
|
|
} else {
|
|
keyedList.put( NULL_KEY, ann );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public String getStrutsMerge()
|
|
{
|
|
return _strutsMerge;
|
|
}
|
|
|
|
public String getValidatorVersion()
|
|
{
|
|
return _validatorVersion;
|
|
}
|
|
|
|
public String getValidatorMerge()
|
|
{
|
|
return _validatorMerge;
|
|
}
|
|
|
|
public List getTilesDefinitionsConfigs()
|
|
{
|
|
return _tilesDefsConfigs;
|
|
}
|
|
|
|
public boolean isNested()
|
|
{
|
|
return _nested;
|
|
}
|
|
|
|
public boolean isLongLived()
|
|
{
|
|
return _longLived;
|
|
}
|
|
|
|
public List getRolesAllowed()
|
|
{
|
|
return _rolesAllowed;
|
|
}
|
|
|
|
public List getCustomValidatorConfigs()
|
|
{
|
|
return _customValidatorConfigs;
|
|
}
|
|
|
|
public Boolean isLoginRequired()
|
|
{
|
|
return _loginRequired;
|
|
}
|
|
|
|
public Boolean isReadOnly()
|
|
{
|
|
return _readOnly;
|
|
}
|
|
|
|
public boolean isInheritLocalPaths()
|
|
{
|
|
return _inheritLocalPaths;
|
|
}
|
|
|
|
public Collection getForwards()
|
|
{
|
|
return _forwards.values();
|
|
}
|
|
|
|
public Collection getSharedFlowRefs()
|
|
{
|
|
return _sharedFlowRefs.values();
|
|
}
|
|
|
|
public Collection getCatches()
|
|
{
|
|
return _catches.values();
|
|
}
|
|
|
|
public Collection getSimpleActions()
|
|
{
|
|
return _simpleActions.values();
|
|
}
|
|
|
|
public Collection getValidatableBeans()
|
|
{
|
|
return _validatableBeans.values();
|
|
}
|
|
|
|
public Collection getMessageResources()
|
|
{
|
|
return _messageResources.values();
|
|
}
|
|
|
|
public Collection getMessageBundles()
|
|
{
|
|
return _messageBundles.values();
|
|
}
|
|
|
|
public String getMultipartHandler()
|
|
{
|
|
return _multipartHandler;
|
|
}
|
|
|
|
private void mergeControllerAnnotations( TypeDeclaration jclass )
|
|
{
|
|
//
|
|
// Merge in all the controller annotations, starting with the most remote superclass first.
|
|
//
|
|
if ( jclass != null && jclass instanceof ClassDeclaration )
|
|
{
|
|
ClassType superClass = ( ( ClassDeclaration ) jclass ).getSuperclass();
|
|
if ( superClass != null ) mergeControllerAnnotations( superClass.getDeclaration() );
|
|
AnnotationInstance controllerAnnotation = CompilerUtils.getAnnotation( jclass, CONTROLLER_TAG_NAME );
|
|
if ( controllerAnnotation != null ) mergeAnnotation( controllerAnnotation );
|
|
}
|
|
}
|
|
}
|