001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.core.qos.metrics;
028:
029: import java.util.ArrayList;
030: import java.util.Iterator;
031: import java.util.List;
032: import java.util.StringTokenizer;
033:
034: import org.cougaar.core.component.ServiceBroker;
035: import org.cougaar.core.service.LoggingService;
036:
037: /**
038: * This Component uses its parameters to create and register a
039: * DataFeed. The parameters are <code>name</code> (the name of the
040: * feed), <code>class</code> (the fully qualified classname of the
041: * feed type) and <code>args</code> (the initialization parameters for
042: * the feed.
043: *
044: * @see DataFeedRegistrationService
045: */
046: public class FeedLoader extends QosComponent {
047: private static final Class[] ParamTypes = { String[].class };
048: private String[] args;
049: private String name;
050: private String classname;
051:
052: private String[] parseArgs(String raw) {
053: ArrayList temp = new ArrayList();
054: StringTokenizer tokenizer = new StringTokenizer(raw, " ");
055: while (tokenizer.hasMoreTokens()) {
056: String token = tokenizer.nextToken().trim();
057: temp.add(token);
058: }
059: //JAZ Object[] can not be cast to Sting[],
060: // Must be a better way
061: String[] returnValue = new String[temp.size()];
062: int i;
063: for (i = 0; i < temp.size(); i++)
064: returnValue[i] = (String) temp.get(i);
065: return returnValue;
066: }
067:
068: private String getURL() {
069: int i;
070: for (i = 0; i < (args.length - 1); i++) {
071: if (args[i].equals("-url"))
072: return args[i + 1];
073: }
074: return null;
075: }
076:
077: public void setParameter(Object param) {
078: if (param instanceof List) {
079: Iterator itr = ((List) param).iterator();
080: while (itr.hasNext()) {
081: String property = (String) itr.next();
082: int sepr = property.indexOf('=');
083: if (sepr < 0)
084: continue;
085: String key = property.substring(0, sepr);
086: String value = property.substring(++sepr);
087: if (key.equalsIgnoreCase("name"))
088: name = value;
089: else if (key.equalsIgnoreCase("class"))
090: classname = value;
091: else if (key.equalsIgnoreCase("args"))
092: args = parseArgs(value);
093: }
094: }
095: }
096:
097: public void load() {
098: super .load();
099: ServiceBroker sb = getServiceBroker();
100: DataFeedRegistrationService svc = (DataFeedRegistrationService) sb
101: .getService(this , DataFeedRegistrationService.class,
102: null);
103: if (svc != null && name != null && classname != null
104: && args != null) {
105: Object feed = null;
106: try {
107: Class cl = Class.forName(classname);
108: java.lang.reflect.Constructor constructor = cl
109: .getConstructor(ParamTypes);
110: Object[] argList = { args };
111: feed = constructor.newInstance(argList);
112: svc.registerFeed(feed, name);
113: if (name.equalsIgnoreCase("sites")) {
114: // special Feed that has the URL for the sites file
115: svc.populateSites(getURL());
116: }
117: } catch (Exception ex) {
118: LoggingService lsvc = (LoggingService) sb.getService(
119: this , LoggingService.class, null);
120: if (lsvc.isErrorEnabled())
121: lsvc.error("Error creating DataFeed: " + ex);
122: }
123:
124: }
125: }
126: }
|