001package 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 021import org.apache.archiva.admin.model.AuditInformation; 022import org.apache.archiva.admin.model.RepositoryAdminException; 023import org.apache.archiva.admin.model.beans.ProxyConnector; 024import org.apache.archiva.admin.model.beans.ProxyConnectorRule; 025import org.apache.archiva.proxy.model.ProxyConnectorRuleType; 026import org.apache.archiva.admin.model.proxyconnectorrule.ProxyConnectorRuleAdmin; 027import org.apache.archiva.admin.repository.AbstractRepositoryAdmin; 028import org.apache.archiva.configuration.Configuration; 029import org.apache.archiva.configuration.ProxyConnectorConfiguration; 030import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration; 031import org.apache.commons.lang3.StringUtils; 032import org.slf4j.Logger; 033import org.slf4j.LoggerFactory; 034import org.springframework.stereotype.Service; 035 036import java.util.ArrayList; 037import java.util.Collections; 038import java.util.List; 039 040/** 041 * @author Olivier Lamy 042 * @since 1.4-M3 043 */ 044@Service("proxyConnectorRuleAdmin#default") 045public class DefaultProxyConnectorRuleAdmin 046 extends AbstractRepositoryAdmin 047 implements ProxyConnectorRuleAdmin 048{ 049 private Logger log = LoggerFactory.getLogger( getClass() ); 050 051 @Override 052 public List<ProxyConnectorRule> getProxyConnectorRules() 053 throws RepositoryAdminException 054 { 055 List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations = 056 getArchivaConfiguration().getConfiguration().getProxyConnectorRuleConfigurations(); 057 if ( proxyConnectorRuleConfigurations.isEmpty() ) 058 { 059 return Collections.emptyList(); 060 } 061 List<ProxyConnectorRule> proxyConnectorRules = new ArrayList<>( 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 @Override 097 public void addProxyConnectorRule( ProxyConnectorRule proxyConnectorRule, AuditInformation auditInformation ) 098 throws RepositoryAdminException 099 { 100 ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration = new ProxyConnectorRuleConfiguration(); 101 proxyConnectorRuleConfiguration.setPattern( proxyConnectorRule.getPattern() ); 102 proxyConnectorRuleConfiguration.setRuleType( proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ); 103 for ( ProxyConnector proxyConnector : proxyConnectorRule.getProxyConnectors() ) 104 { 105 ProxyConnectorConfiguration proxyConnectorConfiguration = new ProxyConnectorConfiguration(); 106 proxyConnectorConfiguration.setSourceRepoId( proxyConnector.getSourceRepoId() ); 107 proxyConnectorConfiguration.setTargetRepoId( proxyConnector.getTargetRepoId() ); 108 proxyConnectorRuleConfiguration.getProxyConnectors().add( proxyConnectorConfiguration ); 109 } 110 Configuration configuration = getArchivaConfiguration().getConfiguration(); 111 configuration.getProxyConnectorRuleConfigurations().add( proxyConnectorRuleConfiguration ); 112 saveConfiguration( configuration ); 113 } 114 115 @Override 116 public void deleteProxyConnectorRule( ProxyConnectorRule proxyConnectorRule, AuditInformation auditInformation ) 117 throws RepositoryAdminException 118 { 119 Configuration configuration = getArchivaConfiguration().getConfiguration(); 120 // key is the pattern !! 121 // recreate a list without the pattern 122 123 boolean toSave = false; 124 125 List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations = new ArrayList<>(); 126 127 for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : configuration.getProxyConnectorRuleConfigurations() ) 128 { 129 if ( StringUtils.equals( proxyConnectorRuleConfiguration.getPattern(), proxyConnectorRule.getPattern() ) 130 && StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(), 131 proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ) ) 132 { 133 toSave = true; 134 } 135 else 136 { 137 proxyConnectorRuleConfigurations.add( proxyConnectorRuleConfiguration ); 138 } 139 } 140 141 if ( toSave ) 142 { 143 configuration.setProxyConnectorRuleConfigurations( proxyConnectorRuleConfigurations ); 144 saveConfiguration( configuration ); 145 } 146 147 } 148 149 @Override 150 public void updateProxyConnectorRule( ProxyConnectorRule proxyConnectorRule, AuditInformation auditInformation ) 151 throws RepositoryAdminException 152 { 153 Configuration configuration = getArchivaConfiguration().getConfiguration(); 154 155 for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : configuration.getProxyConnectorRuleConfigurations() ) 156 { 157 if ( StringUtils.equals( proxyConnectorRuleConfiguration.getPattern(), proxyConnectorRule.getPattern() ) 158 && StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(), 159 proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ) ) 160 { 161 List<ProxyConnectorConfiguration> proxyConnectors = 162 new ArrayList<>( proxyConnectorRule.getProxyConnectors().size() ); 163 for ( ProxyConnector proxyConnector : proxyConnectorRule.getProxyConnectors() ) 164 { 165 ProxyConnectorConfiguration proxyConnectorConfiguration = new ProxyConnectorConfiguration(); 166 proxyConnectorConfiguration.setSourceRepoId( proxyConnector.getSourceRepoId() ); 167 proxyConnectorConfiguration.setTargetRepoId( proxyConnector.getTargetRepoId() ); 168 proxyConnectors.add( proxyConnectorConfiguration ); 169 } 170 proxyConnectorRuleConfiguration.setProxyConnectors( proxyConnectors ); 171 saveConfiguration( configuration ); 172 } 173 } 174 175 } 176}