# objectContribution mit Commands



## code404 (29. Jul 2010)

Hallo zusammen,

weiß jemand wie ich eine objectContribution auf eine Fileart (z.B. *.xml - Files) erzeuge ohne eine Action zu implementieren. 
Oder anderes gesagt eine objektContribution die ein Command ausführt.
Bis jetzt bin ich immerhin schon so weit:

```
<extension
      point="org.eclipse.ui.menus">
   <menuContribution
         locationURI="popup:org.eclipse.ui.popup.any">
      <menu
            label="Menue">
         <command
               commandId="ID.To.Command"
               label="Label"
               style="push">
            <visibleWhen
                  checkEnabled="false">
               <with
                     variable="activeMenuSelection">
                  <iterate
                        ifEmpty="false">
                     <adapt
                           type="org.eclipse.core.resources.IFile">
                     </adapt>
                  </iterate>
               </with>
            </visibleWhen>
         </command>
      </menu>
   </menuContribution>
</extension>
```

Wie schaffe ich es jetzt bloß zu testen ob das File auf *.xml endet?

Besten Dank


----------



## Wildcard (29. Jul 2010)

Du brauchst einen Property Tester. Extension ist in dem Fall wohl was du suchst:
Command Core Expressions - Eclipsepedia


----------



## code404 (30. Jul 2010)

Mhh das hab ich mir schon gedacht. 
Mit den Actions ist das ja in einem ExtensionPoint gemacht, das man aber mit dem Command-Framework so ein kladderadatsch machen muss?
Na gut hier für die Nachwelt meine Lösung:
Poperty Tester:

```
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.IFile;

public class FileExtensionTester extends PropertyTester
{
	@Override
	public boolean test(Object receiver, String property, Object[] args,
			Object expectedValue) {
		if(!(receiver instanceof IFile))
			return false;
		IFile file = (IFile)receiver;
		return file.getFileExtension().equals(expectedValue);
	}
}
```

Die dazugehörige Extension:

```
<extension
      point="org.eclipse.core.expressions.propertyTesters">
   <propertyTester
         class=FileExtensionTester"
         id="fileextensiontesterID"
         namespace="fileextension"
         properties="type"
         type="org.eclipse.core.resources.IFile">
   </propertyTester
</extension>
```

Und dann noch der Händler


```
<extension
      point="org.eclipse.ui.menus">
   <menuContribution
         locationURI="popup:org.eclipse.ui.popup.any">
      <menu
            label="Menue">
         <command
               commandId="ID.To.Command"
               label="Label"
               style="push">
            <visibleWhen
                  checkEnabled="false">
               <with
                     variable="activeMenuSelection">
                  <iterate
                        ifEmpty="false">
                     <test
                           forcePluginActivation="true"
                           property="fileextension.type"
                           value="xml">
                     </test>
                  </iterate>
               </with>
            </visibleWhen>
         </command>
      </menu>
```


----------



## Wildcard (30. Jul 2010)

Das hättest du dir sparen können 
Dieses Property gibt es schon (siehe Link den ich oben gepostet habe), du hättest also keinen eigenen Tester gebraucht.


----------

