/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.ui.views.palette.model; import java.util.ArrayList; import java.net.URL; import java.net.MalformedURLException; //import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; import org.eclipse.jface.resource.ImageDescriptor; import org.jboss.tools.common.meta.action.XActionInvoker; import org.jboss.tools.common.model.XModel; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.XModelObjectConstants; import org.jboss.tools.common.model.event.XModelTreeListener; import org.jboss.tools.common.model.options.SharableConstants; import org.jboss.tools.common.model.ui.ModelUIPlugin; import org.jboss.tools.common.model.ui.views.palette.editor.*; import org.jboss.tools.common.model.ui.util.ModelUtilities; public class PaletteModel { static String SUB_GROUP_ELEMENT_TYPE = "sub-group"; //$NON-NLS-1$ static String GROUP_ELEMENT_TYPE = "group"; //$NON-NLS-1$ private static PaletteModel instance = null; private static Object monitor = new Object(); private PaletteEditor editor = new PaletteEditor(); private static final URL BASE_URL = ModelUIPlugin.getDefault().getBundle().getEntry("/"); //$NON-NLS-1$ private IPaletteNode root = null; private PaletteModel() { } public static final PaletteModel getInstance() { if (instance != null) { return instance; } else { synchronized (monitor) { if (instance == null) { PaletteModel inst = new PaletteModel(); inst.createModel(); instance = inst; } } return instance; } } public IPaletteNode getRoot() { return root; } public void reload() { ((PaletteGroup)root).clear(); createModel(); } private void createModel() { XModelObject xpalette = getXModelRoot(); root = new PaletteGroup(xpalette); if (xpalette != null) { XModelObject[] xtabs = findXObjects(xpalette, GROUP_ELEMENT_TYPE); if (xtabs != null) { for (int i = 0; i < xtabs.length; i++) { createTab(xtabs[i]); } } } } private void createTab(XModelObject xtab) { if (!XModelObjectConstants.YES.equals(xtab.getAttributeValue(SharableConstants.ATTR_HIDDEN))) { IPaletteNode tab = addTab(xtab, xtab.getAttributeValue("name")); //$NON-NLS-1$ for (int j = 0; j < xtab.getChildren().length; j++) { XModelObject xelem = xtab.getChildAt(j); if (xelem.getAttributeValue("element type").equals("macro")) { //$NON-NLS-1$ //$NON-NLS-2$ createElem(tab, xelem, true); } } } } private void createElem(IPaletteNode parent, XModelObject xelem, boolean asGroup) { Thread.dumpStack(); } private IPaletteNode addTab(XModelObject xobject, String title) { IPaletteNode tab = new PaletteGroup(xobject, title); root.addChild(tab); return tab; } public ImageDescriptor createImageDescriptor(String fileName) { String imagePath = "images/xstudio/palette/"; //$NON-NLS-1$ try { URL url = new URL(BASE_URL, imagePath + fileName); return ImageDescriptor.createFromURL(url); } catch (MalformedURLException e) { ModelUIPlugin.getPluginLog().logError(e); } return ImageDescriptor.getMissingImageDescriptor(); } private XModelObject[] findXObjects(XModelObject root, String elementType){ ArrayList<XModelObject> v = new ArrayList<XModelObject>(); for (int i = 0; i < root.getChildren().length; i++) { if (root.getChildAt(i).getAttributeValue("element type").equals(elementType)) { //$NON-NLS-1$ v.add(root.getChildAt(i)); } } return (v.size() == 0) ? null : v.toArray(new XModelObject[0]); } private XModelObject getXModelRoot() { return getXModel().getRoot("Palette"); //$NON-NLS-1$ } public XModel getXModel() { return ModelUtilities.getPreferenceModel(); } public void openEditor(Shell shell) { editor.setObject(shell); editor.execute(); } public void runShowHideDialog() { XModelObject root = getXModelRoot(); XActionInvoker.invoke("HiddenTabs", root, new java.util.Properties()); //$NON-NLS-1$ } public void addModelTreeListener(XModelTreeListener listener) { getXModel().addModelTreeListener(listener); } public void removeModelTreeListener(XModelTreeListener listener) { getXModel().removeModelTreeListener(listener); } }