01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.core.qos.ca;
28:
29: import java.util.ArrayList;
30: import java.util.List;
31: import java.util.Properties;
32:
33: import org.cougaar.util.log.Logger;
34: import org.cougaar.util.log.Logging;
35:
36: /**
37: * This class is the standard base implementation of {@link
38: * CoordinationArtifact}.
39: *
40: */
41: abstract public class CoordinationArtifactImpl implements
42: CoordinationArtifact {
43: private Logger logger = Logging
44: .getLogger("org.cougaar.core.qos.ca.CoordinationArtifactImpl");
45: private Properties parameters;
46: private List facets = new ArrayList();
47: private CoordinationArtifactProvider owner;
48:
49: protected CoordinationArtifactImpl(
50: CoordinationArtifactProvider owner, ConnectionSpec spec) {
51: if (spec.ca_parameters != null)
52: this .parameters = new Properties(spec.ca_parameters);
53: this .owner = owner;
54: }
55:
56: // Extensions of can make specific kinds of facets. Here we make
57: // the generic one.
58: abstract protected Facet makeFacet(ConnectionSpec spec,
59: RolePlayer player);
60:
61: // CoordinartionArtifact
62:
63: public String getArtifactKind() {
64: return owner.getArtifactKind();
65: }
66:
67: public boolean matches(ConnectionSpec spec) {
68: if (spec.ca_parameters == null && parameters == null)
69: return true;
70: if (spec.ca_parameters == null || parameters == null)
71: return false;
72: return spec.ca_parameters.equals(parameters);
73: }
74:
75: public void provideFacet(ConnectionSpec spec, RolePlayer player) {
76: if (logger.isDebugEnabled())
77: logger.debug("Providing facet for " + spec.logString());
78: Facet facet = makeFacet(spec, player);
79: synchronized (facets) {
80: facets.add(facet);
81: }
82: }
83:
84: }
|