private void addBlock(RenderableBlock block) {
        //check invariant
        if (block == null || block.getBlockID() == null
                || block.getBlockID().equals(Block.NULL)
                || workspace.getEnv().getBlock(block.getBlockID()) == null
                || workspace.getEnv().getBlock(block.getBlockID()).getGenusName() == null
                || workspace.getEnv().getBlock(block.getBlockID()).getGenusName().length() == 0
                || workspace.getEnv().getBlock(block.getBlockID()).getBlockLabel() == null) {
            throw new RuntimeException("Invariant Violated: may not pass an invalid instance of renderabel block");
        }

        //ignore default arguments
        block.ignoreDefaultArguments();
        this.blockCanvas.getCanvas().add(block, 0);
        block.setLocation(0, 0);
        Long parentBlockID = this.focusManager.getFocusBlockID();
        if (invalidBlockID(parentBlockID)) {
            new BlockDropAnimator(
                    workspace,
                    this.focusManager.getCanvasPoint(),
                    block,
                    workspace.getEnv().getRenderableBlock(parentBlockID));
        } else {
            RenderableBlock parentBlock = workspace.getEnv().getRenderableBlock(parentBlockID);
            new BlockDropAnimator(
                    workspace,
                    SwingUtilities.convertPoint(parentBlock,
                    this.focusManager.getBlockPoint(),
                    this.blockCanvas.getCanvas()),
                    block,
                    workspace.getEnv().getRenderableBlock(parentBlockID));
        }
        this.focusManager.setFocus(block.getBlockID());
    }