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(); } }