SynchroTargerManager.java

00001 /*
00002  * OpenMobileIS - a free Java(TM) Framework for mobile applications Java(TM)
00003  * Copyright (C) 2004-2006 Philippe Delrieu
00004  * All rights reserved.
00005  * Contact: pdelrieu@openmobileis.org
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with this library; if not, write to the Free Software
00019  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
00020  * USA
00021  *
00022  *  Author : Philippe Delrieu
00023  * 
00024  */
00025 package org.openmobileis.synchro.openmsp.server.synctarget;
00026 
00027 import java.util.HashMap;
00028 
00029 import org.openmobileis.common.context.ApplicationContextManager;
00030 import org.openmobileis.common.context.UserTerminal;
00031 import org.openmobileis.common.util.collection.Array;
00032 import org.openmobileis.synchro.openmsp.server.synctarget.proxy.ProxySyncroTarget;
00033 
00041 public final class SynchroTargerManager {
00042   private static SynchroTargerManager manager;
00043   private HashMap targetMap;
00044   private HashMap proxyList;
00045   private ProxySyncroTarget defaultProxy;
00046   
00047   class TargetVersion {
00048     UserTerminal terminal;
00049     String version;
00050     OpenMSPSynchroTargetListener target; 
00051   }
00052   
00053   class TargetContainer {
00054     Array TargetList;
00055     String targetName;
00056     
00057     public boolean equals(Object obj) {
00058       if ((obj != null)
00059         && (obj instanceof TargetContainer)
00060         && ((TargetContainer)obj).targetName.equals(this.targetName)
00061       ) {
00062         return true;
00063       }
00064       return false;
00065     }
00066 
00067     public int hashCode() {
00068       return this.targetName.hashCode();
00069     }
00070   }
00071   
00075   private SynchroTargerManager() {
00076     super();
00077     targetMap = new HashMap(20);
00078     proxyList = new HashMap(10);
00079   }
00080   
00081   public static SynchroTargerManager getManager() {
00082     if (manager == null)  {
00083       synchronized (SynchroTargerManager.class) {
00084         if (manager == null)  {
00085           manager = new SynchroTargerManager();
00086           ApplicationContextManager.getManager().addManager(manager);
00087         }
00088       }
00089     }
00090     return manager;
00091   }
00092   
00093   public void registerProxyTargetForTerminal(ProxySyncroTarget proxy, UserTerminal terminal)  {
00094     if(terminal == null){
00095         defaultProxy = proxy;
00096     }
00097           proxyList.put(terminal, proxy);
00098   }
00099   
00110   public void addSynchroTargetListener(OpenMSPSynchroTargetListener listener, String version, UserTerminal terminal)  {
00111     TargetContainer container = (TargetContainer)targetMap.get(listener.getTargetName());
00112     if (container == null)  {
00113       container = new TargetContainer();
00114       container.TargetList = new Array();
00115       container.targetName = listener.getTargetName();
00116       targetMap.put(listener.getTargetName(), container);
00117     }
00118     TargetVersion target = new TargetVersion();
00119     target.target = listener;
00120     target.version = version;
00121     target.terminal = terminal;
00122     container.TargetList.add(target);
00123   }
00124   
00134   public OpenMSPSynchroTargetListener getSynchroTargetListener(String listenerName, String version , UserTerminal terminal) {
00135     TargetContainer container = (TargetContainer)targetMap.get(listenerName);
00136     if ((container == null) || (container.TargetList.size() == 0))  {
00137       return null;
00138     }  
00139     OpenMSPSynchroTargetListener foundlistener = ((TargetVersion)container.TargetList.get(0)).target;
00140     int size = container.TargetList.size();
00141     for (int i=0; i<size; i++)  {
00142       TargetVersion currentTarget = (TargetVersion)container.TargetList.get(i);
00143       if ((version != null) && (terminal != null))  {
00144         if ((currentTarget.version != null) && (currentTarget.terminal != null)) {
00145           if ((currentTarget.version.equals(version)) && (currentTarget.terminal.equals(terminal))){
00146             foundlistener = currentTarget.target;
00147             break;
00148           }
00149         }else   if ((currentTarget.version != null) && (currentTarget.version.equals(version))) {
00150           foundlistener = currentTarget.target;
00151         }else   if ((currentTarget.terminal != null) && (currentTarget.terminal.equals(terminal))) {
00152           foundlistener = currentTarget.target;
00153         }
00154       } else  if (version != null)  {
00155         if ((currentTarget.version != null) && (currentTarget.version.equals(version))) {
00156           foundlistener = currentTarget.target;
00157         }
00158       } else  if (terminal != null)  {
00159         if ((currentTarget.terminal != null) && (currentTarget.terminal.equals(terminal))) {
00160           foundlistener = currentTarget.target;
00161         }
00162       } else  {
00163         if ((currentTarget.terminal == null) && (currentTarget.version == null)) {
00164           foundlistener = currentTarget.target;
00165         }
00166       }
00167     }
00168     return foundlistener;
00169   }
00170   
00171   public ProxySyncroTarget getProxySynchroTargetForTerminal(UserTerminal terminal)  {
00172     ProxySyncroTarget proxy = (ProxySyncroTarget)proxyList.get(terminal);
00173     if (proxy == null)  {
00174       proxy  = defaultProxy;
00175     }
00176     return proxy;
00177   }
00178 
00179 }

Generated on Tue May 22 23:01:12 2007 for OpenMobileIS by  doxygen 1.5.1-p1