Projekt-Ansicht wie bei Grails-Projekt

Alles was NetBeans erweitert

Moderator: wegus

Antworten
VuuRWerK
Beiträge: 11
Registriert: 14.04.2011, 13:28
Wohnort: Dresden
Kontaktdaten:

Projekt-Ansicht wie bei Grails-Projekt

Beitrag von VuuRWerK » 29.03.2012, 17:50

Hallo Community,

ich entwickle derzeit einen FrameworkProvider für das PHP-Modul von Netbeans. Bis jetzt habe ich eine Grundlage (angelehnt an die Umsetzungen für Symfony und Zend) geschaffen das die PHP-Projekte auch als ein Projekt mit Framework erkannt werden. Jetzt würde ich zugern die Projekt-Ansicht in etwa genau so gestalten wie die Ansicht eines Grails-Projektes. Ich habe mich auch schon durch die Sourcen für das Grails-Projekt-Modul gearbeitet um herauszufinden wie es in diesem Modul umgesetzt wurde. Das könnte ich zwar jetzt übernehmen und es ebenfalls so aufbauen, allerdings, wird das ganze recht komplex, wer die Sourcen von dem Modul kennt weiß was ich meine :), zudem baut das Grails-Projekt-Modul auf eine ältere Netbenas Platform auf. Ich arbeite derzeit mit Version 7.1.

Daher meine Frage: Gibt es ggf. dafür schon eine "einfachere" Möglichkeit mit der neueren Platform-Version?

Noch kurz zur Veranschaulichung was mir besonders wichtig wäre:

Code: Alles auswählen

// So in etwas sieht es bei einem Grails-Projekt aus
- Controllers
  - Auflistung aller Controller-Klassen ...
- Domains
  - Auflistung aller Domain-Klassen ...
- Taglibs
  - Auflistung aller Taglib-Klassen ...
- ...
Danke schon mal,
Grüße Christian

Benutzeravatar
nigjo
Beiträge: 606
Registriert: 08.09.2009, 09:43
Wohnort: Aachen
Kontaktdaten:

Re: Projekt-Ansicht wie bei Grails-Projekt

Beitrag von nigjo » 29.03.2012, 20:36

Für Java Projekte ist es sehr einfach eigene Nodes in die Projektansicht einzuhängen: http://blog.nigjo.de/netbeans/2010/12/e ... ojektbaum/

Ich kann mir vorstellen, dass die PHP Projekte ebenso einfach zu erweitern sind, da es in der normale "Project API" der NetBeans Platform enthalten ist.

Das Tutorial für diese API ist schon für NetBeans 7.1 aktualisiert: http://platform.netbeans.org/tutorials/ ... nsion.html

Jens
Man sollte seine Werkzeuge kennen. Ansonsten haut man sich mit dem Hammer nur auf die Finger.

--
NetBeans Certified Engineer - Java Getriebe

VuuRWerK
Beiträge: 11
Registriert: 14.04.2011, 13:28
Wohnort: Dresden
Kontaktdaten:

Re: Projekt-Ansicht wie bei Grails-Projekt

Beitrag von VuuRWerK » 30.03.2012, 11:14

Hallo Jens,

schon mal vielen Dank für die Links, das ist genau das wonach ich suchte!

Allerdings habe ich jetzt noch ein Problem, meine Implementierung des LookupProvider wird nicht aufgerufen.

Code: Alles auswählen

@LookupProvider.Registration( projectType = "org-netbeans-modules-php-project" )
public class LookupProviderImpl implements LookupProvider {

  @Override
  public Lookup createAdditionalLookup( Lookup lookup ) {
    if ( lookup.lookup( CakePhpFrameworkProvider.class ) != null ) {
      return Lookups.fixed( new ControllersLookupItem( lookup.lookup( PhpProject.class ) ) );
    }

    return Lookups.fixed();
  }

}
Es könnte maximal am falschen projectType liegen, allerdings habe ich diesen aus dem PHPModule selbst entnommen wo die Implementierung der Sources, Important Files und Include Files gemacht wurde.

Die anderen Implementierungen wie die der NodeFactory wird wiederum Ordnungsgemäß aufgerufen allerdings wird die Stelle an der im Lookup nach dem LookupItem gesucht wird übersprungen weil es das LookupItem im Lookup nicht gibt, logisch, denn der LookupProvider wurde nie aufgerufen.

