001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.activemq.security;
018
019import java.util.List;
020
021import javax.annotation.PostConstruct;
022
023import org.apache.activemq.filter.DestinationMapEntry;
024import org.springframework.beans.factory.InitializingBean;
025
026
027/**
028 *  @org.apache.xbean.XBean element="authorizationMap"
029 */
030public class XBeanAuthorizationMap extends DefaultAuthorizationMap implements InitializingBean {
031
032    protected List<DestinationMapEntry> authorizationEntries;
033
034    /**
035     * JSR-250 callback wrapper; converts checked exceptions to runtime exceptions
036     *
037     * delegates to afterPropertiesSet, done to prevent backwards incompatible signature change.
038     */
039    @PostConstruct
040    private void postConstruct() {
041        try {
042            afterPropertiesSet();
043        } catch (Exception ex) {
044            throw new RuntimeException(ex);
045        }
046    }
047
048    /**
049     *
050     * @org.apache.xbean.InitMethod
051     */
052    @Override
053    public void afterPropertiesSet() throws Exception {
054        for (DestinationMapEntry entry : authorizationEntries) {
055            if (((XBeanAuthorizationEntry)entry).getGroupClass() == null) {
056                ((XBeanAuthorizationEntry)entry).setGroupClass(groupClass);
057            }
058            ((XBeanAuthorizationEntry)entry).afterPropertiesSet();
059        }
060
061        // also check group class of temp destination ACL
062        // use the group class of the <authorizationMap> entry if this temp
063        // destination entry has no group class specified.
064        if (getTempDestinationAuthorizationEntry() != null) {
065            if (getTempDestinationAuthorizationEntry().getGroupClass() == null) {
066                getTempDestinationAuthorizationEntry().setGroupClass(groupClass);
067            }
068            getTempDestinationAuthorizationEntry().afterPropertiesSet();
069        }
070
071        super.setEntries(authorizationEntries);
072    }
073
074    /**
075     * Sets the individual entries on the authorization map
076     *
077     * @org.apache.xbean.ElementType class="org.apache.activemq.security.AuthorizationEntry"
078     */
079    @Override
080    @SuppressWarnings("rawtypes")
081    public void setAuthorizationEntries(List<DestinationMapEntry> entries) {
082        this.authorizationEntries = entries;
083    }
084
085}