package org.objectstyle.wolips.eomodeler.outline; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.viewers.ContentViewer; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.objectstyle.wolips.eomodeler.core.model.EOArgument; import org.objectstyle.wolips.eomodeler.core.model.EOAttribute; import org.objectstyle.wolips.eomodeler.core.model.EOAttributePath; import org.objectstyle.wolips.eomodeler.core.model.EODatabaseConfig; import org.objectstyle.wolips.eomodeler.core.model.EOEntity; import org.objectstyle.wolips.eomodeler.core.model.EOEntityIndex; import org.objectstyle.wolips.eomodeler.core.model.EOFetchSpecification; import org.objectstyle.wolips.eomodeler.core.model.EOModel; import org.objectstyle.wolips.eomodeler.core.model.EORelationship; import org.objectstyle.wolips.eomodeler.core.model.EORelationshipPath; import org.objectstyle.wolips.eomodeler.core.model.EOStoredProcedure; public class EOModelOutlineViewerSorter extends ViewerSorter { private static final int MAX_ORDER = 9; private Map<Class, Integer> myOrder; public EOModelOutlineViewerSorter() { myOrder = new HashMap<Class, Integer>(); myOrder.put(EOModel.class, Integer.valueOf(1)); myOrder.put(EOEntity.class, Integer.valueOf(10)); myOrder.put(EOAttribute.class, Integer.valueOf(3)); myOrder.put(EOAttributePath.class, Integer.valueOf(3)); myOrder.put(EOArgument.class, Integer.valueOf(4)); myOrder.put(EORelationship.class, Integer.valueOf(5)); myOrder.put(EORelationshipPath.class, Integer.valueOf(5)); myOrder.put(EOFetchSpecification.class, Integer.valueOf(6)); myOrder.put(EOStoredProcedure.class, Integer.valueOf(7)); myOrder.put(EOEntityIndex.class, Integer.valueOf(20)); myOrder.put(EODatabaseConfig.class, Integer.valueOf(30)); } protected int getOrder(Object _obj) { int order; if (_obj == null) { order = EOModelOutlineViewerSorter.MAX_ORDER; } else { Integer orderInteger = myOrder.get(_obj.getClass()); if (orderInteger == null) { order = MAX_ORDER; } else { if (_obj instanceof EOModel && ((EOModel)_obj).isEditing()) { order = 0; } else { order = orderInteger.intValue(); } } } return order; } public int compare(Viewer _viewer, Object _e1, Object _e2) { ILabelProvider labelProvider = (ILabelProvider) ((ContentViewer) _viewer).getLabelProvider(); int order1 = getOrder(_e1); int order2 = getOrder(_e2); String name1 = String.format("%1$02d%2$s", order1, labelProvider.getText(_e1)); String name2 = String.format("%1$02d%2$s", order2, labelProvider.getText(_e2)); int comparison = getComparator().compare(name1, name2); return comparison; } }