Package org.eclipse.jst.pagedesigner.editors.palette

Source Code of org.eclipse.jst.pagedesigner.editors.palette.TagImageManager

/*******************************************************************************
* Copyright (c) 2008 Oracle Corporation.
* 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:
*    Oracle - initial API and implementation
*   
********************************************************************************/
package org.eclipse.jst.pagedesigner.editors.palette;

import java.util.Iterator;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jst.jsf.common.metadata.Entity;
import org.eclipse.jst.jsf.common.metadata.Model;
import org.eclipse.jst.jsf.common.metadata.Trait;
import org.eclipse.jst.jsf.common.metadata.internal.IImageDescriptorProvider;
import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext;
import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryContextFactory;
import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryFactory;
import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.ITaglibDomainMetaDataQuery;
import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
import org.eclipse.jst.jsf.common.ui.internal.utils.JSFSharedImages;
import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.PaletteInfo;
import org.eclipse.jst.jsf.tagdisplay.internal.paletteinfos.PaletteInfos;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.swt.graphics.Image;

/**
* Locates and creates Images for tags using the common metadata framework.
*
* Images are cached in the PDPlugin's ImageRegistry. 
*
* Some code is being duplicated in palette helper.   PaletteHelper should be re-factored to use this code
*
*/
public class TagImageManager {
 
  private static final String PALETTE_DEFAULT_IMAGE_FILE = "palette/GENERIC/large/PD_Palette_Default.gif"; //$NON-NLS-1$

  private static TagImageManager INSTANCE = null;
 
  private final static ImageDescriptor DEFAULT_SMALL_ICON = JSFUICommonPlugin
  .getDefault().getImageDescriptor(
    JSFSharedImages.DEFAULT_PALETTE_TAG_IMG);

  private final static ImageDescriptor DEFAULT_LARGE_ICON = PDPlugin
    .getDefault().getImageDescriptor(
        PALETTE_DEFAULT_IMAGE_FILE);

  private static final String TRAIT_ICON_SMALL = "small-icon"; //$NON-NLS-1$

  private static final String TRAIT_ICON_LARGE = "large-icon"; //$NON-NLS-1$
 
  /**
   * @return singleton instance
   */
  public synchronized static TagImageManager getInstance() {
    if (INSTANCE == null) {
      INSTANCE = new TagImageManager();
    }
    return INSTANCE;
 
 
  /**
   * Returns small image using metadata and may be null.  Caller should NOT dispose the image, but should call TagImageManager's dispose(image)
   * @param file
   * @param nsUri
   * @param tagName
   * @return small image using metadata.  May be null.
   */
  public Image getSmallIconImage(IFile file, String nsUri, String tagName) {
    final IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(file);     
    return getImage(context, nsUri, tagName, true);
  }
 
  /**
   * Returns small image using metadata and may be null.  Caller should NOT dispose the image, but should call TagImageManager's dispose(image)
   * @param project
   * @param nsUri
   * @param tagName
   * @return small image using metadata.  May be null.
   * @deprecated - use file rather than project
   */
  public Image getSmallIconImage(IProject project, String nsUri, String tagName) {
    final IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project);     
    return getImage(context, nsUri, tagName, true);
  }

  /**
   * @param file
   * @param nsUri
   * @param tagName
   * @return large image using metadata.  May be null.
   */
  public Image getLargeIconImage(IFile file, String nsUri, String tagName) {
    final IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(file);
    return getImage(context, nsUri, tagName, false);
  }
 
