Java Model je sada tříd, které modelují objekty spojené s vytvářením, editací a sestavováním programu Java. Třídy modelu java jsou definovány v org.eclipse.jdt.core. Tyto třídy implementují chování prostředků specifické pro platformu Java a dále rozčleňují prostředky Java na prvky modelu.
Balíček org.eclipse.jdt.core definuje třídy, jež modelují prvky, ze kterých se skládá program Java. Nástroje JDT k reprezentaci struktury programu Java používají paměťový model objektu. Tato struktura se odvozuje z cesty ke třídě projektu. Model je hierarchický. Prvky programu lze rozkládat na podřízené prvky.
Manipulace s prvky Java je obdobná manipulaci s objekty prostředků. Pracujete-li s prvkem Java, máte v rukou ve skutečnosti popisovač určitého základního objektu modelu. Musíte pomocí protokolu exists() určit, zda je prvek skutečně přítomen v pracovním prostoru.
Následující tabulka uvádí souhrn různých typů prvků Java.
Prvek | Popis |
---|---|
IJavaModel | Představuje kořenový prvek Java, který odpovídá pracovnímu prostoru. Nadřazený prvek všech projektů povahy Java. Rovněž poskytuje přístup k projektům, jež nemají povahu Java. |
IJavaProject | Představuje projekt Java v pracovním prostoru. (Podřízený prvek prvku IJavaModel) |
IPackageFragmentRoot | Představuje sadu fragmentů balíčku a mapuje fragmenty na základní prostředky, tj. na složku, soubor JAR nebo na soubor ZIP. (Podřízený prvek prvku IJavaProject) |
IPackageFragment | Představuje část pracovního prostoru, která odpovídá celému balíčku nebo části balíčku. (Podřízený prvek prvku IPackageFragmentRoot) |
ICompilationUnit | Představuje zdrojový soubor Java (.java). (Podřízený prvek prvku IPackageFragment) |
IPackageDeclaration | Představuje deklaraci balíčku v kompilační jednotce. (Podřízený prvek prvku ICompilationUnit) |
IImportContainer | Představuje kolekci deklarací importu balíčku v kompilační jednotce. (Podřízený prvek prvku ICompilationUnit) |
IImportDeclaration | Představuje deklaraci importu samostatného balíčku. (Podřízený prvek prvku IImportContainer) |
IType | Představuje typ zdroje uvnitř kompilační jednotky nebo binární typ uvnitř souboru třídy. |
IField | Představuje pole uvnitř typu. (Podřízený prvek prvku IType) |
IMethod | Představuje metodu nebo konstruktor uvnitř typu. (Podřízený prvek prvku IType) |
IInitializer | Představuje statický inicializátor nebo inicializátor instance uvnitř typu. (Podřízený prvek prvku IType) |
IClassFile | Představuje kompilovaný (binární) typ. (Podřízený prvek prvku IPackageFragment) |
Všechny prvky Java podporují rozhraní IJavaElement.
Některé z prvků se zobrazují v pohledu Balíčky. Tyto prvky implementují rozhraní IOpenable , protože musejí být otevírány dříve, než je lze vyhledat. Následující obrázek uvádí způsob zobrazení těchto prvků v pohledu Balíčky.
Prvky Java implementující IOpenable se vytvářejí především z informace nalezené v souborech základního prostředku. Tytéž prvky se zobrazují běžným způsobem v pohledu Navigátor prostředků.
Ostatní prvky odpovídají položkám, ze kterých se skládá kompilační jednotka. Následující obrázek znázorňuje kompilační jednotku Java a prohlížeč osnovy obsahu, který zobrazuje zdrojové prvky v kompilační jednotce.
Tyto prvky implementují rozhraní ISourceReference, a proto mohou poskytovat příslušný zdrojový kód. (Po volbě těchto prvků v prohlížeči osnovy obsahu se příslušný zdrojový kód zobrazuje v editoru Java).
Řada prvků Java odpovídá obecným prostředkům pracovního prostoru. Chcete-li vytvářet prvky Java z obecného prostředku, doporučujeme začít použitím třídy JavaCore. Následující úsek kódu znázorňuje způsob získání prvků Java s příslušných prostředků.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { IJavaProject myJavaProject= JavaCore.create(myProject); if (myJavaProject == null) // projekt není konfigurován pro Javu (nejde o javovský projekt) return; // získat fragment balíčku nebo kořen fragmentu IJavaElement myPackageFragment= JavaCore.create(myFolder); // získat .java (kompilační jednotka), .class (soubor třídy) nebo // .jar (kořen fragmentu balíčku) IJavaElement myJavaFile = JavaCore.create(myFile); }
Po získání prvku Java můžete k procházení modelem a jeho dotazování použít rozhraní API JDT. Rovněž můžete provádět dotazy na nejavovské prostředky kombinované s prvkem Java.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { ... // získat nejavovské prostředky obsažené v projektu. Object[] nonJavaChildren = myJavaProject.getNonJavaResources(); ...
Vytvoříte-li projekt Java z jednoduchého projektu, JavaCore ověří, zda je projekt konfigurován jako javovský. Modul plug-in JDT používá povahu projektu k určení, zda projekt sdílí chování prostředí Java. Tato povaha (org.eclipse.jdt.core.JavaCore#NATURE_ID ) se přiřazuje projektu při vytvoření projektu průvodcem "Nový projekt Java". Není-li pro projekt nastavena povaha Java, JavaCore na výzvu k vytvoření projektu vrací nulový objekt.
JavaCore se používá rovněž k údržbě cesty ke třídě Java včetně umístění k prohledávání zdrojového kódu a knihoven a včetně umístění pro generování výstupních binárních souborů (.class).
V čem spočívají jedinečné vlastnosti projektů Java? Ukládají svou cestu ke třídě do souboru ".classpath" a přidávají do specifikací sestavení projektu přírůstkového tvůrce projektů Java. Jinak jde o skutečné projekty, jež lze konfigurovat s ostatními typy (a ostatními přírůstkovými tvůrci) prostřednictvím modulů plug-in. Moduly plug-in, které konfigurují projekty s chováním Java, a doplňují tak jejich vlastní chování, v běžném případě používají NewJavaProjectWizardPage k přiřazení povahy Java projektu, tj. k doplnění uživatelských povah či chování projektu.
IJavaModel lze považovat za prvek nadřazený všem projektům v pracovním prostoru, jež mají povahu Java (a s nimi proto manipulovat jako s objektem IJavaProject).