/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.guvnor.common.services.project.model;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.jboss.errai.common.client.api.annotations.Portable;
@Portable
public class Dependencies
implements List<Dependency> {
private final List<Dependency> dependencies;
public Dependencies() {
dependencies = new ArrayList<Dependency>();
}
public Dependencies( final List<Dependency> dependencies ) {
this.dependencies = dependencies;
}
public boolean containsDependency( final GAV other ) {
for (Dependency dependency : dependencies) {
if ( dependency.isGAVEqual( other ) ) {
return true;
}
}
return false;
}
public Dependency get( final GAV gav ) {
for ( Dependency dependency : dependencies ) {
if ( dependency.isGAVEqual( gav ) ) {
return dependency;
}
}
return null;
}
public Collection<GAV> getGavs( final String... scopes ) {
final List<String> scopesAsList = Arrays.asList( scopes );
if ( scopesAsList.isEmpty() ) {
return new ArrayList<GAV>( dependencies );
} else {
final ArrayList<GAV> result = new ArrayList<GAV>();
for ( Dependency dependency : dependencies ) {
if ( scopesAsList.contains( dependency.getScope() ) ) {
result.add( dependency );
}
}
return result;
}
}
public Collection<GAV> getCompileScopedGavs() {
return getGavs( "compile", null );
}
@Override public int size() {
return dependencies.size();
}
@Override public boolean isEmpty() {
return dependencies.isEmpty();
}
@Override public boolean contains( Object o ) {
return dependencies.contains( o );
}
@Override public Iterator<Dependency> iterator() {
return dependencies.iterator();
}
@Override public Object[] toArray() {
return dependencies.toArray();
}
@Override public <T> T[] toArray( T[] ts ) {
return dependencies.toArray( ts );
}
@Override public boolean add( Dependency dependency ) {
return dependencies.add( dependency );
}
@Override public boolean remove( Object o ) {
return dependencies.remove( o );
}
@Override public boolean containsAll( Collection<?> collection ) {
return dependencies.containsAll( collection );
}
@Override public boolean addAll( Collection<? extends Dependency> collection ) {
return dependencies.addAll( collection );
}
@Override public boolean addAll( int i, Collection<? extends Dependency> collection ) {
return dependencies.addAll( i, collection );
}
@Override public boolean removeAll( Collection<?> collection ) {
return dependencies.removeAll( collection );
}
@Override public boolean retainAll( Collection<?> collection ) {
return dependencies.retainAll( collection );
}
@Override public void clear() {
dependencies.clear();
}
@Override public Dependency get( int i ) {
return dependencies.get( i );
}
@Override public Dependency set( int i, Dependency dependency ) {
return dependencies.set( i, dependency );
}
@Override public void add( int i, Dependency dependency ) {
dependencies.add( i, dependency );
}
@Override public Dependency remove( int i ) {
return dependencies.remove( i );
}
@Override public int indexOf( Object o ) {
return dependencies.indexOf( o );
}
@Override public int lastIndexOf( Object o ) {
return dependencies.lastIndexOf( o );
}
@Override public ListIterator<Dependency> listIterator() {
return dependencies.listIterator();
}
@Override public ListIterator<Dependency> listIterator( int i ) {
return dependencies.listIterator( i );
}
@Override public List<Dependency> subList( int i, int i1 ) {
return dependencies.subList( i, i1 );
}
}