# TeamResourceAdapter Class After Editing

    package samples.model;

    import org.eclipse.jface.resource.ImageDescriptor;
    import org.eclipse.jface.viewers.IStructuredSelection;
    import org.eclipse.rse.ui.SystemMenuManager;
    import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
    import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.ui.views.properties.IPropertyDescriptor;

    import samples.RSESamplesPlugin;
    import samples.subsystems.DeveloperSubSystem;

    /**
     * This is the adapter which enables us to work with our remote team resources.
     */
    public class TeamResourceAdapter extends AbstractSystemViewAdapter implements
    		ISystemRemoteElementAdapter {

    	/**
    	 * Constructor.
    	 */
    	public TeamResourceAdapter() {
    		super();
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#addActions(org.eclipse.rse.ui.SystemMenuManager,
    	 * org.eclipse.jface.viewers.IStructuredSelection, org.eclipse.swt.widgets.Shell, java.lang.String)
    	 */
    	public void addActions(SystemMenuManager menu,
    			IStructuredSelection selection, Shell parent, String menuGroup)
    	{
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getImageDescriptor(java.lang.Object)
    	 */
    	public ImageDescriptor getImageDescriptor(Object element)
    	{
    		return RSESamplesPlugin.getDefault().getImageDescriptor("ICON_ID_TEAM");
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getText(java.lang.Object)
    	 */
    	public String getText(Object element)
    	{
    		return ((TeamResource)element).getName();
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getAbsoluteName(java.lang.Object)
    	 */
    	public String getAbsoluteName(Object object)
    	{
    		TeamResource team = (TeamResource)object;
    		return "Team_"+team.getName();
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getType(java.lang.Object)
    	 */
    	public String getType(Object element)
    	{
    		return RSESamplesPlugin.getResourceString("property.team_resource.type");
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getParent(java.lang.Object)
    	 */
    	public Object getParent(Object element)
    	{
    		return null; // not really used, which is good because it is ambiguous
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#hasChildren(java.lang.Object)
    	 */
    	public boolean hasChildren(Object element)
    	{
    		return true;
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object)
    	 */
    	public Object[] getChildren(Object element)
    	{
    		return ((TeamResource)element).getDevelopers();
    	}

    	/**
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors()
    	 */
    	protected IPropertyDescriptor[] internalGetPropertyDescriptors()
    	{
    		return null;
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyValue(java.lang.Object)
    	 */
    	protected Object internalGetPropertyValue(Object key)
    	{
    		return null;
    	}

    	/**
    	 * Intercept of parent method to indicate these objects can be renamed using the RSE-supplied
    	 *  rename action.
    	 */
    	public boolean canRename(Object element)
    	{
    		return true;
    	}

    	/**
    	 * Intercept of parent method to actually do the rename. RSE supplies the rename GUI, but
    	 *  defers the action work of renaming to this adapter method.
    	 */
    	public boolean doRename(Shell shell, Object element, String newName)
    	{
    		((TeamResource)element).setName(newName);
    		return true;
    	}
    	// --------------------------------------
    	// ISystemRemoteElementAdapter methods...
    	// --------------------------------------

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getAbsoluteParentName(java.lang.Object)
    	 */
    	public String getAbsoluteParentName(Object element)
    	{
    		return "root"; // not really applicable as we have no unique hierarchy
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getSubSystemConfigurationId(java.lang.Object)
    	 */
    	public String getSubSystemConfigurationId(Object element)
    	{
    		return "samples.subsystems.factory"; // as declared in extension in plugin.xml
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteTypeCategory(java.lang.Object)
    	 */
    	public String getRemoteTypeCategory(Object element)
    	{
    		return "developers"; // Course grained. Same for all our remote resources.
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteType(java.lang.Object)
    	 */
    	public String getRemoteType(Object element)
    	{
    		return "team"; // Fine grained. Unique to this resource type.
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteSubType(java.lang.Object)
    	 */
    	public String getRemoteSubType(Object element)
    	{
    		return null; // Very fine grained. We don't use it.
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#refreshRemoteObject(java.lang.Object, java.lang.Object)
    	 */
    	public boolean refreshRemoteObject(Object oldElement, Object newElement)
    	{
    		TeamResource oldTeam = (TeamResource)oldElement;
    		TeamResource newTeam = (TeamResource)newElement;
    		newTeam.setName(oldTeam.getName());
    		return false; // If developer objects held references to their team names, we'd have to return true
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParent(org.eclipse.swt.widgets.Shell, java.lang.Object)
    	 */
    	public Object getRemoteParent(Shell shell, Object element) throws Exception
    	{
    		return null; // maybe this would be a Project or Roster object, or leave as null if this is the root
    	}

    	/* (non-Javadoc)
    	 * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParentNamesInUse(org.eclipse.swt.widgets.Shell, java.lang.Object)
    	 */
    	public String[] getRemoteParentNamesInUse(Shell shell, Object element)
    			throws Exception
    	{
    		DeveloperSubSystem ourSS = (DeveloperSubSystem)getSubSystem(element);
    		TeamResource[] allTeams = ourSS.getAllTeams();
    		String[] allNames = new String[allTeams.length];
    		for (int idx = 0; idx < allTeams.length; idx++)
    		  allNames[idx] = allTeams[idx].getName();
    		return allNames; // Return list of all team names
    	}
    }