Prüfen ob eine Datei im Projektordner existiert

maestr0

Bekanntes Mitglied
Hallo,

ich habe einen extension-Point...
Java:
<plugin>
   <extension point="org.eclipse.debug.ui.launchShortcuts">
      <shortcut id="org.pit.testID"
                class="org.pit.ModuleAction"
                label="Build..."
                modes="run,debug">
         <contextualLaunch>
           <contextLabel label="Build..." mode="run"/>
           <contextLabel label="Build..." mode="debug"/>
           <enablement>
              <count value="1"/>
              <iterate>
                 <or>
                    <adapt type="org.eclipse.core.resources.IFile">
                       <test property="org.eclipse.core.resources.name" value="test.xml"/>
                    </adapt>
					<instanceof value="org.eclipse.core.resources.IFolder"/>
                 </or>
              </iterate>
           </enablement>
       </contextualLaunch>
     </shortcut>
     </extension>
</plugin>

Dieser funktioniert auch soweit.
Der Extension Point wird im Moment in 2 Fällen angezeigt:
1. Wenn ein Rechtsklick auf eine Datei mit dem Namen "test.xml" gemacht wird.
2. Wenn ein Rechtsklick auf irgendeinen Projekt-Ordner gemacht wird.

Den zweiten Fall möchte ich nun ausbessern,in dem der Extension Point nur aktiviert wird,wenn in dem Projekt-Ordner eine Datei mit dem Namen "test.xml" existiert.

Hier wurde das Problem von jemand anderem beschrieben,jedoch habe ich mir den PropertyTester angeschaut,bin aber trotzdem nicht ganz schlau daraus geworden.
Eclipse Community Forums: Eclipse Platform launchshortcut enablement specification
Habt ihr eine Lösung parat?
 
G

Gonzo17

Gast
Hast du das hier gelesen?
Help - Eclipse SDK

Sieht für mich recht simpel aus. Eine Extension "org.eclipse.core.expressions.propertyTesters" anlegen, die befüllen, eine entsprechende Klasse referenzieren und dann diesen Property Tester verwenden. Hab es nicht ausprobiert, aber kurz angeschaut, scheint recht easy zu gehen.
 

maestr0

Bekanntes Mitglied
Ja habe ich,aber habe gedacht,dass man auch ohne das implementieren einer neuen Klasse auskommt.
Aber nun gut,bleibt mir wohl nix anderes übrig.
 
G

Gonzo17

Gast
Das könnte eventuell auch klappen, ich wüsste jetzt aber nicht wie. Ist ja nun keine standardmäßige Anforderung, die du hast. Dafür kannst du ja mit der Implementierung der Klasse auf alles prüfen worauf du Lust hast. :)
 

maestr0

Bekanntes Mitglied
Habe nun ein bisschen rumexperimentiert,aber komme zu keinem besseren Ergebnis,irgendwie ignoriert er meine test() Methode einfach.

plugin.xml:
Java:
<iterate>
                 <or>
                    <adapt type="org.eclipse.core.resources.IFile">
                       <test property="org.eclipse.core.resources.name" value="test.xml"/>
                    </adapt>
                         <adapt type="org.eclipse.core.resources.IFolder">
                        <test property="org.pit.testers.containsFile"/>
                    </adapt>  
                 </or>
              </iterate>

<extension point="org.eclipse.core.expressions.propertyTesters">
    <propertyTester
      id="org.pit.FileTester"
      type="org.eclipse.core.resources.IFolder"
      namespace="org.pit.testers"
      properties="containsFile"
      class="org.pit.FilePropertyTester">
    </propertyTester>
  </extension>



Java-Klasse:

Java:
public class FilePropertyTester extends PropertyTester
{
   public static final String PROPERTY_CONTAINS_FILE = "containsFile";

   public FilePropertyTester()
   {
      // TODO Auto-generated constructor stub
   }

   @Override
   public boolean test(Object receiver, String property, Object[] args, Object expectedValue)
   {
      if (PROPERTY_CONTAINS_FILE.equals(property))
      {
         File folder = new File(((Folder) receiver).getLocation().toOSString());
         File[] elementList = folder.listFiles();
         List<String> fileList = new ArrayList<String>();

         for (File file : elementList)
         {
            fileList.add(file.getName());
         }

         if (fileList.contains("test.xml"))
         {
            return true;
         }
      }

      return false;

   }

}
 
G

Gonzo17

Gast
Erstmal eine Frage - meinst du mit "Projekt-Ordner" ein Projekt oder einen Ordner? Wenn du ein Projekt meinst, dann solltest du IProject statt IFolder verwenden.

Ansonsten erstmal keine Ahnung woran das liegt, hab es mit deinem Code versucht, aber das von dir beschriebene Problem auch gehabt. Kenne mich in der Ecke aber zu wenig aus, hab auch nicht wirklich hinbekommen eine gescheite Bedingung fürs "enablement" aufzubauen, hab sowas da noch nie gemacht.
 

maestr0

Bekanntes Mitglied
Also ich mein ein Ordner innerhalb eine Projektes.
Trotzdem danke für deine Mühe :) Dann werde ich morgen mal weiter rumprobieren ;)
 

