/*
* This file is part of the OpenSCADA project
* Copyright (C) 2006-2012 TH4 SYSTEMS GmbH (http://th4-systems.com)
*
* OpenSCADA is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenSCADA is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenSCADA. If not, see
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
*/
package org.openscada.ae.ui.testing.navigator;
import java.util.Arrays;
import org.eclipse.core.databinding.observable.Observables;
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.core.databinding.observable.set.WritableSet;
import org.openscada.ae.Event;
import org.openscada.ae.Query;
import org.openscada.ae.QueryListener;
import org.openscada.ae.QueryState;
import org.openscada.utils.beans.AbstractPropertyChange;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class QueryBean extends AbstractPropertyChange implements QueryListener
{
private final static Logger logger = LoggerFactory.getLogger ( QueryBean.class );
private static final String PROP_STATE = "state";
private static final String PROP_COUNT = "count";
private final String filterData;
private final String filterType;
private QueryState state;
private Query query;
private final WritableSet events = new WritableSet ();
private final QueryListWrapper wrapper;
public QueryBean ( final QueryListWrapper wrapper, final String filterType, final String filterData )
{
this.wrapper = wrapper;
this.filterType = filterType;
this.filterData = filterData;
}
public String getFilterData ()
{
return this.filterData;
}
public String getFilterType ()
{
return this.filterType;
}
@Override
public void queryData ( final Event[] events )
{
logger.debug ( "Received {} events", events.length );
this.events.getRealm ().asyncExec ( new Runnable () {
@Override
public void run ()
{
QueryBean.this.addData ( events );
}
} );
}
protected void addData ( final Event[] events )
{
final long tix = System.currentTimeMillis ();
final int oldSize = this.events.size ();
this.events.addAll ( Arrays.asList ( events ) );
final int newSize = this.events.size ();
logger.debug ( "String delta: {}", System.currentTimeMillis () - tix );
firePropertyChange ( PROP_COUNT, oldSize, newSize );
}
public int getCount ()
{
return this.events.size ();
}
@Override
public void queryStateChanged ( final QueryState state, final Throwable error )
{
logger.info ( "Query state changed {}: ", state, error != null ? error.getMessage () : "<none>" );
final QueryState oldState = this.state;
this.state = state;
firePropertyChange ( PROP_STATE, oldState, state );
}
public void setController ( final Query createQuery )
{
this.query = createQuery;
}
public QueryState getState ()
{
return this.state;
}
public Query getQuery ()
{
return this.query;
}
public void remove ()
{
this.query.close ();
this.wrapper.remove ( this );
}
public void dispose ()
{
this.query.close ();
}
public IObservableSet getEventObservable ()
{
return Observables.proxyObservableSet ( this.events );
}
}