/******************************************************************************
* Copyright (c) 2007 g-Eclipse consortium
* 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
*
* Initial development of the original code was made for
* project g-Eclipse founded by European Union
* project number: FP6-IST-034327 http://www.geclipse.eu/
*
* Contributor(s):
* Mariusz Wojtysiak - initial API and implementation
*
*****************************************************************************/
package eu.geclipse.ui.views.filters;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.ui.IMemento;
/**
* Configuration object join all filters, which can be applied for given view.
* User can create many filter configurations and switch between them.
*/
abstract public class AbstractGridFilterConfiguration
implements IGridFilterConfiguration
{
private static final String MEMENTO_KEY_ENABLED = "Enabled"; //$NON-NLS-1$
private static final String MEMENTO_KEY_TYPE = "Filter"; //$NON-NLS-1$
protected ArrayList<IGridFilter> filtersList = new ArrayList<IGridFilter>();
private String name;
private boolean enabled = false;
/**
* @param name configuration name
*/
public AbstractGridFilterConfiguration( final String name ) {
super();
this.name = name;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#clone()
*/
@Override
public IGridFilterConfiguration clone() throws CloneNotSupportedException {
AbstractGridFilterConfiguration newConfiguration = ( AbstractGridFilterConfiguration )super.clone();
newConfiguration.filtersList = new ArrayList<IGridFilter>();
for( IGridFilter filter : this.filtersList ) {
newConfiguration.filtersList.add( filter.makeClone() );
}
return newConfiguration;
}
public void read( final IMemento configurationMemento ) {
Integer integer = configurationMemento.getInteger( MEMENTO_KEY_ENABLED );
if( integer != null ) {
this.enabled = ( integer.intValue() != 0 );
}
for( IMemento filterMemento : configurationMemento.getChildren( MEMENTO_KEY_TYPE ) )
{
IGridFilter filter = findFilter( filterMemento.getID() );
if( filter != null ) {
filter.readState( filterMemento );
} // if filter wasn't found, then maybe it exists in IMemento, but current
// implementation doesn't support this filter longer. Just ignore it.
}
}
/*
* (non-Javadoc)
*
* @see eu.geclipse.ui.views.filters.IGridFilterConfiguration#isEnabled()
*/
public boolean isEnabled() {
return this.enabled;
}
/*
* (non-Javadoc)
*
* @see eu.geclipse.ui.views.filters.IGridFilterConfiguration#getFilters()
*/
public List<IGridFilter> getFilters() {
return this.filtersList;
}
/*
* (non-Javadoc)
*
* @see eu.geclipse.ui.views.filters.IGridFilterConfiguration#saveState(org.eclipse.ui.IMemento)
*/
public void saveState( final IMemento memento ) {
memento.putInteger( MEMENTO_KEY_ENABLED, this.enabled ? 1 : 0 );
for( IGridFilter filter : this.filtersList ) {
IMemento filterMemento = memento.createChild( MEMENTO_KEY_TYPE, filter.getFilterId() );
filter.saveState( filterMemento );
}
}
protected void addFilter( final IGridFilter filter ) {
this.filtersList.add( filter );
}
/*
* (non-Javadoc)
*
* @see eu.geclipse.ui.views.filters.IGridFilterConfiguration#getName()
*/
public String getName() {
return this.name;
}
/*
* (non-Javadoc)
*
* @see eu.geclipse.ui.views.filters.IGridFilterConfiguration#setEnabled(boolean)
*/
public void setEnabled( final boolean enabled ) {
this.enabled = enabled;
}
protected IGridFilter findFilter( final String id ) {
IGridFilter filter = null;
Iterator<IGridFilter> iterator = this.filtersList.iterator();
while( iterator.hasNext() && filter == null ) {
IGridFilter currentFilter = iterator.next();
if( currentFilter.getFilterId().equals( id ) ) {
filter = currentFilter;
}
}
return filter;
}
}