001    package org.apache.archiva.admin.repository.proxyconnectorrule;
002    /*
003     * Licensed to the Apache Software Foundation (ASF) under one
004     * or more contributor license agreements.  See the NOTICE file
005     * distributed with this work for additional information
006     * regarding copyright ownership.  The ASF licenses this file
007     * to you under the Apache License, Version 2.0 (the
008     * "License"); you may not use this file except in compliance
009     * with the License.  You may obtain a copy of the License at
010     *
011     *   http://www.apache.org/licenses/LICENSE-2.0
012     *
013     * Unless required by applicable law or agreed to in writing,
014     * software distributed under the License is distributed on an
015     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
016     * KIND, either express or implied.  See the License for the
017     * specific language governing permissions and limitations
018     * under the License.
019     */
020    
021    import org.apache.archiva.admin.model.AuditInformation;
022    import org.apache.archiva.admin.model.RepositoryAdminException;
023    import org.apache.archiva.admin.model.beans.ProxyConnector;
024    import org.apache.archiva.admin.model.beans.ProxyConnectorRule;
025    import org.apache.archiva.admin.model.beans.ProxyConnectorRuleType;
026    import org.apache.archiva.admin.model.proxyconnectorrule.ProxyConnectorRuleAdmin;
027    import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
028    import org.apache.archiva.configuration.Configuration;
029    import org.apache.archiva.configuration.ProxyConnectorConfiguration;
030    import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration;
031    import org.apache.commons.lang.StringUtils;
032    import org.slf4j.Logger;
033    import org.slf4j.LoggerFactory;
034    import org.springframework.stereotype.Service;
035    
036    import java.util.ArrayList;
037    import java.util.Collections;
038    import java.util.List;
039    
040    /**
041     * @author Olivier Lamy
042     * @since 1.4-M3
043     */
044    @Service ("proxyConnectorRuleAdmin#default")
045    public class DefaultProxyConnectorRuleAdmin
046        extends AbstractRepositoryAdmin
047        implements ProxyConnectorRuleAdmin
048    {
049        private Logger log = LoggerFactory.getLogger( getClass() );
050    
051        public List<ProxyConnectorRule> getProxyConnectorRules()
052            throws RepositoryAdminException
053        {
054            List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
055                getArchivaConfiguration().getConfiguration().getProxyConnectorRuleConfigurations();
056            if ( proxyConnectorRuleConfigurations.isEmpty() )
057            {
058                return Collections.emptyList();
059            }
060            List<ProxyConnectorRule> proxyConnectorRules =
061                new ArrayList<ProxyConnectorRule>( proxyConnectorRuleConfigurations.size() );
062            for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : proxyConnectorRuleConfigurations )
063            {
064    
065                ProxyConnectorRule proxyConnectorRule = new ProxyConnectorRule();
066                proxyConnectorRule.setPattern( proxyConnectorRuleConfiguration.getPattern() );
067                proxyConnectorRule.setProxyConnectorRuleType(
068                    getProxyConnectorRuleType( proxyConnectorRuleConfiguration.getRuleType() ) );
069                for ( ProxyConnectorConfiguration proxyConnectorConfiguration : proxyConnectorRuleConfiguration.getProxyConnectors() )
070                {
071                    ProxyConnector proxyConnector = new ProxyConnector();
072                    proxyConnector.setSourceRepoId( proxyConnectorConfiguration.getSourceRepoId() );
073                    proxyConnector.setTargetRepoId( proxyConnectorConfiguration.getTargetRepoId() );
074                    proxyConnectorRule.getProxyConnectors().add( proxyConnector );
075                }
076                proxyConnectorRules.add( proxyConnectorRule );
077            }
078    
079            return proxyConnectorRules;
080        }
081    
082    
083        private ProxyConnectorRuleType getProxyConnectorRuleType( String type )
084        {
085            if ( StringUtils.equals( ProxyConnectorRuleType.WHITE_LIST.getRuleType(), type ) )
086            {
087                return ProxyConnectorRuleType.WHITE_LIST;
088            }
089            if ( StringUtils.equals( ProxyConnectorRuleType.BLACK_LIST.getRuleType(), type ) )
090            {
091                return ProxyConnectorRuleType.BLACK_LIST;
092            }
093            return null;
094        }
095    
096        public void addProxyConnectorRule( ProxyConnectorRule proxyConnectorRule, AuditInformation auditInformation )
097            throws RepositoryAdminException
098        {
099            ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration = new ProxyConnectorRuleConfiguration();
100            proxyConnectorRuleConfiguration.setPattern( proxyConnectorRule.getPattern() );
101            proxyConnectorRuleConfiguration.setRuleType( proxyConnectorRule.getProxyConnectorRuleType().getRuleType() );
102            for ( ProxyConnector proxyConnector : proxyConnectorRule.getProxyConnectors() )
103            {
104                ProxyConnectorConfiguration proxyConnectorConfiguration = new ProxyConnectorConfiguration();
105                proxyConnectorConfiguration.setSourceRepoId( proxyConnector.getSourceRepoId() );
106                proxyConnectorConfiguration.setTargetRepoId( proxyConnector.getTargetRepoId() );
107                proxyConnectorRuleConfiguration.getProxyConnectors().add( proxyConnectorConfiguration );
108            }
109            Configuration configuration = getArchivaConfiguration().getConfiguration();
110            configuration.getProxyConnectorRuleConfigurations().add( proxyConnectorRuleConfiguration );
111            saveConfiguration( configuration );
112        }
113    
114        public void deleteProxyConnectorRule( ProxyConnectorRule proxyConnectorRule, AuditInformation auditInformation )
115            throws RepositoryAdminException
116        {
117            Configuration configuration = getArchivaConfiguration().getConfiguration();
118            // key is the pattern !!
119            // recreate a list without the pattern
120    
121            boolean toSave = false;
122    
123            List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
124                new ArrayList<ProxyConnectorRuleConfiguration>();
125    
126            for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : configuration.getProxyConnectorRuleConfigurations() )
127            {
128                if ( StringUtils.equals( proxyConnectorRuleConfiguration.getPattern(), proxyConnectorRule.getPattern() )
129                    && StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
130                                           proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ) )
131                {
132                    toSave = true;
133                }
134                else
135                {
136                    proxyConnectorRuleConfigurations.add( proxyConnectorRuleConfiguration );
137                }
138            }
139    
140            if ( toSave )
141            {
142                configuration.setProxyConnectorRuleConfigurations( proxyConnectorRuleConfigurations );
143                saveConfiguration( configuration );
144            }
145    
146        }
147    
148        public void updateProxyConnectorRule( ProxyConnectorRule proxyConnectorRule, AuditInformation auditInformation )
149            throws RepositoryAdminException
150        {
151            Configuration configuration = getArchivaConfiguration().getConfiguration();
152    
153            for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : configuration.getProxyConnectorRuleConfigurations() )
154            {
155                if ( StringUtils.equals( proxyConnectorRuleConfiguration.getPattern(), proxyConnectorRule.getPattern() )
156                    && StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
157                                           proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ) )
158                {
159                    List<ProxyConnectorConfiguration> proxyConnectors =
160                        new ArrayList<ProxyConnectorConfiguration>( proxyConnectorRule.getProxyConnectors().size() );
161                    for ( ProxyConnector proxyConnector : proxyConnectorRule.getProxyConnectors() )
162                    {
163                        ProxyConnectorConfiguration proxyConnectorConfiguration = new ProxyConnectorConfiguration();
164                        proxyConnectorConfiguration.setSourceRepoId( proxyConnector.getSourceRepoId() );
165                        proxyConnectorConfiguration.setTargetRepoId( proxyConnector.getTargetRepoId() );
166                        proxyConnectors.add( proxyConnectorConfiguration );
167                    }
168                    proxyConnectorRuleConfiguration.setProxyConnectors( proxyConnectors );
169                    saveConfiguration( configuration );
170                }
171            }
172    
173        }
174    }