001package jmri.jmrit.logixng;
002
003import java.util.List;
004import java.util.Map;
005import javax.annotation.Nonnull;
006
007/**
008 * Manager for DigitalExpressionBean
009 * 
010 * @author Dave Duchamp       Copyright (C) 2007
011 * @author Daniel Bergqvist   Copyright (C) 2018
012 */
013public interface DigitalExpressionManager extends BaseManager<MaleDigitalExpressionSocket> {
014
015    /**
016     * Remember a NamedBean Object created outside the manager.
017     * This method creates a MaleActionSocket for the action.
018     *
019     * @param expression the bean
020     * @return the male socket for this expression
021     * @throws IllegalArgumentException if the expression has an invalid system name
022     */
023    MaleDigitalExpressionSocket registerExpression(@Nonnull DigitalExpressionBean expression)
024            throws IllegalArgumentException;
025    
026    /**
027     * Create a new system name for an DigitalExpressionBean.
028     * @return a new system name
029     */
030    String getAutoSystemName();
031
032    FemaleDigitalExpressionSocket createFemaleSocket(
033            Base parent, FemaleSocketListener listener, String socketName);
034/*
035    FemaleDigitalExpressionSocket createFemaleExpressionSocket(
036            Base parent,
037            FemaleSocketListener listener,
038            String socketName,
039            MaleDigitalExpressionSocket maleSocket);
040*/
041    /**
042     * Get a set of classes that implements the DigitalAction interface.
043     * 
044     * @return a set of entries with category and class
045     */
046    Map<Category, List<Class<? extends Base>>> getExpressionClasses();
047
048    /*.*
049     * Add an DigitalExpressionBean.
050     *
051     * @param expression the expression to add
052     * @throws IllegalArgumentException if the expression has an invalid system name
053     */
054//    void addExpression(DigitalExpressionBean expression)
055//            throws IllegalArgumentException;
056
057    /*.*
058     * Locate via user name, then system name if needed. Does not create a new
059     * one if nothing found
060     *
061     * @param name User name or system name to match
062     * @return null if no match found
063     */
064//    DigitalExpressionBean getExpression(String name);
065
066//    DigitalExpressionBean getByUserName(String s);
067
068//    DigitalExpressionBean getBySystemName(String s);
069
070    /**
071     * {@inheritDoc}
072     * 
073     * The sub system prefix for the DigitalExpressionManager is
074     * {@link #getSystemNamePrefix() } and "DE";
075     */
076    @Override
077    default String getSubSystemNamePrefix() {
078        return getSystemNamePrefix() + "DE";
079    }
080
081    /**
082     * Delete DigitalExpression by removing it from the manager. The Expression must
083     * first be deactivated so it stops processing.
084     *
085     * @param x the DigitalExpression to delete
086     */
087    void deleteDigitalExpression(MaleDigitalExpressionSocket x);
088
089}