/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.core.osgi; import java.util.Iterator; import com.quantcomponents.core.model.IMutableSeries; import com.quantcomponents.core.model.ISeries; import com.quantcomponents.core.model.ISeriesListener; import com.quantcomponents.core.model.ISeriesPoint; import com.quantcomponents.core.remote.ServiceHandle; public class ImmutableSeriesProxy<A extends Comparable<A>, O extends Comparable<O>, P extends ISeriesPoint<A, O>> implements ISeries<A, O, P> { protected final ISeriesHost<A, O, P> seriesHost; private final ISeriesIteratorHost<A, O, P> seriesIteratorHost; private final ISeriesListenerHostLocal<A, O, P> listenerHost; protected final ServiceHandle<? extends ISeriesHost<A, O, P>> seriesHostHandle; public ImmutableSeriesProxy(ISeriesHost<A, O, P> seriesHost, ISeriesIteratorHost<A, O, P> seriesIteratorHost, ISeriesListenerHostLocal<A, O, P> listenerHost, ServiceHandle<? extends ISeriesHost<A, O, P>> seriesHostHandle) { this.seriesHost = seriesHost; this.seriesIteratorHost = seriesIteratorHost; this.listenerHost = listenerHost; this.seriesHostHandle = seriesHostHandle; } @Override public int size() { return seriesHost.size(seriesHostHandle); } @Override public boolean isEmpty() { return seriesHost.isEmpty(seriesHostHandle); } @SuppressWarnings("unchecked") @Override public Iterator<P> iterator() { return new SeriesIteratorProxy<A, O, P>(seriesIteratorHost, (ServiceHandle<ISeriesIteratorHost<A, O, P>>) seriesHost.iterator(seriesHostHandle)); } @SuppressWarnings("unchecked") @Override public Iterator<P> descendingIterator() { return new SeriesIteratorProxy<A, O, P>(seriesIteratorHost, (ServiceHandle<ISeriesIteratorHost<A, O, P>>) seriesHost.descendingIterator(seriesHostHandle)); } @Override public P getFirst() { return seriesHost.getFirst(seriesHostHandle); } @Override public P getLast() { return seriesHost.getLast(seriesHostHandle); } @Override public P getMinimum() { return seriesHost.getMinimum(seriesHostHandle); } @Override public P getMaximum() { return seriesHost.getMaximum(seriesHostHandle); } @Override public void addSeriesListener(ISeriesListener<A, O> listener) { listenerHost.addListener(seriesHostHandle, listener); } @Override public void removeSeriesListener(ISeriesListener<A, O> listener) { listenerHost.removeListener(seriesHostHandle, listener); } @Override public long getTimestamp() { return seriesHost.getTimestamp(seriesHostHandle); } @Override public boolean isEnforceStrictSequence() { return seriesHost.isEnforceStrictSequence(seriesHostHandle); } @Override public String getPersistentID() { return seriesHost.getPersistentID(seriesHostHandle); } @Override public IMutableSeries<A, O, P> createEmptyMutableSeries(String ID) { throw new UnsupportedOperationException(); } }