Code: Alles auswählen

@Override
public NodeList<?> createNodes( Project project ) {
  this.project = project.getLookup().lookup( PhpProject.class );

  ControllersLookupItem item = this.project.getLookup().lookup( ControllersLookupItem.class );  // gibt null zurück da ControllersLookupItem nicht im Lookup
  if ( item != null ) {
    try {
      return NodeFactorySupport.fixedNodeList(
        new ControllersNode( this.project ) );
    } catch ( DataObjectNotFoundException ex ) {
      Exceptions.printStackTrace( ex );
    }
  }

  return NodeFactorySupport.fixedNodeList();
}
Gibt es ggf. einen Weg herauszubekommen warum der LookupProvider nicht aufgerufen wird?

Grüße
Christian

Benutzeravatar
nigjo
Beiträge: 606
Registriert: 08.09.2009, 09:43
Wohnort: Aachen
Kontaktdaten:

Re: Projekt-Ansicht wie bei Grails-Projekt

Beitrag von nigjo » 30.03.2012, 12:05

Hi Christian

Ich nehme mal an, dass du bei der NodeFactory den gleichen Projekttyp verwendet hast, wie beim LookupProvider. Das die NodeFactory aufgerufen wird zeigt zumindest, dass dies der korrekte Typ ist.
VuuRWerK hat geschrieben:Allerdings habe ich jetzt noch ein Problem, meine Implementierung des LookupProvider wird nicht aufgerufen.
Die Sache mit den LookupProvidern ist, dass diese Funktion von der Project Implementierung selbst eingebaut sein muss. Die Project API schaut nicht automatisch nach diesem Pfad. Auf die Schnelle kann ich genau dies in den Quellen nicht finden. Es müsste eigentlich ein Lookup.forPath() Aufruf stehen, der die LookupProvider für den Projekttyp abfragt. Der fehlt aber in der Klasse org.netbeans.modules.php.project.PhpProject.

Wie du jetzt ein eigenes Objekt in das Lookup des Projekts bekommst, kann ich dir leider nicht sagen :-( Da hilft wohl nur ein Bugreport.
VuuRWerK hat geschrieben:Gibt es ggf. einen Weg herauszubekommen warum der LookupProvider nicht aufgerufen wird?
In diesem speziellen Fall hilft es zwar nicht, aber normalerweise ist die message.log deiner erstellten IDE (die Konsolenausgabe des Debuggers) die beste Quelle für Fehler- und Warnmeldungen dieser Art.

Jens

Nachtrag: Ich sehe in den Quellen zum J2SE Projekt, dass in LookupProviderSupport eine Methode createCompositeLookup() genau für diesen Zweck (das mit dem forPath()) genutzt werden kann. Aber dieser fehlt auch im PHPProject.
Man sollte seine Werkzeuge kennen. Ansonsten haut man sich mit dem Hammer nur auf die Finger.

--
NetBeans Certified Engineer - Java Getriebe

VuuRWerK
Beiträge: 11
Registriert: 14.04.2011, 13:28
Wohnort: Dresden
Kontaktdaten:

Re: Projekt-Ansicht wie bei Grails-Projekt

Beitrag von VuuRWerK » 30.03.2012, 13:07

Hallo Jens,

vielen Dank für Deine Mühen. Wenn es im PHP-Modul nicht implementiert wurde kann ich mich natürlich noch eine weile länger wundern warum es nicht aufgerufen wir :)

Ich habe daher jetzt mal ein Ticket erstellt: http://netbeans.org/bugzilla/show_bug.cgi?id=210425

Ich hoffe natürlich das sich diesem Thema angenommen wird, vllt. können die Entwickler vom PHP-Modul auch eine Art Workaround bereitstellen womit ich meine Vorstellung umsetzen kann. Bis dahin gilt es also erstmal warten und sich mit den anderen wichtigen Features des FrameworkProviders anzunehmen :)

Vielen Dank für Deine Hilfe, ich melde mich sobald es etwas zuberichten gibt und um es für die Nachwelt festzuhalten.

Grüße
Christian

Antworten