1 package org.apache.maven.archiva.database.constraints;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.archiva.database.Constraint;
23 import org.apache.maven.archiva.model.ArchivaArtifactModel;
24
25 import java.util.List;
26
27
28
29
30
31
32 public class UniqueArtifactIdConstraint
33 extends AbstractSimpleConstraint
34 implements Constraint
35 {
36 private StringBuffer sql = new StringBuffer();
37
38 private StringBuffer countSql = new StringBuffer();
39
40 private Class<?> resultClass;
41
42
43
44
45
46
47 public UniqueArtifactIdConstraint( List<String> selectedRepositoryIds, String groupId )
48 {
49 appendSelect( sql, false );
50 sql.append( " WHERE " );
51 SqlBuilder.appendWhereSelectedRepositories( sql, "repositoryId", selectedRepositoryIds );
52 sql.append( " && " );
53 appendWhereSelectedGroupId( sql );
54 appendGroupBy( sql );
55
56 countSql.append( "SELECT count(artifactId) FROM " ).append( ArchivaArtifactModel.class.getName() );
57 countSql.append( " WHERE " );
58 SqlBuilder.appendWhereSelectedRepositories( countSql, "repositoryId", selectedRepositoryIds );
59 countSql.append( " && " );
60 appendWhereSelectedGroupId( countSql );
61 appendGroupBy( countSql );
62
63 super.params = new Object[] { groupId };
64 }
65
66
67
68
69
70
71 public UniqueArtifactIdConstraint( String groupId )
72 {
73 appendSelect( sql, false );
74 sql.append( " WHERE " );
75 appendWhereSelectedGroupId( sql );
76 appendGroupBy( sql );
77
78 countSql.append( "SELECT count(artifactId) FROM " ).append( ArchivaArtifactModel.class.getName() );
79 countSql.append( " WHERE " );
80 appendWhereSelectedGroupId( countSql );
81 appendGroupBy( countSql );
82
83 super.params = new Object[] { groupId };
84 }
85
86
87
88
89
90
91
92 public UniqueArtifactIdConstraint( String repoId, boolean isUnique )
93 {
94 appendSelect( sql, isUnique );
95 sql.append( " WHERE repositoryId == \"" + repoId + "\"" );
96
97 if( isUnique )
98 {
99 countSql.append( "SELECT count(this) FROM " ).append( ArchivaArtifactModel.class.getName() );
100 countSql.append( " WHERE repositoryId == \"" ).append( repoId ).append( "\"" );
101 countSql.append( " GROUP BY groupId, artifactId" );
102 }
103 else
104 {
105 countSql.append( "SELECT count(artifactId) FROM " ).append( ArchivaArtifactModel.class.getName() );
106 countSql.append( " WHERE repositoryId == \"" ).append( repoId ).append( "\"" );
107 }
108
109 resultClass = Object[].class;
110 }
111
112 @SuppressWarnings("unchecked")
113 public Class getResultClass()
114 {
115 if( resultClass != null )
116 {
117 return resultClass;
118 }
119
120 return String.class;
121 }
122
123 public String getSelectSql()
124 {
125 return sql.toString();
126 }
127
128 @Override
129 public String getCountSql()
130 {
131 return countSql.toString();
132 }
133
134 private void appendGroupBy( StringBuffer buf )
135 {
136 buf.append( " GROUP BY artifactId ORDER BY artifactId ASCENDING" );
137 }
138
139 private void appendSelect( StringBuffer buf, boolean isUnique )
140 {
141 if( isUnique )
142 {
143 buf.append( "SELECT DISTINCT groupId, artifactId FROM " ).append( ArchivaArtifactModel.class.getName() );
144 }
145 else
146 {
147 buf.append( "SELECT artifactId FROM " ).append( ArchivaArtifactModel.class.getName() );
148 }
149 }
150
151 private void appendWhereSelectedGroupId( StringBuffer buf )
152 {
153 buf.append( " groupId == selectedGroupId PARAMETERS String selectedGroupId" );
154 }
155
156 }