package org.archstudio.aimlauncher.core;
import java.util.EnumSet;
import java.util.List;
import org.archstudio.eclipse.ui.views.AbstractArchStudioOutlinePage;
import org.archstudio.resources.IResources;
import org.archstudio.xadl.swt.XadlTreeContentProvider;
import org.archstudio.xadl.swt.XadlTreeLabelProvider;
import org.archstudio.xadl.swt.XadlTreeUtils;
import org.archstudio.xarchadt.IXArchADT;
import org.archstudio.xarchadt.ObjRef;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Composite;
public class AIMLauncherOutlinePage extends AbstractArchStudioOutlinePage {
public AIMLauncherOutlinePage(IXArchADT xarch, ObjRef documentRootRef, IResources resources) {
super(xarch, documentRootRef, resources, false, false);
}
@Override
protected ITreeContentProvider createViewContentProvider() {
return new XadlTreeContentProvider(xarch, documentRootRef, EnumSet.of(XadlTreeUtils.Type.STRUCTURE));
}
@Override
protected ILabelProvider createViewLabelProvider() {
return new XadlTreeLabelProvider(xarch, resources);
}
@Override
public void createControl(Composite parent) {
super.createControl(parent);
getTreeViewer().expandToLevel(2);
}
public ObjRef[] getSelectedRefs() {
Object[] selectedObjects = getSelectedObjects();
if (selectedObjects == null) {
return new ObjRef[0];
}
ObjRef[] refs = new ObjRef[selectedObjects.length];
System.arraycopy(selectedObjects, 0, refs, 0, selectedObjects.length);
return refs;
}
private ObjRef normalize(ObjRef ref) {
String pathString = xarch.getTagsOnlyPathString(ref);
if (!pathString.startsWith("xADL")) {
return xarch.getDocumentRootRef(ref);
}
if (pathString.equals("xADL") || pathString.equals("xADL/structure")) {
return ref;
}
ObjRef parentRef = xarch.getParent(ref);
if (parentRef == null) {
return xarch.getDocumentRootRef(ref);
}
return normalize(parentRef);
}
@Override
public void focusEditor(ObjRef[] refs) {
if (refs.length > 0) {
ObjRef ref = refs[0];
ref = normalize(ref);
List<ObjRef> ancestors = xarch.getAllAncestors(ref);
for (int j = ancestors.size() - 1; j >= 1; j--) {
getTreeViewer().expandToLevel(ancestors.get(j), 1);
}
IStructuredSelection ss = new StructuredSelection(new ObjRef[] { ref });
getTreeViewer().setSelection(ss, true);
}
}
}