org.polarsys.reqcycle.utils.iterators.collectors.ArcHarvester.java Source code

Java tutorial

Introduction

Here is the source code for org.polarsys.reqcycle.utils.iterators.collectors.ArcHarvester.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Atos.
 * 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:
 *     Atos - initial API and implementation
 ******************************************************************************/
package org.polarsys.reqcycle.utils.iterators.collectors;

import java.util.List;

import org.polarsys.reqcycle.utils.iterators.exceptions.CollectionAbortedException;
import org.polarsys.reqcycle.utils.iterators.handlers.ResultHandler;
import org.polarsys.reqcycle.utils.iterators.pickers.ArcPicker;
import org.polarsys.reqcycle.utils.iterators.pickers.IArc;
import org.polarsys.reqcycle.utils.iterators.pickers.IPicker;

import com.google.common.collect.Lists;

/**
 * Decorator for the harvester class to transform its nature from a state-aware harvester to a transition-aware harvester, meaning that it collects links (arcs) instead of elements (states).
 * 
 */
public class ArcHarvester implements IHarvester {

    private IHarvester basicHarvester;

    private Object startingElement;

    private Iterable<IPicker> pickers;

    public ArcHarvester(IHarvester basicHarvester, Iterable<IPicker> basicPickers) {
        this.basicHarvester = basicHarvester;
        this.pickers = basicPickers;

        // Transforming the original pickers into arc pickers.
        List<IPicker> arcPickers = Lists.newLinkedList();
        for (IPicker basicPicker : basicPickers) {
            ArcPicker arcPicker = new ArcPicker(basicPicker);
            arcPickers.add(arcPicker);
        }
        this.basicHarvester.setPickers(arcPickers);
    }

    public void collect(ResultHandler<Object> handler) throws CollectionAbortedException {
        basicHarvester.collect(handler);
    }

    public Object getStartingElement() {
        return startingElement;
    }

    public void setStartingElement(Object startingElement) {
        this.startingElement = startingElement;
        StartingArc startingArc = new StartingArc(startingElement);
        this.basicHarvester.setStartingElement(startingArc);
    }

    public Iterable<IPicker> getPickers() {
        return this.pickers;
    }

    public void setPickers(Iterable<IPicker> basicPickers) {
        this.pickers = basicPickers;

        // Transforming the original pickers into arc pickers.
        List<IPicker> arcPickers = Lists.newLinkedList();
        for (IPicker basicPicker : basicPickers) {
            ArcPicker arcPicker = new ArcPicker(basicPicker);
            arcPickers.add(arcPicker);
        }
        this.basicHarvester.setPickers(arcPickers);
    }

    /**
     * Entrance of a transition-based iterator. Does not have an origin.
     */
    public class StartingArc implements IArc {

        Object startingElement;

        public StartingArc(Object startingElement) {
            this.startingElement = startingElement;
        }

        public Object getOrigin() {
            return null;
        }

        /**
         * The starting destination of this arc is the first element of the state-based iterator.
         */
        public Object getDestination() {
            return startingElement;
        }
    }

}