/*
 * Copyright (c) 2000-2008 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jetbrains.teamcity.ui;

import java.util.ArrayList;

import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.EditorPart;

public class UIUtil {
	
	/**
	 *  Looking for editors contains unsaved data
	 * 
	 * @param paths Paths of files interesting for 
	 * @return Array of editors. Never return null 
	 */
	public static EditorPart[] findDirtyEditors(final String[] paths){
		final ArrayList<EditorPart> saveable = new ArrayList<EditorPart>(paths.length);
		for(final IWorkbenchWindow wWindow : PlatformUI.getWorkbench().getWorkbenchWindows()){
			for(final IWorkbenchPage wPage :wWindow.getPages()){
				for(final IEditorReference eRef : wPage.getEditorReferences()){
					final IEditorPart ePart = eRef.getEditor(false);
					if(ePart instanceof EditorPart && ((EditorPart)ePart).isDirty()){
						final IEditorInput eInput = ePart.getEditorInput();
						if (eInput instanceof IFileEditorInput && ((IFileEditorInput) eInput).getFile() != null && ((IFileEditorInput)eInput).getFile().getLocation() != null) {
							final String eEditorFilePath = ((IFileEditorInput)eInput).getFile().getLocation().toOSString();
							if(eEditorFilePath != null){
								for(final String path : paths){
									if(eEditorFilePath.equalsIgnoreCase(path)){
										saveable.add((EditorPart) ePart);
										continue;
									}
								}
							}
						}
					}
				}
			}
		}
		return saveable.toArray(new EditorPart[saveable.size()]);
	}

}
