The Source for Java Technology Collaboration


Home | Changes | Index | Search | Go

Project Wonderland v0.5: Common API Patterns and Proposed API Simplification

by Jordan Slott (jslott@dev.java.net)

NOTE: This is a DRAFT. It is currently just a collection of ideas, and does not represent changes that may happen at all.

Introduction

Now that we have some experience using the core API in Project Wonderland 0.5, the following page summarizes some of the most common patterns and suggests ways in which these patterns may more easily be implemented in future versions. These API changes are meant to maintain compatibility with the 0.5 APIs: they simplify the most common API patterns for developers.

Client Message Receiver

Current API

    @Override
    public void setStatus(CellStatus status, boolean increasing) {
        super.setStatus(status, increasing);

        if (status == CellStatus.INACTIVE && increasing == false) {
            ChannelComponent channel = getComponent(ChannelComponent.class);
            channel.removeMessageReceiver(ShapeChangedCellMessage.class);
        }
        else if (status == CellStatus.RENDERING && increasing == true) {
            ShapeCellMessageReceiver recv = new ShapeCellMessageReceiver();
            ChannelComponent channel = getComponent(ChannelComponent.class);
            channel.addMessageReceiver(ShapeChangedCellMessage.class, recv);
        }
    }

    class ShapeCellMessageReceiver implements ComponentMessageReceiver {
        public void messageReceived(CellMessage message) {
            ....
        }
    }

Proposed Future API

    @MessageReceiver(ShapeChangedCellMessage.class)
    public void messageReceived(ShapeChangedCellMessage msg) {
        ...
    }

Server Message Receiver

Current API

    @Override
    protected void setLive(boolean live) {
        super.setLive(live);

        ChannelComponentMO channel = getComponent(ChannelComponentMO.class);
        if (live == true) {
            channel.addMessageReceiver(ShapeChangedCellMessage.class,
                (ChannelComponentMO.ComponentMessageReceiver)new ShapeCellMessageReceiver(this));
        }
        else {
            channel.removeMessageReceiver(ShapeChangedCellMessage.class);
        }
    }

    private static class ShapeCellMessageReceiver extends AbstractComponentMessageReceiver {
        public ShapeCellMessageReceiver(ShapeCellMO cellMO) {
            super(cellMO);
        }

        public void messageReceived(WonderlandClientSender sender, WonderlandClientID clientID, CellMessage message) {
            ....
        }
    }

Proposed Future API

    @MessageReceiver(ShapeChangedCellMessage.class)
    public void messageReceived(WonderlandClientSender sender, WonderlandClientID clientID, CellMessage message) {
        ...
    }

Event Listener

Current API

    @Override
    public void setStatus(CellStatus status, boolean increasing) {
        super.setStatus(status, increasing);

        if (status == CellStatus.INACTIVE && increasing == false) {
            if (listener != null) {
                listener.removeFromEntity(renderer.getEntity());
                listener = null;
            }
        }
        else if (status == CellStatus.RENDERING && increasing == true) {
            if (listener == null) {
                listener = new MouseEventListener();
                listener.addToEntity(renderer.getEntity());
            }
        }
    }

    class MouseEventListener extends EventClassListener {
        @Override
        public Class[] eventClassesToConsume() {
            return new Class[]{MouseButtonEvent3D.class};
        }

        @Override
        public void commitEvent(Event event) {
           ...
        }
    }

Proposed Future API

    @EventReceiver({ MouseButtonEvent3D.class })
    public void eventReceived(MouseButtonEvent3D mbe) {
        ...
    }

Topic ProjectWonderlandAPIPatterns05 . { Edit | Ref-By | Printable | Diffs r2 < r1 | More }
 XML java.net RSS

Revision r2 - 30 Oct 2009 - 20:53:39 - Main.jslott
Parents: WebHome > ProjectWonderland > WonderlandRoadmap > WonderlandReleasepoint5