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.mlm.plugin.ldm;
028:
029: import java.util.Properties;
030:
031: import org.cougaar.core.mts.MessageAddress;
032: import org.cougaar.core.service.BlackboardService;
033: import org.cougaar.planning.ldm.ClusterServesPlugin;
034: import org.cougaar.planning.ldm.LDMServesPlugin;
035: import org.cougaar.planning.ldm.PlanningFactory;
036: import org.cougaar.util.Parameters;
037:
038: public abstract class QueryHandler {
039: public QueryHandler() {
040: }
041:
042: protected LDMSQLPlugin myLDMPlugin;
043: protected MessageAddress myMessageAddress;
044: protected ClusterServesPlugin myComponent;
045: protected PlanningFactory ldmf;
046: protected Properties myParameters;
047: protected BlackboardService subscriber;
048: protected LDMServesPlugin ldm;
049:
050: protected void initialize(LDMSQLPlugin ldmplugin,
051: MessageAddress cid, ClusterServesPlugin comp,
052: PlanningFactory aldmf, Properties params,
053: BlackboardService sub) {
054: myLDMPlugin = ldmplugin;
055: ldm = ldmplugin.getLDMPlugin();
056: myMessageAddress = cid;
057: myComponent = comp;
058: ldmf = aldmf;
059: myParameters = params;
060: subscriber = sub;
061: }
062:
063: protected LDMServesPlugin getLDM() {
064: return ldm;
065: }
066:
067: /** Called on QueryHandler load to allow it to start any
068: * threads or other once-only intialization.
069: * It is a good idea for subclasses to call their super.start() if
070: * they override it.
071: **/
072: public void start() {
073: }
074:
075: /** use this method to find the values of parameters **/
076: public final String getParameter(String parameterKey) {
077: String val = myParameters.getProperty(parameterKey);
078: return Parameters.replaceParameters(val, myParameters);
079: }
080:
081: /** this method is called before a query is started,
082: * before even getQuery. The default method is empty
083: * but may be overridden.
084: **/
085: public void startQuery() {
086: }
087:
088: /** Construct and return an SQL query to be used by the Database engine.
089: * Subclasses are required to implement this method.
090: **/
091: public abstract String getQuery();
092:
093: /** Process a single row in a result set,
094: * doing whatever is required.
095: **/
096: public abstract void processRow(Object[] rowdata);
097:
098: /** this method is called when a query is complete,
099: * afer the last call to processRow. The default method is empty
100: * but may be overridden by subclasses.
101: **/
102: public void endQuery() {
103: }
104:
105: protected void publishAdd(Object o) {
106: subscriber.publishAdd(o);
107: }
108:
109: protected void publishRemove(Object o) {
110: subscriber.publishRemove(o);
111: }
112:
113: protected void publishChange(Object o) {
114: subscriber.publishChange(o);
115: }
116:
117: }
|