/*******************************************************************************
 * Copyright (c) 2009 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *     
 *******************************************************************************/
package org.eclipse.wst.css.ui.internal.projection;

import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.text.Position;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleRule;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
import org.eclipse.wst.sse.ui.internal.projection.AbstractStructuredFoldingStrategy;

/**
 * A folding strategy for CSS structured documents.
 * See AbstractStructuredFoldingStrategy for more details.
 */
public class CSSFoldingStrategy extends AbstractStructuredFoldingStrategy {

	/**
	 * Create an instance of the folding strategy.
	 * Be sure to set the viewer and document after creation.
	 */
	public CSSFoldingStrategy() {
		super();
	}
	
	/**
	 * @see org.eclipse.wst.sse.ui.internal.projection.AbstractFoldingStrategy#calcNewFoldPosition(org.eclipse.wst.sse.core.internal.provisional.IndexedRegion)
	 */
	protected Position calcNewFoldPosition(IndexedRegion indexedRegion) {
		Position newPos = null;
		
		//only want to fold regions with a valid range
		if(indexedRegionValidType(indexedRegion) && indexedRegion.getStartOffset() >= 0 && indexedRegion.getLength() >= 0) {
			newPos = new CSSRuleFoldingPosition(indexedRegion);
		}
		return newPos;
	}
	
	/**
	 * The same as the AbstractFoldingStrategy implementation except for the new position is
	 * calculated on the given IndexRegion and not the annotations stored IndexedRegion because
	 * of the way CSS regions are replaced when they are updated.
	 * 
	 * (non-Javadoc)
	 * @see org.eclipse.wst.sse.ui.internal.projection.AbstractStructuredFoldingStrategy#updateAnnotations(java.util.Iterator, org.eclipse.wst.sse.core.internal.provisional.IndexedRegion, java.util.List, java.util.List)
	 */
	protected void updateAnnotations(Iterator existingAnnotationsIter, IndexedRegion dirtyRegion,
			List modifications, List deletions) {
		
		while(existingAnnotationsIter.hasNext()) {
			Object obj = existingAnnotationsIter.next();
			if(obj instanceof FoldingAnnotation) {
				FoldingAnnotation annotation = (FoldingAnnotation)obj;
				
				//NOTE can not use the annotations stored region because the CSSStructuredDocument
				//	replaces the old region with a new one when it is modified
				Position newPos = calcNewFoldPosition(annotation.getRegion());
				if(newPos != null) {
					Position oldPos = fProjectionAnnotationModel.getPosition(annotation);
					if(!newPos.equals(oldPos)) {
						oldPos.setOffset(newPos.offset);
						oldPos.setLength(newPos.length);
						modifications.add(annotation);
					}
				} else {
					deletions.add(annotation);
				}
			}
		}
	}
	
	/**
	 * @see org.eclipse.wst.sse.ui.internal.projection.AbstractFoldingStrategy#indexedRegionValidType(org.eclipse.wst.sse.core.internal.provisional.IndexedRegion)
	 */
	protected boolean indexedRegionValidType(IndexedRegion indexedRegion) {
		return (indexedRegion instanceof ICSSStyleRule);
	}
}
