# DeveloperResourceAdapter Class After Editing

    package samples.model;

    import org.eclipse.jface.resource.ImageDescriptor;
    import org.eclipse.jface.viewers.IStructuredSelection;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.ui.views.properties.*;

    import com.ibm.etools.systems.core.ui.SystemMenuManager;
    import com.ibm.etools.systems.core.ui.view.AbstractSystemViewAdapter;
    import com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter;

    import samples.subsystems.*;
    import java.util.*;

    /**
     * This is the adapter which enables us to work with our remote developer resources.
     */
    public class DeveloperResourceAdapter
    	extends AbstractSystemViewAdapter
    	implements ISystemRemoteElementAdapter
    {
    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemViewElementAdapter#addActions(SystemMenuManager, IStructuredSelection, Shell, String)
    	 */
    	public void addActions(SystemMenuManager menu,IStructuredSelection selection,Shell parent,String menuGroup)
    	{
    	}

    	/**
    	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(Object)
    	 */
    	public ImageDescriptor getImageDescriptor(Object object)
    	{
    		return RSESamples.RSESamplesPlugin.getDefault().getImageDescriptor("ICON_ID_DEVELOPER");
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemViewElementAdapter#getText(Object)
    	 */
    	public String getText(Object element)
    	{
    		return ((DeveloperResource)element).getName();
    	}

    	/**
    	 * @see com.ibm.etools.systems.subsystems.IRemoteObjectIdentifier#getAbsoluteName(Object)
    	 */
    	public String getAbsoluteName(Object object)
    	{
    		DeveloperResource devr = (DeveloperResource)object;
    		return "Devr_" + devr.getId();
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemViewElementAdapter#getType(Object)
    	 */
    	public String getType(Object element)
    	{
    		return "Developer resource";
    	}

    	/**
    	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(Object)
    	 */
    	public Object getParent(Object o)
    	{
    		return null; // not really used, which is good because it is ambiguous
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemViewElementAdapter#hasChildren(Object)
    	 */
    	public boolean hasChildren(Object element)
    	{
    		return false;
    	}

    	/**
    	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(Object)
    	 */
    	public Object[] getChildren(Object o)
    	{
    		return null;
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors()
    	 */
    	protected IPropertyDescriptor[] internalGetPropertyDescriptors()
    	{
    		// the following array should be made static to it isn't created every time
    		PropertyDescriptor[] ourPDs = new PropertyDescriptor[2];
    		ourPDs[0] = new PropertyDescriptor("devr_id", "Id");
    		ourPDs[0].setDescription("ID number");
    		ourPDs[1] = new PropertyDescriptor("devr_dept", "Department");
    		ourPDs[1].setDescription("Department number");
    		return ourPDs;
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.AbstractSystemViewAdapter#internalGetPropertyValue()
    	 */
    	public Object internalGetPropertyValue(Object key)
    	{
    		// propertySourceInput holds the currently selected object
    		DeveloperResource devr = (DeveloperResource)propertySourceInput;
    		if (key.equals("devr_id"))
    		  return devr.getId();
    		else if (key.equals("devr_dept"))
    		  return devr.getDeptNbr();
    		return null;
    	}
    	// --------------------------------------
    	// ISystemRemoteElementAdapter methods...
    	// --------------------------------------

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getAbsoluteParentName(Object)
    	 */
    	public String getAbsoluteParentName(Object element)
    	{
    		return "root"; // not really applicable as we have no unique hierarchy
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getSubSystemFactoryId(Object)
    	 */
    	public String getSubSystemFactoryId(Object element)
    	{
    		return "samples.subsystems.factory"; // as declared in extension in plugin.xml
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getRemoteTypeCategory(Object)
    	 */
    	public String getRemoteTypeCategory(Object element)
    	{
    		return "developers"; // Course grained. Same for all our remote resources.
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getRemoteType(Object)
    	 */
    	public String getRemoteType(Object element)
    	{
    		return "developer"; // Fine grained. Unique to this resource type.
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getRemoteSubType(Object)
    	 */
    	public String getRemoteSubType(Object element)
    	{
    		return null; // Very fine grained. We don't use it.
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#refreshRemoteObject(Object, Object)
    	 */
    	public boolean refreshRemoteObject(Object oldElement, Object newElement)
    	{
    		DeveloperResource oldDevr= (DeveloperResource)oldElement;
    		DeveloperResource newDevr = (DeveloperResource)newElement;
    		newDevr.setName(oldDevr.getName());
    		return false;
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getRemoteParent(Shell, Object)
    	 */
    	public Object getRemoteParent(Shell shell, Object element) throws Exception
    	{
    		return null; // maybe this would be a Department obj, if we fully fleshed out our model
    	}

    	/**
    	 * @see com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter#getRemoteParentNamesInUse(Shell, Object)
    	 */
    	public String[] getRemoteParentNamesInUse(Shell shell, Object element)
    		throws Exception
    	{
    		// developers names do not have to be unique! So we don't need to implement this!
    		return null;

    	}

    }