package net.surveyos.sourceforge.openjump.plugins.selectmodifiedfeatures;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import com.vividsolutions.jump.feature.BasicFeature;
import com.vividsolutions.jump.feature.Feature;
import com.vividsolutions.jump.feature.FeatureCollection;
import com.vividsolutions.jump.workbench.WorkbenchContext;
import com.vividsolutions.jump.workbench.model.Layer;
import com.vividsolutions.jump.workbench.model.LayerManager;
import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.ui.LayerNamePanel;
import com.vividsolutions.jump.workbench.ui.LayerViewPanel;

public class SelectModifiedFeaturesPlugIn extends AbstractPlugIn 
{	
    public void initialize(PlugInContext context) throws Exception
    {     
    	// Stub
    }

    public boolean execute(final PlugInContext context) throws Exception
    {
    	WorkbenchContext workbenchContext = context.getWorkbenchContext();
    	
    	reportNothingToUndoYet(context);
    	
    	ArrayList<Feature> selectedFeatures = new ArrayList<Feature>();  
    	LayerViewPanel layerViewPanel = workbenchContext.getLayerViewPanel();
    	
    	layerViewPanel.getSelectionManager().clear();
    	
    	LayerNamePanel layerNamePanel = workbenchContext.getLayerNamePanel();
    	LayerManager manager = layerNamePanel.getLayerManager();
    	Collection<Layer> layers = (Collection) manager.getLayers();
    	
    	Iterator<Layer> goOverEach1 = layers.iterator();
    	
    	while(goOverEach1.hasNext() == true) 
    	{
    		Layer layer = goOverEach1.next();
    		
    		selectedFeatures.clear();

    		if (layer.isVisible())
    		{
    			FeatureCollection featureCollection = layer
    			.getFeatureCollectionWrapper();
    			
    			Iterator<Feature> goOverEach2 = featureCollection.iterator();
    			
    			while (goOverEach2.hasNext() == true)
    			{
    				Feature feature = (Feature) goOverEach2.next();
    				int booleanCounter = 0;
    				
    				if(feature instanceof BasicFeature == true)
    				{
    					booleanCounter++;
    				}
    				
    				BasicFeature featureAsBasicFeature = (BasicFeature) feature;
    				if(featureAsBasicFeature.isModified() == true)
    				{
    					selectedFeatures.add(feature);
    				}
    			}
    		}
    		if (selectedFeatures.size() > 0)
    			layerViewPanel.getSelectionManager().getFeatureSelection().selectItems(layer, selectedFeatures);
    	}        
    	return true;
    }

    public MultiEnableCheck createEnableCheck(final WorkbenchContext workbenchContext) 
    {
    	EnableCheckFactory checkFactory = new EnableCheckFactory(workbenchContext);
    	return new MultiEnableCheck().add(checkFactory.createWindowWithLayerViewPanelMustBeActiveCheck());
    }    
}

