/******************************************************************************* * Copyright (c) 2008,2009 Red Hat, Inc. * 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: * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.oprofile.ui.model; import java.util.Arrays; import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelRoot; import org.eclipse.linuxtools.internal.oprofile.core.model.OpModelSession; import org.eclipse.swt.graphics.Image; /** * Convenience class for creating the UI model from the oprofile data model, * via a single point of access. * @since 1.1 */ public class UiModelRoot implements IUiModelElement { private static UiModelRoot uiModelRoot = new UiModelRoot(); //singleton private UiModelError rootError; private UiModelSession[] session; //this node's children /** constructor, private for singleton use **/ protected UiModelRoot() { session = null; rootError = null; } /** * Get the instance of this ui model root. * @return the ui model root object */ public static UiModelRoot getDefault() { return uiModelRoot; } /** * Kick off creating the UI model from the data model. Meant to * be called from UI code. The refreshModel() method is called for * the child elements from their constructor. */ public void refreshModel() { OpModelSession dataModelEvents[] = getModelDataEvents(); rootError = null; session = null; if (dataModelEvents == null || dataModelEvents.length == 0) { rootError = UiModelError.NO_SAMPLES_ERROR; } else { session = new UiModelSession[dataModelEvents.length]; for (int i = 0; i < dataModelEvents.length; i++) { session[i] = new UiModelSession(dataModelEvents[i]); } } } protected OpModelSession[] getModelDataEvents() { OpModelRoot modelRoot = OpModelRoot.getDefault(); return modelRoot.getSessions(); } /** IUiModelElement functions **/ @Override public String getLabelText() { return null; } /** * Returns the children of this element. * @return An array of child elements or null */ @Override public IUiModelElement[] getChildren() { if (session != null && session.length != 0) { if (UiModelRoot.SortType.SESSION == UiModelRoot.getSortingType()) { Arrays.sort(session, UiModelSorting.getInstance()); return session; } else { return session; } } else return new IUiModelElement[] { rootError }; } /** * Returns if the element has any children. * @return true if the element has children, false otherwise */ @Override public boolean hasChildren() { return true; } /** * Returns the element's parent. * @return The parent element or null */ @Override public IUiModelElement getParent() { return null; } @Override public Image getLabelImage() { return null; } /** * * Adding sorting feature in tree. * @since 3.0 * */ public static enum SortType{DEFAULT,SESSION,EVENT,LIB,FUNCTION,LINE_NO} private static SortType sortType; public static void setSortingType(SortType sortType) { UiModelRoot.sortType = sortType; } public static SortType getSortingType() { return UiModelRoot.sortType; } }