All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bidib.wizard.mvc.features.controller.FeaturesController Maven / Gradle / Ivy

There is a newer version: 2.0.0-M1
Show newest version
package org.bidib.wizard.mvc.features.controller;

import java.util.Collection;
import java.util.HashSet;

import javax.swing.JFrame;

import org.bidib.jbidibc.core.Feature;
import org.bidib.wizard.mvc.features.controller.listener.FeaturesControllerListener;
import org.bidib.wizard.mvc.features.model.FeaturesModel;
import org.bidib.wizard.mvc.features.view.FeaturesView;
import org.bidib.wizard.mvc.features.view.listener.FeaturesViewListener;
import org.bidib.wizard.mvc.main.model.MainModel;
import org.bidib.wizard.mvc.main.model.Node;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class FeaturesController {
    private static final Logger LOGGER = LoggerFactory.getLogger(FeaturesController.class);

    private final Collection listeners = new HashSet();

    private final JFrame parent;

    private final Node node;

    private final int x;

    private final int y;

    private final FeaturesModel model = new FeaturesModel();

    private final MainModel mainModel;

    private FeaturesView view;

    public FeaturesController(JFrame parent, MainModel mainModel, Node node, int x, int y) {
        this.parent = parent;
        this.mainModel = mainModel;
        this.node = node;
        this.x = x;
        this.y = y;
    }

    public void addFeaturesControllerListener(FeaturesControllerListener listener) {
        listeners.add(listener);
    }

    private void fireClose() {
        for (FeaturesControllerListener listener : listeners) {
            listener.close();
        }
    }

    private void fireReadAll() {
        LOGGER.debug("Read all features.");

        // TODO read the features from the mainModel ...

        for (FeaturesControllerListener listener : listeners) {
            listener.readAll(node);
        }
    }

    /**
     * Write a feature to the node.
     * 
     * @param feature
     *            the feature to write
     */
    private void fireWrite(Feature feature) {
        LOGGER.debug("Write feature to node, feature: {}", feature);
        for (FeaturesControllerListener listener : listeners) {
            listener.write(node, feature);
        }
    }

    public void start() {
        view = new FeaturesView(parent, model, x, y);
        view.addFeaturesViewListener(new FeaturesViewListener() {
            @Override
            public void close() {
                fireClose();
            }

            @Override
            public void write(Collection features) {

                // iterate over the features and write the values
                for (Feature feature : features) {
                    // TODO what happens if an error occurs?
                    try {
                        fireWrite(feature);
                    }
                    catch (Exception ex) {
                        LOGGER.warn("Write feature failed.", ex);
                    }
                }

                // update the features in the main model
                mainModel.setFeatures(model.getFeatures());
            }
        });

        // initially read all features
        fireReadAll();

        // make the view visible
        view.setVisible(true);
    }

    public void setFeatures(Collection features) {
        LOGGER.debug("Set the features in the model.");

        model.setFeatures(features);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy