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 }