]> source.dussan.org Git - archiva.git/blob
308dd3aed04152ea58a6d213905867d1cf252de6
[archiva.git] /
1 package org.apache.archiva.repository.base.group;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19
20 import org.apache.archiva.repository.RepositoryGroup;
21 import org.apache.archiva.repository.RepositoryRegistry;
22 import org.apache.archiva.repository.base.ConfigurationHandler;
23 import org.apache.archiva.repository.validation.AbstractRepositoryValidator;
24 import org.apache.archiva.repository.validation.RepositoryValidator;
25 import org.apache.archiva.repository.validation.ValidationError;
26 import org.apache.archiva.repository.validation.ValidationResponse;
27 import org.apache.commons.lang3.StringUtils;
28 import org.springframework.stereotype.Service;
29
30 import java.util.List;
31 import java.util.Map;
32 import java.util.regex.Matcher;
33 import java.util.regex.Pattern;
34
35 import static org.apache.archiva.repository.validation.ErrorKeys.*;
36
37 /**
38  *
39  * A validator for repository groups. All validation errors are prefixed with category 'repository_group'.
40  *
41  * @author Martin Stockhammer <martin_s@apache.org>
42  */
43 @Service( "repositoryValidator#common#group" )
44 public class BasicRepositoryGroupValidator extends AbstractRepositoryValidator<RepositoryGroup> implements RepositoryValidator<RepositoryGroup>
45 {
46
47     private static final String CATEGORY = "repository_group";
48     private static final Pattern REPO_GROUP_ID_PATTERN = Pattern.compile( "[A-Za-z0-9._\\-]+" );
49     private final ConfigurationHandler configurationHandler;
50
51     private RepositoryRegistry repositoryRegistry;
52
53     public BasicRepositoryGroupValidator( ConfigurationHandler configurationHandler )
54     {
55         super( CATEGORY );
56         this.configurationHandler = configurationHandler;
57     }
58
59
60     @Override
61     public ValidationResponse<RepositoryGroup> apply( RepositoryGroup repositoryGroup, boolean updateMode ) throws IllegalArgumentException
62     {
63         final String repoGroupId = repositoryGroup.getId( );
64         Map<String, List<ValidationError>> errors = null;
65         if ( StringUtils.isBlank( repoGroupId ) )
66         {
67             errors = appendError( null, "id", ISEMPTY );
68         }
69
70         if ( repoGroupId.length( ) > 100 )
71         {
72             errors = appendError( errors, "id", MAX_LENGTH_EXCEEDED, repoGroupId, Integer.toString( 100 ) );
73
74         }
75
76         Matcher matcher = REPO_GROUP_ID_PATTERN.matcher( repoGroupId );
77         if ( !matcher.matches( ) )
78         {
79             errors = appendError( errors, "id", INVALID_CHARS, repoGroupId, new String[]{"alphanumeric, '.', '-','_'"} );
80         }
81
82         if ( repositoryGroup.getMergedIndexTTL( ) <= 0 )
83         {
84             errors = appendError( errors, "merged_index_ttl",BELOW_MIN, "0" );
85         }
86
87
88         if ( repositoryRegistry != null && !updateMode )
89         {
90             if ( repositoryRegistry.hasRepositoryGroup( repoGroupId ) )
91             {
92                 errors = appendError( errors, "id", REPOSITORY_GROUP_EXISTS, repoGroupId );
93             }
94             else if ( repositoryRegistry.hasManagedRepository( repoGroupId ) )
95             {
96                 errors = appendError( errors, "id", MANAGED_REPOSITORY_EXISTS );
97             }
98             else if ( repositoryRegistry.hasRemoteRepository( repoGroupId ) )
99             {
100                 errors = appendError( errors, "id", REMOTE_REPOSITORY_EXISTS );
101             }
102         }
103         return new ValidationResponse<>(repositoryGroup, errors );
104     }
105
106
107
108
109     public ConfigurationHandler getConfigurationHandler( )
110     {
111         return configurationHandler;
112     }
113
114     public RepositoryRegistry getRepositoryRegistry( )
115     {
116         return repositoryRegistry;
117     }
118
119     @Override
120     public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry )
121     {
122         this.repositoryRegistry = repositoryRegistry;
123     }
124
125     @Override
126     public Class<RepositoryGroup> getFlavour( )
127     {
128         return RepositoryGroup.class;
129     }
130
131 }