summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/streamstack/StreamStack.java')
-rw-r--r--src/com/isode/stroke/streamstack/StreamStack.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/com/isode/stroke/streamstack/StreamStack.java b/src/com/isode/stroke/streamstack/StreamStack.java
new file mode 100644
index 0000000..f539624
--- /dev/null
+++ b/src/com/isode/stroke/streamstack/StreamStack.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 Remko Tron¨on
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+/*
+ * Copyright (c) 2010, Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.streamstack;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StreamStack {
+
+ public StreamStack(XMPPLayer xmppLayer, LowLayer physicalLayer) {
+ xmppLayer_ = xmppLayer;
+ physicalLayer_ = physicalLayer;
+ physicalLayer_.setParentLayer(xmppLayer_);
+ xmppLayer.setChildLayer(physicalLayer_);
+ }
+
+ public void addLayer(final StreamLayer newLayer) {
+ final LowLayer lowLayer = (layers_.isEmpty() ? physicalLayer_ : layers_.get(layers_.size() - 1));
+
+ xmppLayer_.setChildLayer(newLayer);
+ newLayer.setParentLayer(xmppLayer_);
+
+ lowLayer.setParentLayer(newLayer);
+ newLayer.setChildLayer(lowLayer);
+
+ layers_.add(newLayer);
+ }
+
+ public XMPPLayer getXMPPLayer() {
+ return xmppLayer_;
+ }
+
+ public Object getLayer(Class layerClass) {
+ for (StreamLayer layer : layers_) {
+ if (layerClass.isAssignableFrom(layer.getClass())) {
+ return layer;
+ }
+ }
+ return null;
+ }
+
+ private XMPPLayer xmppLayer_;
+ private LowLayer physicalLayer_;
+ private List<StreamLayer> layers_ = new ArrayList<StreamLayer>();
+}