3131import com .cloud .tags .ResourceTagVO ;
3232import com .cloud .utils .db .Filter ;
3333import com .cloud .utils .db .GenericDaoBase ;
34+ import com .cloud .utils .db .GenericSearchBuilder ;
3435import com .cloud .utils .db .SearchBuilder ;
3536import com .cloud .utils .db .SearchCriteria ;
3637import com .cloud .utils .db .SearchCriteria .Op ;
@@ -124,12 +125,13 @@ public List<? extends ResourceTag> listByResourceUuid(String resourceUuid) {
124125 }
125126
126127 @ Override
127- public List <ResourceTagVO > listByResourceTypeKeyAndOwners (ResourceObjectType resourceType , String key ,
128- List <Long > accountIds , List <Long > domainIds ,
129- Filter filter ) {
130- SearchBuilder <ResourceTagVO > sb = createSearchBuilder ();
128+ public List <String > listByResourceTypeKeyPrefixAndOwners (ResourceObjectType resourceType , String key ,
129+ List <Long > accountIds , List <Long > domainIds ,
130+ Filter filter ) {
131+ GenericSearchBuilder <ResourceTagVO , String > sb = createSearchBuilder (String .class );
132+ sb .select (null , SearchCriteria .Func .DISTINCT , sb .entity ().getValue ());
131133 sb .and ("resourceType" , sb .entity ().getResourceType (), Op .EQ );
132- sb .and ("key" , sb .entity ().getKey (), Op .EQ );
134+ sb .and ("key" , sb .entity ().getKey (), Op .LIKE );
133135 boolean accountIdsNotEmpty = CollectionUtils .isNotEmpty (accountIds );
134136 boolean domainIdsNotEmpty = CollectionUtils .isNotEmpty (domainIds );
135137 if (accountIdsNotEmpty || domainIdsNotEmpty ) {
@@ -138,30 +140,45 @@ public List<ResourceTagVO> listByResourceTypeKeyAndOwners(ResourceObjectType res
138140 sb .cp ();
139141 }
140142 sb .done ();
141- final SearchCriteria <ResourceTagVO > sc = sb .create ();
143+ final SearchCriteria <String > sc = sb .create ();
142144 sc .setParameters ("resourceType" , resourceType );
143- sc .setParameters ("key" , key );
145+ sc .setParameters ("key" , key + "%" );
144146 if (accountIdsNotEmpty ) {
145147 sc .setParameters ("account" , accountIds .toArray ());
146148 }
147149 if (domainIdsNotEmpty ) {
148150 sc .setParameters ("domain" , domainIds .toArray ());
149151 }
150- return listBy (sc , filter );
152+ return customSearch (sc , filter );
151153 }
152154
153155 @ Override
154- public ResourceTagVO findByResourceTypeKeyAndValue (ResourceObjectType resourceType , String key ,
156+ public ResourceTagVO findByResourceTypeKeyPrefixAndValue (ResourceObjectType resourceType , String key ,
155157 String value ) {
156158 SearchBuilder <ResourceTagVO > sb = createSearchBuilder ();
157159 sb .and ("resourceType" , sb .entity ().getResourceType (), Op .EQ );
158- sb .and ("key" , sb .entity ().getKey (), Op .EQ );
160+ sb .and ("key" , sb .entity ().getKey (), Op .LIKE );
159161 sb .and ("value" , sb .entity ().getValue (), Op .EQ );
160162 sb .done ();
161163 final SearchCriteria <ResourceTagVO > sc = sb .create ();
162164 sc .setParameters ("resourceType" , resourceType );
163- sc .setParameters ("key" , key );
165+ sc .setParameters ("key" , key + "%" );
164166 sc .setParameters ("value" , value );
165167 return findOneBy (sc );
166168 }
169+
170+ @ Override
171+ public List <ResourceTagVO > listByResourceTypeIdAndKeyPrefix (ResourceObjectType resourceType , long resourceId ,
172+ String key ) {
173+ SearchBuilder <ResourceTagVO > sb = createSearchBuilder ();
174+ sb .and ("resourceType" , sb .entity ().getResourceType (), Op .EQ );
175+ sb .and ("resourceId" , sb .entity ().getResourceId (), Op .EQ );
176+ sb .and ("key" , sb .entity ().getKey (), Op .LIKE );
177+ sb .done ();
178+ final SearchCriteria <ResourceTagVO > sc = sb .create ();
179+ sc .setParameters ("resourceType" , resourceType );
180+ sc .setParameters ("resourceId" , resourceId );
181+ sc .setParameters ("key" , key + "%" );
182+ return listBy (sc );
183+ }
167184}
0 commit comments