001: /*
002: * (C) Copyright 2000 - 2005 Nabh Information Systems, Inc.
003: *
004: * This program is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU General Public License
006: * as published by the Free Software Foundation; either version 2
007: * of the License, or (at your option) any later version.
008: *
009: * This program is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: * GNU General Public License for more details.
013: *
014: * You should have received a copy of the GNU General Public License
015: * along with this program; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017: *
018: */
019: package com.nabhinc.ws.server;
020:
021: import java.util.ArrayList;
022: import java.util.Collections;
023: import java.util.Hashtable;
024: import java.util.List;
025:
026: import com.nabhinc.ws.core.WebServiceException;
027:
028: /**
029: * A simple List/Hashtable-based implementation of WebServiceDirectory
030: * interface.
031: *
032: * @author Padmanabh Dabke
033: * (c) 2005 Nabh Information Systems, Inc. All Rights Reserved.
034: */
035: public class WebServiceDirectoryImpl extends ServerObjectImpl implements
036: WebServiceDirectory {
037:
038: /**
039: * List of WebServiceInfo objects used to maintain the registration order.
040: */
041: private static List wriServiceInfoList = new ArrayList();
042:
043: /**
044: * Hashtable that keeps a two way mapping between local services and their
045: * IDs.
046: */
047: private static Hashtable wriServiceInfoMap = new Hashtable();
048:
049: public WebServiceDirectoryImpl() {
050: WebServiceDirectoryLocator.setWebServiceDirectory(this );
051: }
052:
053: /**
054: * @see com.nabhinc.ws.core.WebServiceRegistry#register(com.nabhinc.ws.core.WebServiceInfo)
055: */
056: public synchronized void register(WebServiceInfo sInfo)
057: throws WebServiceException {
058: if (wriServiceInfoMap.get(sInfo.name) != null) {
059: throw new WebServiceException("Duplicate service name: "
060: + sInfo.name + ".");
061: } else {
062: wriServiceInfoMap.put(sInfo.name, sInfo);
063: wriServiceInfoList.add(sInfo);
064: }
065:
066: }
067:
068: /**
069: * @see com.nabhinc.ws.core.WebServiceRegistry#unregister(java.lang.String)
070: */
071: public void unregister(String name) throws WebServiceException {
072: Object obj = wriServiceInfoMap.remove(name);
073: if (obj != null)
074: wriServiceInfoList.remove(obj);
075: }
076:
077: /**
078: * Looks up a WebServiceInfo given its name.
079: *
080: * @param name
081: * Web service name
082: */
083: public WebServiceInfo lookup(String name) {
084: return (WebServiceInfo) wriServiceInfoMap.get(name);
085: }
086:
087: /**
088: * Looks up a WebServiceInfo of specified type/class.
089: *
090: * @param wsType Web service class/interface
091: *
092: */
093: public WebServiceInfo lookupByType(Class wsType) {
094: for (int i = 0; i < wriServiceInfoList.size(); i++) {
095: WebServiceInfo wsi = (WebServiceInfo) wriServiceInfoList
096: .get(i);
097: if (wsi.webService != null && wsi.isRunning) {
098: if (wsType.isAssignableFrom(wsi.webService.getClass()))
099: return wsi;
100: }
101: }
102: return null;
103: }
104:
105: /**
106: * Returns an unmodifiable list of registered WebServiceInfo objects.
107: */
108: public List getWebServiceInfoList() {
109: return Collections.unmodifiableList(wriServiceInfoList);
110: }
111:
112: }
|