00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
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.common.util.log.LogManager;
00033 import org.openmobileis.synchro.openmsp.server.synctarget.proxy.ProxySyncroTarget;
00034
00042 public final class SynchroTargerManager {
00043 private static SynchroTargerManager manager;
00044 private HashMap targetMap;
00045 private HashMap proxyList;
00046 private ProxySyncroTarget defaultProxy;
00047
00048 class TargetVersion {
00049 UserTerminal terminal;
00050 String version;
00051 OpenMSPSynchroTargetListener target;
00052 }
00053
00054 class TargetContainer {
00055 Array TargetList;
00056 String targetName;
00057
00058 public boolean equals(Object obj) {
00059 if ((obj != null)
00060 && (obj instanceof TargetContainer)
00061 && ((TargetContainer)obj).targetName.equals(this.targetName)
00062 ) {
00063 return true;
00064 }
00065 return false;
00066 }
00067
00068 public int hashCode() {
00069 return this.targetName.hashCode();
00070 }
00071 }
00072
00076 private SynchroTargerManager() {
00077 super();
00078 targetMap = new HashMap(20);
00079 proxyList = new HashMap(10);
00080 }
00081
00082 public static SynchroTargerManager getManager() {
00083 if (manager == null) {
00084 synchronized (SynchroTargerManager.class) {
00085 if (manager == null) {
00086 manager = new SynchroTargerManager();
00087 ApplicationContextManager.getManager().addManager(manager);
00088 }
00089 }
00090 }
00091 return manager;
00092 }
00093
00100 public void registerProxyTargetForTerminal(ProxySyncroTarget proxy, UserTerminal terminal) {
00101 if(terminal == null){
00102 defaultProxy = proxy;
00103 }
00104 proxyList.put(terminal, proxy);
00105 }
00106
00117 public void addSynchroTargetListener(OpenMSPSynchroTargetListener listener, String version, UserTerminal terminal) {
00118 TargetContainer container = (TargetContainer)targetMap.get(listener.getTargetName());
00119 if (container == null) {
00120 container = new TargetContainer();
00121 container.TargetList = new Array();
00122 container.targetName = listener.getTargetName();
00123 targetMap.put(listener.getTargetName(), container);
00124 }
00125 TargetVersion target = new TargetVersion();
00126 target.target = listener;
00127 target.version = version;
00128 target.terminal = terminal;
00129 container.TargetList.add(target);
00130 }
00131
00141 public OpenMSPSynchroTargetListener getSynchroTargetListener(String listenerName, String version , UserTerminal terminal) {
00142 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener String listenerName, String version."+listenerName+" / "+version);
00143 TargetContainer container = (TargetContainer)targetMap.get(listenerName);
00144 if ((container == null) || (container.TargetList.size() == 0)) {
00145 return null;
00146 }
00147 OpenMSPSynchroTargetListener foundlistener = ((TargetVersion)container.TargetList.get(0)).target;
00148 int size = container.TargetList.size();
00149 for (int i=0; i<size; i++) {
00150 TargetVersion currentTarget = (TargetVersion)container.TargetList.get(i);
00151 if ((version != null) && (terminal != null)) {
00152 if ((currentTarget.version != null) && (currentTarget.terminal != null)) {
00153 if ((currentTarget.version.equals(version)) && (currentTarget.terminal.equals(terminal))){
00154 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener for version&terminal :"+currentTarget.version);
00155 foundlistener = currentTarget.target;
00156 break;
00157 }
00158 }else if ((currentTarget.version != null) && (currentTarget.version.equals(version))) {
00159 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener for version."+currentTarget.version);
00160 foundlistener = currentTarget.target;
00161 }else if ((currentTarget.terminal != null) && (currentTarget.terminal.equals(terminal))) {
00162 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener for teminal."+currentTarget.version);
00163 foundlistener = currentTarget.target;
00164 }
00165 } else if (version != null) {
00166 if ((currentTarget.version != null) && (currentTarget.version.equals(version))) {
00167 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener for version 2."+currentTarget.version);
00168 foundlistener = currentTarget.target;
00169 }
00170 } else if (terminal != null) {
00171 if ((currentTarget.terminal != null) && (currentTarget.terminal.equals(terminal))) {
00172 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener for terminal 2."+currentTarget.version);
00173 foundlistener = currentTarget.target;
00174 }
00175 } else {
00176 if ((currentTarget.terminal == null) && (currentTarget.version == null)) {
00177 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener for NOT version& NOT terminal."+currentTarget.version);
00178 foundlistener = currentTarget.target;
00179 }
00180 }
00181 }
00182 LogManager.traceDebug(0, "SynchroTargerManager getSynchroTargetListener found listener object:"+foundlistener);
00183 return foundlistener;
00184 }
00185
00186 public ProxySyncroTarget getProxySynchroTargetForTerminal(UserTerminal terminal) {
00187 ProxySyncroTarget proxy = (ProxySyncroTarget)proxyList.get(terminal);
00188 if (proxy == null) {
00189 proxy = defaultProxy;
00190 }
00191 return proxy;
00192 }
00193
00194 }