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

org.marid.bd.schema.SchemaModel Maven / Gradle / Ivy

/*
 * Copyright (C) 2014 Dmitry Ovchinnikov
 * Marid, the free data acquisition and visualization software
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see .
 */

package org.marid.bd.schema;

import org.marid.bd.Block;
import org.marid.bd.BlockLink;

import javax.xml.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Dmitry Ovchinnikov
 */
@XmlRootElement
@XmlSeeAlso({Schema.class, BlockLayoutInfo.class, BlockLinkLayoutInfo.class})
public class SchemaModel {

    @XmlElement
    protected final Schema schema;

    @XmlElementWrapper(name = "blocks")
    @XmlElementRef
    protected final List blocks;

    @XmlElementWrapper(name = "links")
    @XmlElementRef
    protected final List links;

    public SchemaModel() {
        schema = new Schema();
        blocks = new ArrayList<>();
        links = new ArrayList<>();
    }

    public SchemaModel(SchemaEditor schemaEditor) {
        final List blockList = new ArrayList<>();
        final List linkList = new ArrayList<>();
        this.blocks = new ArrayList<>();
        this.links = new ArrayList<>();
        schemaEditor.visitBlockComponents(c -> {
            blocks.add(new BlockLayoutInfo(c.getLocation(), c.getBlock()));
            blockList.add(c.getBlock());
        });
        schemaEditor.getLinkShapes().forEach(linkShape -> {
            final BlockLink link = new BlockLink(linkShape.output.getOutput(), linkShape.input.getInput());
            links.add(new BlockLinkLayoutInfo(link));
            linkList.add(link);
        });
        this.schema = new Schema(schemaEditor.getName(), blockList, linkList);
    }

    public Schema getSchema() {
        return schema;
    }

    public List getBlocks() {
        return blocks;
    }

    public List getLinks() {
        return links;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy