Package org.ggp.base.util.ui

Source Code of org.ggp.base.util.ui.GameSelector$NamedItem

package org.ggp.base.util.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JComboBox;

import org.ggp.base.util.game.CloudGameRepository;
import org.ggp.base.util.game.Game;
import org.ggp.base.util.game.GameRepository;
import org.ggp.base.util.game.LocalGameRepository;


/**
* GameSelector is a pair of widgets for selecting a game repository
* and then choosing a game from that game repository. Currently this
* is a little rough, and could use some polish, but it provides all
* of the important functionality: you can load games both from local
* storage and from game repositories on the web.
*
* @author Sam Schreiber
*/
public class GameSelector implements ActionListener {
    JComboBox<NamedItem> theGameList;
    JComboBox<String> theRepositoryList;

    GameRepository theSelectedRepository;
    Map<String, GameRepository> theCachedRepositories;

    class NamedItem {
        public final String theKey;
        public final String theName;

        public NamedItem(String theKey, String theName) {
            this.theKey = theKey;
            this.theName = theName;
        }

        @Override
    public String toString() {
            return theName;
        }
    }

    public GameSelector() {
        theGameList = new JComboBox<NamedItem>();
        theGameList.addActionListener(this);

        theRepositoryList = new JComboBox<String>();
        theRepositoryList.addActionListener(this);

        theCachedRepositories = new HashMap<String, GameRepository>();
        theRepositoryList.addItem("games.ggp.org/base");
        theRepositoryList.addItem("games.ggp.org/dresden");
        theRepositoryList.addItem("games.ggp.org/stanford");
        theRepositoryList.addItem("Local Game Repository");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == theRepositoryList) {
            String theRepositoryName = theRepositoryList.getSelectedItem().toString();
            if (theCachedRepositories.containsKey(theRepositoryName)) {
                theSelectedRepository = theCachedRepositories.get(theRepositoryName);
            } else {
                if (theRepositoryName.equals("Local Game Repository")) {
                    theSelectedRepository = new LocalGameRepository();
                } else {
                    theSelectedRepository = new CloudGameRepository(theRepositoryName);
                }
                theCachedRepositories.put(theRepositoryName, theSelectedRepository);
            }
            repopulateGameList();
        }
    }

    public GameRepository getSelectedGameRepository() {
        return theSelectedRepository;
    }

    public void repopulateGameList() {
        GameRepository theRepository = getSelectedGameRepository();
        List<String> theKeyList = new ArrayList<String>(theRepository.getGameKeys());
        Collections.sort(theKeyList);
        theGameList.removeAllItems();
        for (String theKey : theKeyList) {
            Game theGame = theRepository.getGame(theKey);
            if (theGame == null) {
                continue;
            }
            String theName = theGame.getName();
            if (theName == null) {
                theName = theKey;
            }
            if (theName.length() > 24)
                theName = theName.substring(0, 24) + "...";
            theGameList.addItem(new NamedItem(theKey, theName));
        }
    }

    public JComboBox<String> getRepositoryList() {
        return theRepositoryList;
    }

    public JComboBox<NamedItem> getGameList() {
        return theGameList;
    }

    public Game getSelectedGame() {
        try {
            return getSelectedGameRepository().getGame(((NamedItem)theGameList.getSelectedItem()).theKey);
        } catch(Exception e) {
            return null;
        }
    }
}
TOP

Related Classes of org.ggp.base.util.ui.GameSelector$NamedItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.