maestr0

Bekanntes Mitglied
Das war ja wieder klar :) Es lag an einer beschi***** Zeile ;) forcePluginActivation="true"
Die Lösung
Java:
<adapt type="org.eclipse.core.resources.IFolder">
                       <test 
                      forcePluginActivation="true"
                       property="org.pit.testers.containsFile"> 
                       </test>
                    </adapt>

Hier zu finden Issue 397 - counterclockwise - File context menu misses "Run As > Clojure Application (preload file)" - Counterclockwise is an Eclipse plugin helping developers write Clojure code - Google Project Hosting
 
G

Gonzo17

Gast
Ha, sehr cool, funktioniert tatsächlich. :)

Aber ein Verbesserungsvorschlag. In deinem FilePropertyTester prüfst du direkt
Code:
if (fileList.contains("test.xml"))
. Wieso nimmst du hier nicht
Code:
expectedValue
? Dann steht in der plugin.xml entsprechend das hier:

Code:
                    <adapt type="org.eclipse.core.resources.IFolder">
                    	<test
                             forcePluginActivation="true"
                             property="org.pit.testers.containsFile"
                             value="test.xml"> 
                       </test>
                    </adapt>

Damit kannst du diesen Tester immer wieder verwenden, wenn du prüfen willst, ob eine bestimmte Datei im Ordner vorhanden ist. Nicht nur eine "test.xml". :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G EMF Model auf xsd Element mit eIsSet prüfen Plattformprogrammierung 15
S Prüfen, ob Maustaste gedrückt ist Plattformprogrammierung 6
Z Aus einem PDF-Formular heraus eine Android App Outlook starten Plattformprogrammierung 3
Bregedur Suche eine Möglichkeit alle Dateien eines Verzeichnisses in eine Java-Applet zu übernehmen Plattformprogrammierung 1
G Eine Library in Eclipse zur Verfügung stellen Plattformprogrammierung 14
B Footer bei den Birt-Reports für nur eine Seite anzeigen Plattformprogrammierung 4
L RCP RCP als eine Exe-Datei exportieren? Plattformprogrammierung 2
N Was brauche ich für eine Web- und was für eine Fat-Client-Anwendung? Plattformprogrammierung 14
M Unter welchem Benutzer läuft eine RCP-Anwendung? (Windows-Berechtigungsproblem) Plattformprogrammierung 7
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
M Eclipse Plug-in: Wie eine Grafik einfügen? Plattformprogrammierung 20
L RCP Help in eine View einbinden? Plattformprogrammierung 3
B mit eclipse eine PDF erstellen Plattformprogrammierung 1
lumo ECLIPSE RCP - mehrere plugins - eine resource? Plattformprogrammierung 3
N Ant Skript um eine UPdateseite zu bauen Plattformprogrammierung 3
T Wie erzeuge ich eine PropertyPage Plattformprogrammierung 2
minzel Auf eine Instanz zugreifen Plattformprogrammierung 2
N Noch eine Frage zu GEF Plattformprogrammierung 5
R SWT: nur eine Instanz einer View erlauben Plattformprogrammierung 5
R Aktuelle Datei in Plugin bearbeiten Plattformprogrammierung 2
feinperligekohlensaeure Eclipse Workspace gemeinsam Nutzen -> keine .project Datei Plattformprogrammierung 1
P xText Datei verstecken Plattformprogrammierung 5
B Mac Installer aus .product Datei - Programm öffnet sich nicht Plattformprogrammierung 1
P RCP An Datei speichern (Protokolldatei) Plattformprogrammierung 2
S RCP Exportiertes RCP Produkt lädt Datei nicht, bei Start aus Eclipse wird Datei jedoch gefunden Plattformprogrammierung 6
S Wie lauffähige .jar-Datei mit Netbeans für Java3D Anwendung erstellen? Plattformprogrammierung 8
C Ausführbare Jar erzeugen (Datei wird nicht gefunden) Plattformprogrammierung 4
H Datei in eclipse wird nicht erkannt Plattformprogrammierung 3
G RCP Datei im Bundle Plattformprogrammierung 6
C Pdf in jar datei einbinden mit eclipse Plattformprogrammierung 23
X Datei in einem Eclipse Projekt über Plugin zugreifen Plattformprogrammierung 2
P Update: Nur die JAR Datei für alle Betriebssysteme ? Plattformprogrammierung 9
Spot84 datei im editor öffnen(tutorial undurchsichtig) Plattformprogrammierung 5
Spot84 ecore konforme xml datei erstellen Plattformprogrammierung 7
M Plattformunabhängig Ordner und Datei in Workspace anlegen Plattformprogrammierung 12
S XMI Datei in Access einlesen Plattformprogrammierung 9
B Eclipse-Console: Hyperlink ausgeben, der Datei öffnet Plattformprogrammierung 5
G Jar Datei in Eclipse erstellen mit Ressourcen Ordner Plattformprogrammierung 9
G xml-Datei im Editor importieren Plattformprogrammierung 3
M Relative Pfade zur ini-Datei Plattformprogrammierung 28
G jar Datei zu RCP hinzufügen Plattformprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben