/** * <copyright> * * Copyright (c) 2002, 2009 IBM Corporation and others. * 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: * IBM - Initial API and implementation * * </copyright> * * $Id: AdapterFactoryItemDelegator.java,v 1.5 2008/01/15 17:15:40 emerks Exp $ */ package net.enilink.komma.edit.provider; import java.util.Collection; import java.util.Collections; import java.util.List; import net.enilink.komma.common.adapter.IAdapterFactory; import net.enilink.komma.common.command.ICommand; import net.enilink.komma.common.command.UnexecutableCommand; import net.enilink.komma.common.util.ICollector; import net.enilink.komma.edit.command.CommandParameter; import net.enilink.komma.edit.domain.IEditingDomain; /** */ public class AdapterFactoryItemDelegator implements IEditingDomainItemProvider, IItemLabelProvider, IItemFontProvider, IItemColorProvider, IItemPropertySource, IStructuredItemContentProvider, ITableItemLabelProvider, ITableItemColorProvider, ITableItemFontProvider, ITreeItemContentProvider { /** * This keeps track of the factory used to generate the adapters. */ protected IAdapterFactory adapterFactory; /** */ public AdapterFactoryItemDelegator(IAdapterFactory adapterFactory) { this.adapterFactory = adapterFactory; } public IAdapterFactory getAdapterFactory() { return adapterFactory; } /** * This does the same thing as ILabelProvider.getText, it fetches the label * text specific to this object instance. */ public String getText(Object object) { if (object instanceof Collection<?>) { StringBuffer result = new StringBuffer(); for (Object child : ((Collection<?>) object)) { if (result.length() != 0) { result.append(", "); } result.append(getText(child)); } return result.toString(); } else { // IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory .adapt(object, IItemLabelProvider.class); return itemLabelProvider != null ? itemLabelProvider .getText(object) : object == null ? "" : object.toString(); } } /** * This does the same thing as ILabelProvider.getImage, it fetches the label * image specific to this object instance. */ public Object getImage(Object object) { if (object instanceof Collection<?>) { for (Object child : (Collection<?>) object) { return getImage(child); } return null; } else { // IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory .adapt(object, IItemLabelProvider.class); return itemLabelProvider != null ? itemLabelProvider .getImage(object) : null; } } /** * This does the same thing as IFontProvider.getFont, it fetches the font * specific to this object instance. */ public Object getFont(Object object) { if (object instanceof Collection<?>) { for (Object child : (Collection<?>) object) { return getFont(child); } return null; } else { IItemFontProvider itemFontProvider = (IItemFontProvider) adapterFactory .adapt(object, IItemFontProvider.class); return itemFontProvider != null ? itemFontProvider.getFont(object) : null; } } /** * This does the same thing as IColorProvider.getForeground, it fetches the * foreground color specific to this object instance. */ public Object getForeground(Object object) { if (object instanceof Collection<?>) { for (Object child : (Collection<?>) object) { return getForeground(child); } return null; } else { // IItemColorProvider itemFontProvider = (IItemColorProvider) adapterFactory .adapt(object, IItemColorProvider.class); return itemFontProvider != null ? itemFontProvider .getForeground(object) : null; } } /** * This does the same thing as IColorProvider.getBackground, it fetches the * foreground color specific to this object instance. */ public Object getBackground(Object object) { if (object instanceof Collection<?>) { for (Object child : (Collection<?>) object) { return getBackground(child); } return null; } else { IItemColorProvider itemFontProvider = (IItemColorProvider) adapterFactory .adapt(object, IItemColorProvider.class); return itemFontProvider != null ? itemFontProvider .getBackground(object) : null; } } /** * This does the same thing as ITableLabelProvider.getColumnText. */ public String getColumnText(Object object, int columnIndex) { // Get the adapter from the factory. // ITableItemLabelProvider tableItemLabelProvider = (ITableItemLabelProvider) adapterFactory .adapt(object, ITableItemLabelProvider.class); // Now we could check that the adapter implements interface // ITableItemLabelProvider. // if (tableItemLabelProvider != null) { // And delegate the call. // return tableItemLabelProvider.getColumnText(object, columnIndex); } // Otherwise, we could check that the adapter implements interface // IItemLabelProvider. // else { IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory .adapt(object, IItemLabelProvider.class); if (itemLabelProvider != null) { // And delegate the call. // return itemLabelProvider.getText(object); } // If there is a column object, just convert it to a string. // else if (object != null) { return object.toString(); } else { return ""; } } } /** * This does the same thing as ITableLabelProvider.getColumnImage. */ public Object getColumnImage(Object object, int columnIndex) { // Get the adapter from the factory. // ITableItemLabelProvider tableItemLabelProvider = (ITableItemLabelProvider) adapterFactory .adapt(object, ITableItemLabelProvider.class); // No image is a good default. // Object result = null; // Now we could check that the adapter implements interface // ITableItemLabelProvider. // if (tableItemLabelProvider != null) { // And delegate the call. // result = tableItemLabelProvider.getColumnImage(object, columnIndex); } // Otherwise, we could check that the adapter implements interface // IItemLabelProvider. // else { IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory .adapt(object, IItemLabelProvider.class); if (itemLabelProvider != null) { // And delegate the call. // result = itemLabelProvider.getImage(object); } } return result; } /** * This does the same thing as ITableFontProvider.getFont. */ public Object getFont(Object object, int columnIndex) { // Get the adapter from the factory. // ITableItemFontProvider tableItemFontProvider = (ITableItemFontProvider) adapterFactory .adapt(object, ITableItemFontProvider.class); // No font is a good default. // Object result = null; // Now we could check that the adapter implements interface // ITableItemFontProvider. // if (tableItemFontProvider != null) { // And delegate the call. // result = tableItemFontProvider.getFont(object, columnIndex); } // Otherwise, we could check that the adapter implements interface // IItemFontProvider. // else { IItemFontProvider itemFontProvider = (IItemFontProvider) adapterFactory .adapt(object, IItemFontProvider.class); if (itemFontProvider != null) { // And delegate the call. // result = itemFontProvider.getFont(object); } } return result; } /** * This does the same thing as ITableColorProvider.getForeground. */ public Object getForeground(Object object, int columnIndex) { // Get the adapter from the factory. // ITableItemColorProvider tableItemColorProvider = (ITableItemColorProvider) adapterFactory .adapt(object, ITableItemColorProvider.class); // No color is a good default. // Object result = null; // Now we could check that the adapter implements interface // ITableItemColorProvider. // if (tableItemColorProvider != null) { // And delegate the call. // result = tableItemColorProvider.getForeground(object, columnIndex); } // Otherwise, we could check that the adapter implements interface // IItemColorProvider. // else { IItemColorProvider itemColorProvider = (IItemColorProvider) adapterFactory .adapt(object, IItemColorProvider.class); if (itemColorProvider != null) { // And delegate the call. // result = itemColorProvider.getForeground(object); } } return result; } /** * This does the same thing as ITableColorProvider.getBackground. */ public Object getBackground(Object object, int columnIndex) { // Get the adapter from the factory. // ITableItemColorProvider tableItemColorProvider = (ITableItemColorProvider) adapterFactory .adapt(object, ITableItemColorProvider.class); // No color is a good default. // Object result = null; // Now we could check that the adapter implements interface // ITableItemColorProvider. // if (tableItemColorProvider != null) { // And delegate the call. // result = tableItemColorProvider.getBackground(object, columnIndex); } // Otherwise, we could check that the adapter implements interface // IItemColorProvider. // else { IItemColorProvider itemColorProvider = (IItemColorProvider) adapterFactory .adapt(object, IItemColorProvider.class); if (itemColorProvider != null) { // And delegate the call. // result = itemColorProvider.getBackground(object); } } return result; } public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) { // IItemPropertySource itemPropertySource = (IItemPropertySource) adapterFactory .adapt(object, IItemPropertySource.class); return itemPropertySource != null ? itemPropertySource .getPropertyDescriptors(object) : null; } public IItemPropertyDescriptor getPropertyDescriptor(Object object, Object propertyId) { // IItemPropertySource itemPropertySource = (IItemPropertySource) adapterFactory .adapt(object, IItemPropertySource.class); return itemPropertySource != null ? itemPropertySource .getPropertyDescriptor(object, propertyId) : null; } public Object getEditableValue(Object object) { // IItemPropertySource itemPropertySource = (IItemPropertySource) adapterFactory .adapt(object, IItemPropertySource.class); return itemPropertySource != null ? itemPropertySource .getEditableValue(object) : object; } /** * This does the same thing as IStructuredContentProvider.getElements. */ public Collection<?> getElements(Object object) { // Get the adapter from the factory. // IStructuredItemContentProvider structuredItemContentProvider = (IStructuredItemContentProvider) adapterFactory .adapt(object, IStructuredItemContentProvider.class); // Either delegate the call or return nothing. // return structuredItemContentProvider != null ? structuredItemContentProvider .getElements(object) : Collections.emptyList(); } /** * This does the same thing as ITreeContentProvider.getChildren. */ public Collection<?> getChildren(Object object) { // Get the adapter from the factory. // ITreeItemContentProvider treeItemContentProvider = (ITreeItemContentProvider) adapterFactory .adapt(object, ITreeItemContentProvider.class); // Either delegate the call or return nothing. // return treeItemContentProvider != null ? treeItemContentProvider .getChildren(object) : Collections.emptyList(); } /** * This does the same thing as ITreeContentProvider.hasChildren. */ public boolean hasChildren(Object object) { // Get the adapter from the factory. // ITreeItemContentProvider treeItemContentProvider = (ITreeItemContentProvider) adapterFactory .adapt(object, ITreeItemContentProvider.class); // Either delegate the call or return nothing. // return treeItemContentProvider != null && treeItemContentProvider.hasChildren(object); } /** * This does the same thing as ITreeContentProvider.getParent. */ public Object getParent(Object object) { // Get the adapter from the factory. // ITreeItemContentProvider treeItemContentProvider = (ITreeItemContentProvider) adapterFactory .adapt(object, ITreeItemContentProvider.class); // Either delegate the call or return nothing. // return treeItemContentProvider != null ? treeItemContentProvider .getParent(object) : null; } /** * This sets the given object's parent to be parent. */ // public void setParent(Object object, Object parent) /** * This returns the text that will be displayed when editing begins. */ // public String getUpdateableText(Object object) /** * This sets the given object's label text to the given text. */ // public void setText(Object object, String text) /** * This returns a list of objects describing the different children that can * be added under the specified object in the editing domain, following the * specified sibling as closely as possible (if non-null). */ public void getNewChildDescriptors(Object object, IEditingDomain editingDomain, Object sibling, ICollector<Object> descriptors) { // Get the adapter from the factory. // IEditingDomainItemProvider editingDomainItemProvider = (IEditingDomainItemProvider) adapterFactory .adapt(object, IEditingDomainItemProvider.class); // Either delegate the call or return nothing. // if (editingDomainItemProvider != null) { editingDomainItemProvider.getNewChildDescriptors(object, editingDomain, sibling, descriptors); } } /** * This does the same thing as * {@link net.enilink.komma.edit.domain.IEditingDomain#createCommand * EditingDomain.createCommand}, i.e., it creates commands for a domain's * model objects. */ public ICommand createCommand(Object object, IEditingDomain editingDomain, Class<? extends ICommand> commandClass, CommandParameter commandParameter) { // Get the adapter from the factory. // IEditingDomainItemProvider editingDomainItemProvider = (IEditingDomainItemProvider) adapterFactory .adapt(object, IEditingDomainItemProvider.class); // Either delegate the call or return nothing. // return editingDomainItemProvider != null ? editingDomainItemProvider .createCommand(object, editingDomain, commandClass, commandParameter) : UnexecutableCommand.INSTANCE; } }