/******************************************************************************* | |
* Copyright (c) 2008 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.sse.ui.internal.editor; | |
import java.util.ArrayList; | |
import java.util.List; | |
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; | |
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; | |
/** | |
* This class/interface is part of an experimental API that is still under | |
* development and expected to change significantly before reaching stability. | |
* It is being made available at this early stage to solicit feedback from | |
* pioneering adopters on the understanding that any code that uses this API | |
* will almost certainly be broken (repeatedly) as the API evolves. | |
*/ | |
public class SelectionConvertor { | |
/** | |
* @param model | |
* @param start | |
* @param end | |
* @return the most specific mapping of this text selection to | |
* implementors of IndexedRegion | |
*/ | |
public Object[] getElements(IStructuredModel model, int start, int end) { | |
Object[] localSelectedStructures = null; | |
if (model != null) { | |
IndexedRegion region = model.getIndexedRegion(start); | |
if (region != null) { | |
if (end <= region.getEndOffset()) { | |
// single selection | |
localSelectedStructures = new Object[1]; | |
localSelectedStructures[0] = region; | |
} | |
else { | |
// multiple selection | |
int maxLength = model.getStructuredDocument().getLength(); | |
List structures = new ArrayList(2); | |
while (region != null && region.getEndOffset() <= end && region.getEndOffset() < maxLength) { | |
structures.add(region); | |
region = model.getIndexedRegion(region.getEndOffset() + 1); | |
} | |
localSelectedStructures = structures.toArray(); | |
} | |
} | |
} | |
if (localSelectedStructures == null) { | |
localSelectedStructures = new Object[0]; | |
} | |
return localSelectedStructures; | |
} | |
} |