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).