/******************************************************************************* * Copyright (c) 2012, 2016 PDT Extension Group and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * PDT Extension Group - initial API and implementation *******************************************************************************/ package org.eclipse.php.composer.api.collection; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import org.eclipse.php.composer.api.VersionedPackage; import org.eclipse.php.composer.api.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(); } }