001 /*
002 GRANITE DATA SERVICES
003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004
005 This file is part of Granite Data Services.
006
007 Granite Data Services is free software; you can redistribute it and/or modify
008 it under the terms of the GNU Library General Public License as published by
009 the Free Software Foundation; either version 2 of the License, or (at your
010 option) any later version.
011
012 Granite Data Services is distributed in the hope that it will be useful, but
013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015 for more details.
016
017 You should have received a copy of the GNU Library General Public License
018 along with this library; if not, see <http://www.gnu.org/licenses/>.
019 */
020
021 package org.granite.config.flex;
022
023 import java.util.HashMap;
024 import java.util.Map;
025
026 import org.granite.util.XMap;
027
028 /**
029 * @author Franck WOLFF
030 */
031 public class Service {
032
033 private final String id;
034 private final String className;
035 private final String messageTypes;
036 private final Map<String, Adapter> adapters;
037 private final Adapter defaultAdapter;
038 private final Map<String, Destination> destinations;
039
040
041 public Service(String id, String className, String messageTypes, Adapter defaultAdapter, Map<String, Adapter> adapters, Map<String, Destination> destinations) {
042 this.id = id;
043 this.className = className;
044 this.messageTypes = messageTypes;
045 this.defaultAdapter = defaultAdapter;
046 this.adapters = adapters;
047 this.destinations = destinations;
048 }
049
050 public String getId() {
051 return id;
052 }
053
054 public String getClassName() {
055 return className;
056 }
057
058 public String getMessageTypes() {
059 return messageTypes;
060 }
061
062 public Destination findDestinationById(String id) {
063 return destinations.get(id);
064 }
065 public Map<String, Destination> getDestinations() {
066 return destinations;
067 }
068
069 public Adapter findAdapterById(String id) {
070 return adapters.get(id);
071 }
072
073 public Adapter getDefaultAdapter() {
074 return defaultAdapter;
075 }
076
077 public void addAdapter(Adapter adapter) {
078 adapters.put(adapter.getId(), adapter);
079 }
080
081 public static Service forElement(XMap element) {
082 String id = element.get("@id");
083 String className = element.get("@class");
084 String messageTypes = element.get("@messageTypes");
085
086 Adapter defaultAdapter = null;
087 Map<String, Adapter> adaptersMap = new HashMap<String, Adapter>();
088 for (XMap adapter : element.getAll("adapters/adapter-definition")) {
089 Adapter ad = Adapter.forElement(adapter);
090 if (Boolean.TRUE.toString().equals(adapter.get("@default")))
091 defaultAdapter = ad;
092 adaptersMap.put(ad.getId(), ad);
093 }
094
095 Map<String, Destination> destinations = new HashMap<String, Destination>();
096 for (XMap destinationElt : element.getAll("destination")) {
097 Destination destination = Destination.forElement(destinationElt, defaultAdapter, adaptersMap);
098 destinations.put(destination.getId(), destination);
099 }
100
101 return new Service(id, className, messageTypes, defaultAdapter, adaptersMap, destinations);
102 }
103 }