  /**
   * @param project
   * @param nsUri
   * @param tagName
   * @return large image using metadata.  May be null.
   * @deprecated - use file rather than project
   */
  public Image getLargeIconImage(IProject project, String nsUri, String tagName) {
    final IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project);
    return getImage(context, nsUri, tagName, false);
  }
 
  private Image getImage(final IMetaDataDomainContext context, final String nsUri, final String tagName, boolean getSmallImage) {
    Image image = null;
    final ITaglibDomainMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(context);
    Model model = getModel(query, nsUri);
    if (model != null){
      ImageDescriptor imgDesc = getIconImageDescriptor(query, model, tagName, getSmallImage);
      image = getOrCreateImage(imgDesc);
    }
   
    return image;
  }
 
  /**
   * Gets, and creates if necessary, a shared image.
   * @param imageDescriptor
   * @return Image from shared cache
   */
  public static Image getOrCreateImage(ImageDescriptor imageDescriptor) {
    Image image = null;
    if (imageDescriptor != null){
      image = PDPlugin.getDefault().getImageRegistry().get(imageDescriptor.toString());
      if (image == null ){
        image = imageDescriptor.createImage();
        PDPlugin.getDefault().getImageRegistry().put(imageDescriptor.toString(), image);
      } else if (image.isDisposed()){ //should not occur, but handling just in case       
        PDPlugin.getDefault().getImageRegistry().remove(imageDescriptor.toString());
        image = imageDescriptor.createImage();
        PDPlugin.getDefault().getImageRegistry().put(imageDescriptor.toString(), image);
      }
    }
    return image;
  }
 
  private Model getModel(ITaglibDomainMetaDataQuery query, String nsUri) {
    return query.findTagLibraryModel(nsUri);   
  }

 
  private ImageDescriptor getIconImageDescriptor(ITaglibDomainMetaDataQuery query, Model model, String tagName, boolean small) {   
    ImageDescriptor icon = null;
   
    //use palette infos if available
    Trait trait = query.findTrait(model, "paletteInfos"); //$NON-NLS-1$
    if (trait != null){
      PaletteInfos tags = (PaletteInfos)trait.getValue();
      for (Iterator it=tags.getInfos().iterator();it.hasNext();){
        PaletteInfo tag = (PaletteInfo)it.next();
        if (tag.getId().equalsIgnoreCase(tagName)){         
          IMetaDataSourceModelProvider sourceProvider = ((Trait)tag.eContainer().eContainer()).getSourceModelProvider();
          if (small)
            icon = getImageDescriptorFromString(sourceProvider, tag.getSmallIcon(), DEFAULT_SMALL_ICON);
          else
            icon = getImageDescriptorFromString(sourceProvider, tag.getLargeIcon(), DEFAULT_LARGE_ICON);
         
          break;
        }
      } 
    }
    if (icon == null) {
      for (Iterator it=model.getChildEntities().iterator();it.hasNext();){
        Entity tagAsEntity = (Entity)it.next();
        if (tagAsEntity.getId().equalsIgnoreCase(tagName)){                   
          if (small)
            icon = getImageDescriptorFromTagTraitValueAsString(query, tagAsEntity, TRAIT_ICON_SMALL, DEFAULT_SMALL_ICON);
          else
            icon = getImageDescriptorFromTagTraitValueAsString(query, tagAsEntity, TRAIT_ICON_LARGE, DEFAULT_LARGE_ICON)
         
          break;
        }       
      }
     
    }

    return icon;
  }
   
  private ImageDescriptor getImageDescriptorFromString(IMetaDataSourceModelProvider sourceModelProvider,  String imgDesc, ImageDescriptor defaultValue){
    ImageDescriptor image = defaultValue;
    IImageDescriptorProvider imageProvider = (IImageDescriptorProvider)sourceModelProvider.getAdapter(IImageDescriptorProvider.class);     
    if (imageProvider != null){
      image = imageProvider.getImageDescriptor(imgDesc);
    }
    return image;
  }
 
  private ImageDescriptor getImageDescriptorFromTagTraitValueAsString(ITaglibDomainMetaDataQuery query, Entity entity, String key, ImageDescriptor defaultValue){
    Trait t = query.findTrait(entity, key);
    if (t != null){
      String imgDesc = TraitValueHelper.getValueAsString(t);
      return getImageDescriptorFromString(t.getSourceModelProvider(), imgDesc, defaultValue);
    }
    return defaultValue;
  }

}
TOP

Related Classes of org.eclipse.jst.pagedesigner.editors.palette.TagImageManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.