package com.dubture.getcomposer.core.collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.dubture.getcomposer.core.VersionedPackage;
import com.dubture.getcomposer.core.entities.AbstractJsonObject;
/**
* Represents a dependencies collection of a composer package, either require or
* require-dev
*
* @see http://getcomposer.org/doc/04-schema.md#require
* @see http://getcomposer.org/doc/04-schema.md#require-dev
* @author Thomas Gossmann <gos.si>
*/
public class Dependencies extends AbstractJsonObject<VersionedPackage> implements Iterable<VersionedPackage> {
public Dependencies() {
}
@SuppressWarnings({ "unchecked", "rawtypes" })
protected void doParse(Object obj) {
clear();
if (obj instanceof LinkedHashMap) {
for (Entry<String, Object> entry : ((Map<String, Object>)((LinkedHashMap)obj)).entrySet()) {
VersionedPackage dep = new VersionedPackage();
dep.setName(entry.getKey());
dep.setVersion((String)entry.getValue());
add(dep);
}
}
}
protected Object buildJson() {
LinkedHashMap<String, Object> out = new LinkedHashMap<String, Object>();
for (VersionedPackage dep : this) {
out.put(dep.getName(), dep.getVersion());
}
return out;
}
/**
* Adds a new dependency.
*
* @param dependency the new dependency
* @return this
*/
public void add(VersionedPackage dependency) {
if (!has(dependency)) {
set(dependency.getName(), dependency);
}
}
public void addAll(Dependencies dependencies) {
for (VersionedPackage pkg : dependencies) {
add(pkg);
}
}
public boolean has(VersionedPackage dependency) {
return super.has(dependency.getName());
// TODO: matches version, e.g. ~1 matches 1.0.1 but not 2.* and >1 matches 1.0.1 and 2.*
// if (super.has(dependency.getName())) {
// return get(dependency.getName()).getVersion().equals(dependency.getVersion());
// }
//
// return false;
}
/**
* Removes a dependency.
*
* @param dependency the dependency to remove
*/
public void remove(VersionedPackage dependency) {
super.remove(dependency.getName());
}
public VersionedPackage[] toArray() {
return properties.values().toArray(new VersionedPackage[]{});
}
/*
* (non-Javadoc)
* @see java.lang.Iterable#iterator()
*/
public Iterator<VersionedPackage> iterator() {
return (Iterator<VersionedPackage>)properties.values().iterator();
}
}