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.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 }