package de.lynorics.eclipse.jangaroo.ui.contentassist; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import de.lynorics.eclipse.jangaroo.AS3ModelUtil; import de.lynorics.eclipse.jangaroo.aS3.Import; import de.lynorics.eclipse.jangaroo.aS3.Package; import de.lynorics.eclipse.jangaroo.aS3.directive; public class InsertImportCommand { public void apply(IDocument document, int offset, String qName) throws BadLocationException { IRegion line = document.getLineInformationOfOffset(offset); String indentation = document.get(line.getOffset(), offset - line.getOffset()); if (indentation.trim().length() != 0) { indentation = ""; } String importString = "import " + qName + ";\n" + indentation; document.replace(offset, 0, importString); } public int getImportOffset(EObject currentModel, String qName) { Package pack = AS3ModelUtil.findParentOfType(currentModel, Package.class); if (pack != null) { if (pack.getImp() != null) { for (EObject child : pack.getImp().eContents()) { if (child instanceof Import) { // ordering is lexically if (((Import) child).getImportedNamespace().compareTo(qName) > 0) { return NodeModelUtils.getNode(child).getOffset(); } } } } return getDefaultOffset(pack); } return -1; } private int getDefaultOffset(Package container) { EList<directive> directives = null; if (container instanceof de.lynorics.eclipse.jangaroo.aS3.Package) directives = ((de.lynorics.eclipse.jangaroo.aS3.Package) container).getDirectives(); if (directives != null) { if (!directives.isEmpty()) { return NodeModelUtils.getNode(directives.get(0)).getOffset(); } return NodeModelUtils.getNode(container.eContents().get(0)).getOffset()+1; } return -1; } }