package com.tinkerpop.pipes.transform; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Element; import com.tinkerpop.pipes.AbstractPipe; import java.util.HashMap; import java.util.Map; /** * PropertyMapPipe emits the property map of an element. * * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class PropertyMapPipe<S extends Element> extends AbstractPipe<S, Map<String, Object>> implements TransformPipe<S, Map<String, Object>> { private final String[] keys; private static final String ID = "id"; private static final String LABEL = "label"; public PropertyMapPipe(final String... keys) { this.keys = keys; } protected Map<String, Object> processNextStart() { final S element = this.starts.next(); final Map<String, Object> map = new HashMap<String, Object>(); if (this.keys.length == 0) { // TODO: add ID and LABEL as properties? for (final String key : element.getPropertyKeys()) { map.put(key, element.getProperty(key)); } } else { for (final String key : this.keys) { if (key.equals(ID)) map.put(ID, element.getId()); else if (element instanceof Edge && key.equals(LABEL)) map.put(LABEL, ((Edge) element).getLabel()); else map.put(key, element.getProperty(key)); } } return map; } }