Você pode incluir uma ação no menu de contexto da visualização Repositórios do CARMA (CARMA Repositories), para que essa ação possa ser executada nos recursos do CARMA.
Exemplo demarcação para incluir um item de menu na visualização Navegador (Navigator):
Você pode incluir a seguinte marcação no arquivo plugin.xml, se desejar definir um item de menu para aparecer para arquivos gerenciados por CARMA na visualização Navegador (Navigator):
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.ibm.carma.action.disconnected.iFile"
objectClass="org.eclipse.core.resources.IFile"
adaptable="true">
<filter
name="projectPersistentProperty"
value="org.eclipse.team.core.repository=com.ibm.carma">
</filter>
<action
label="ABC Action"
class="com.xyz.ABCDelegate"
id="com.xyz.abc">
</action>
</objectContribution>
</extension>
Observe que o atributo objectClass da tag objectContribution é especificado como sendo org.eclipse.core.resources.IFile, indicando que esse item de menu deve aparecer no menu de contexto para a visualização Navegador (Navigator). O atributo id da tag objectContribution é simplesmente um identificador exclusivo para sua ação. A tag filter especificada limita o item de menu para que apareça apenas para aqueles arquivos na visualização Navegador (Navigator), que são gerenciados pelo CARMA. Você também pode incluir tags filter adicionais, se necessário. Finalmente, a tag action especifica o objeto delegado no atributo class. Exemplo de marcação para incluir um item de menu na visualização Repositórios do CARMA (CARMA Repositories):
Você pode incluir a seguinte marcação no arquivo plugin.xml, se desejar definir um item de menu para que apareça para os recursos na visualização Repositórios do CARMA (CARMA Repositories):
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.ibm.carma.action.disconnected.carmaContent"
objectClass="com.ibm.carma.model.CARMAContent
adaptable="true">
<filter
name="repositoryManager"
value="My RAM">
</filter>
<action
label="ABC Action"
class="com.xyz.ABCDelegate"
id="com.xyz.abc">
</action>
</objectContribution>
</extension>
Aqui, o atributo objectClass
da tag objectContribution é especificado como sendocom.ibm.carma.model.CARMAContent,
indicando que esse item de menu deve aparecer no menu de contexto para a visualização Repositórios
do CARMA. Observe que um filtro diferente é utilizado neste exemplo: Esse filtro limita o item de menu para aparecer apenas para recursos sob o RAM denominado "My RAM". O atributo name da tag filter é utilizado para especificar o tipo de filtro que está sendo aplicado. Consulte CarmaActionFilter para obter outros valores relevantes para o atributo name. Finalmente, a tag action especifica o objeto delegado no atributo class.Código de exemplo para ABCDelegate:
Você pode utilizar o seguinte código como ponto inicial para o desenvolvimento de seu próprio objeto delegado:public class ABCDelegate extends CarmaObjectActionDelegate {
public void run(IAction action) {
CARMAContent[] members = (CARMAContent[]) getSelectedCarmaResources().toArray(new CARMAContent[0]);
//desempenhar tarefa, planejar tarefa, etc.
}
public void selectionChanged(IAction action, ISelection selection) {
super.selectionChanged(action, selection);
//esse é o ID designado pela instalação da ação
action.setEnabled(!isUnsupported("101"));
}
}
A primeira linha no método run acima obtém uma matriz dos recursos do CARMA selecionados, que você pode então utilizar para desempenhar sua ação. Você deve, por exemplo, efetuar loop por todos os recursos selecionados e configurar determinadas propriedades de metadados. Apesar de ser realmente necessário substituir o método run, também pode ser útil substituir o método selectionChanged para atualizar a disponibilidade da ação, como mostrado no exemplo acima.
Como definido no exemplo, selectionChanged utiliza a função auxiliar isUnsupported de CarmaObjectActionDelegate para ativar a ação com um ID de ação 101, se a nova seleção dos objetos suportar a ação. Apesar de um valor 101 ser codificado permanentemente no código de exemplo, é possível resolver o ID da ação dinamicamente, se o nome da ação for conhecido. Simplesmente use o método getActions do objeto RepositoryManager apropriado para recuperar uma lista de ações disponíveis para o RAM, buscar pela lista para localizar a ação apropriada, com base no nome da ação e, em seguida, utilizar o método getActionId para recuperar o ID da ação do objeto Action correspondente. Você pode resolver o ID utilizando esse método mais dinâmico, se não estiver certo de qual é o ID de sua ação.