Package org.puremvc.java.multicore.core.model

Source Code of org.puremvc.java.multicore.core.model.Model

/*
PureMVC Java MultiCore Port by Ima OpenSource <opensource@ima.eu>
Maintained by Anthony Quinault <anthony.quinault@puremvc.org>
PureMVC - Copyright(c) 2006-08 Futurescale, Inc., Some rights reserved.
Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.multicore.core.model;

import java.util.HashMap;
import java.util.Map;

import org.puremvc.java.multicore.interfaces.IModel;
import org.puremvc.java.multicore.interfaces.IProxy;

/**
* A Multiton <code>IModel</code> implementation.
*
* <P>
* In PureMVC, the <code>Model</code> class provides
* access to model objects (Proxies) by named lookup.
*
* <P>
* The <code>Model</code> assumes these responsibilities:</P>
*
* <UL>
* <LI>Maintain a cache of <code>IProxy</code> instances.</LI>
* <LI>Provide methods for registering, retrieving, and removing
* <code>IProxy</code> instances.</LI>
* </UL>
*
* <P>
* Your application must register <code>IProxy</code> instances
* with the <code>Model</code>. Typically, you use an
* <code>ICommand</code> to create and register <code>IProxy</code>
* instances once the <code>Facade</code> has initialized the Core
* actors.</p>
*
* @see org.puremvc.java.multicore.patterns.proxy.Proxy Proxy
* @see org.puremvc.java.multicore.interfaces.IProxy IProxy
*/
public class Model implements IModel {

  /**
   * Singleton instance.
   */
  protected static Model instance;

  /**
   * Mapping of proxyNames to IProxy instances.
   */
  protected Map<String, IProxy> proxyMap;

  /**
   *    The Multiton Key for this Core.
   */
  protected String multitonKey;

  protected static Map<String, Model> instanceMap = new HashMap<String, Model>();

  /**
   * Constructor.
   *
   * <P>
   * This <code>IModel</code> implementation is a Multiton
   * so you should not call the constructor
   * directly, but instead call the static Multiton
   * Factory method <code>Model.getInstance( multitonKey )</code>
   *
   * @throws Error Error if instance for this Multiton key instance has already been constructed
   *
   */
  protected Model(String key) {
    multitonKey = key;
    instanceMap.put(multitonKey, this);
    this.proxyMap = new HashMap<String, IProxy>();
    initializeModel();
  }

  /**
   * Initialize the Singleton <code>Model</code> instance.
   *
   * <P>
   * Called automatically by the constructor, this is your opportunity to
   * initialize the Singleton instance in your subclass without overriding the
   * constructor.
   * </P>
   *
   */
  protected void initializeModel() {
  }

  /**
   * <code>Model</code> Multiton Factory method.
   *
   * @return the instance for this Multiton key
   */
  public synchronized static Model getInstance(String key) {
    if (instanceMap.get(key) == null) {
      new Model(key);
    }
    return instanceMap.get(key);
  }

  /**
   * Register an <code>Proxy</code> with the <code>Model</code>.
   *
   * @param proxy
   *            an <code>Proxy</code> to be held by the <code>Model</code>.
   */
  public void registerProxy(IProxy proxy) {
    proxy.initializeNotifier(multitonKey);
    this.proxyMap.put(proxy.getProxyName(), proxy);
    proxy.onRegister();
  }

  /**
   * Remove an <code>Proxy</code> from the <code>Model</code>.
   *
   * @param proxy
   *            name of the <code>Proxy</code> instance to be removed.
   */
  public IProxy removeProxy(String proxyName) {
    IProxy proxy = (IProxy) this.proxyMap.get(proxyName);
    if(proxy != null){
      this.proxyMap.remove(proxyName);
      proxy.onRemove();
    }
    return proxy;
  }

  /**
   * Retrieve an <code>Proxy</code> from the <code>Model</code>.
   *
   * @param proxy
   * @return the <code>Proxy</code> instance previously registered with the
   *         given <code>proxyName</code>.
   */
  public IProxy retrieveProxy(String proxy) {
    return (IProxy) this.proxyMap.get(proxy);
  }

  /**
   * Remove an IModel instance
   *
   * @param multitonKey of IModel instance to remove
   */
  public synchronized static void removeModel(String key) {
    instanceMap.remove(key);
  }

  /**
   * Check if a Proxy is registered
   *
   * @param proxyName
   * @return whether a Proxy is currently registered with the given <code>proxyName</code>.
   */
  public boolean hasProxy(String proxyName) {
    return proxyMap.containsKey(proxyName);
  }
}
TOP

Related Classes of org.puremvc.java.multicore.core.model.Model

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.