#Signature file v4.1
#Version 1.44.0

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

CLSS public final org.netbeans.modules.j2ee.persistence.api.EntityClassScope
meth public org.netbeans.modules.j2ee.metadata.model.api.MetadataModel<org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata> getEntityMappingsModel(boolean)
meth public static org.netbeans.modules.j2ee.persistence.api.EntityClassScope getEntityClassScope(org.openide.filesystems.FileObject)
supr java.lang.Object
hfds impl,providers

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.PersistenceEnvironment
meth public abstract java.lang.ClassLoader getProjectClassLoader(java.net.URL[])
meth public abstract java.util.List<java.net.URL> getProjectClassPath()
meth public abstract java.util.List<java.net.URL> getProjectClassPath(org.openide.filesystems.FileObject)
meth public abstract org.netbeans.api.project.Project getProject()
meth public abstract org.openide.filesystems.FileObject getLocation()

CLSS public final org.netbeans.modules.j2ee.persistence.api.PersistenceLocation
meth public static org.openide.filesystems.FileObject createLocation(org.netbeans.api.project.Project) throws java.io.IOException
meth public static org.openide.filesystems.FileObject createLocation(org.netbeans.api.project.Project,org.openide.filesystems.FileObject) throws java.io.IOException
meth public static org.openide.filesystems.FileObject getLocation(org.netbeans.api.project.Project)
meth public static org.openide.filesystems.FileObject getLocation(org.netbeans.api.project.Project,org.openide.filesystems.FileObject)
supr java.lang.Object

CLSS public final org.netbeans.modules.j2ee.persistence.api.PersistenceScope
meth public org.netbeans.api.java.classpath.ClassPath getClassPath()
meth public org.netbeans.modules.j2ee.metadata.model.api.MetadataModel<org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata> getEntityMappingsModel(java.lang.String)
meth public org.openide.filesystems.FileObject getPersistenceXml()
meth public static org.netbeans.modules.j2ee.persistence.api.PersistenceScope getPersistenceScope(org.openide.filesystems.FileObject)
supr java.lang.Object
hfds impl,providers

CLSS public final org.netbeans.modules.j2ee.persistence.api.PersistenceScopes
fld public final static java.lang.String PROP_PERSISTENCE_SCOPES = "persistenceScopes"
meth public org.netbeans.modules.j2ee.persistence.api.PersistenceScope[] getPersistenceScopes()
meth public static org.netbeans.modules.j2ee.persistence.api.PersistenceScopes getPersistenceScopes(org.netbeans.api.project.Project)
meth public static org.netbeans.modules.j2ee.persistence.api.PersistenceScopes getPersistenceScopes(org.netbeans.api.project.Project,org.openide.filesystems.FileObject)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds impl

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride
meth public abstract int addJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int removeJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int sizeJoinColumn()
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn getJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn newJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[] getJoinColumn()
meth public abstract void setJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract void setJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[])
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column getColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column newColumn()
meth public abstract void setColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column)
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes
meth public abstract int addBasic(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic)
meth public abstract int addEmbedded(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded)
meth public abstract int addId(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id)
meth public abstract int addManyToMany(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany)
meth public abstract int addManyToOne(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne)
meth public abstract int addOneToMany(org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany)
meth public abstract int addOneToOne(org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne)
meth public abstract int addTransient(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient)
meth public abstract int addVersion(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version)
meth public abstract int removeBasic(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic)
meth public abstract int removeEmbedded(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded)
meth public abstract int removeId(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id)
meth public abstract int removeManyToMany(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany)
meth public abstract int removeManyToOne(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne)
meth public abstract int removeOneToMany(org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany)
meth public abstract int removeOneToOne(org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne)
meth public abstract int removeTransient(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient)
meth public abstract int removeVersion(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version)
meth public abstract int sizeBasic()
meth public abstract int sizeEmbedded()
meth public abstract int sizeId()
meth public abstract int sizeManyToMany()
meth public abstract int sizeManyToOne()
meth public abstract int sizeOneToMany()
meth public abstract int sizeOneToOne()
meth public abstract int sizeTransient()
meth public abstract int sizeVersion()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic getBasic(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic newBasic()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic[] getBasic()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded getEmbedded(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded newEmbedded()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddedId getEmbeddedId()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddedId newEmbeddedId()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded[] getEmbedded()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id getId(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id newId()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id[] getId()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany getManyToMany(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany newManyToMany()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany[] getManyToMany()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne getManyToOne(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne newManyToOne()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne[] getManyToOne()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany getOneToMany(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany newOneToMany()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany[] getOneToMany()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne getOneToOne(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne newOneToOne()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne[] getOneToOne()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient getTransient(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient newTransient()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient[] getTransient()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version getVersion(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version newVersion()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version[] getVersion()
meth public abstract void setBasic(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic)
meth public abstract void setBasic(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic[])
meth public abstract void setEmbedded(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded)
meth public abstract void setEmbedded(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded[])
meth public abstract void setEmbeddedId(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddedId)
meth public abstract void setId(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id)
meth public abstract void setId(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id[])
meth public abstract void setManyToMany(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany)
meth public abstract void setManyToMany(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany[])
meth public abstract void setManyToOne(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne)
meth public abstract void setManyToOne(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne[])
meth public abstract void setOneToMany(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany)
meth public abstract void setOneToMany(org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany[])
meth public abstract void setOneToOne(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne)
meth public abstract void setOneToOne(org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne[])
meth public abstract void setTransient(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient)
meth public abstract void setTransient(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient[])
meth public abstract void setVersion(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version)
meth public abstract void setVersion(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic
meth public abstract boolean isOptional()
meth public abstract java.lang.String getEnumerated()
meth public abstract java.lang.String getFetch()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getTemporal()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column getColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column newColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Lob getLob()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Lob newLob()
meth public abstract void setColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column)
meth public abstract void setEnumerated(java.lang.String)
meth public abstract void setFetch(java.lang.String)
meth public abstract void setLob(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Lob)
meth public abstract void setName(java.lang.String)
meth public abstract void setOptional(boolean)
meth public abstract void setTemporal(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getCascadeAll()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getCascadeMerge()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getCascadePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getCascadeRefresh()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getCascadeRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType newEmptyType()
meth public abstract void setCascadeAll(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setCascadeMerge(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setCascadePersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setCascadeRefresh(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setCascadeRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column
meth public abstract boolean isInsertable()
meth public abstract boolean isNullable()
meth public abstract boolean isUnique()
meth public abstract boolean isUpdatable()
meth public abstract int getLength()
meth public abstract int getPrecision()
meth public abstract int getScale()
meth public abstract java.lang.String getColumnDefinition()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getTable()
meth public abstract void setColumnDefinition(java.lang.String)
meth public abstract void setInsertable(boolean)
meth public abstract void setLength(int)
meth public abstract void setName(java.lang.String)
meth public abstract void setNullable(boolean)
meth public abstract void setPrecision(int)
meth public abstract void setScale(int)
meth public abstract void setTable(java.lang.String)
meth public abstract void setUnique(boolean)
meth public abstract void setUpdatable(boolean)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult
meth public abstract java.lang.String getName()
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.DiscriminatorColumn
meth public abstract int getLength()
meth public abstract java.lang.String getColumnDefinition()
meth public abstract java.lang.String getDiscriminatorType()
meth public abstract java.lang.String getName()
meth public abstract void setColumnDefinition(java.lang.String)
meth public abstract void setDiscriminatorType(java.lang.String)
meth public abstract void setLength(int)
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable
fld public final static java.lang.String FIELD_ACCESS = "FIELD"
fld public final static java.lang.String PROPERTY_ACCESS = "PROPERTY"
meth public abstract boolean isMetadataComplete()
meth public abstract java.lang.String getAccess()
meth public abstract java.lang.String getClass2()
meth public abstract java.lang.String getDescription()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddableAttributes getAttributes()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddableAttributes newEmbeddableAttributes()
meth public abstract void setAccess(java.lang.String)
meth public abstract void setAttributes(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddableAttributes)
meth public abstract void setClass2(java.lang.String)
meth public abstract void setDescription(java.lang.String)
meth public abstract void setMetadataComplete(boolean)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddableAttributes
meth public abstract int addBasic(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic)
meth public abstract int addTransient(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient)
meth public abstract int removeBasic(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic)
meth public abstract int removeTransient(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient)
meth public abstract int sizeBasic()
meth public abstract int sizeTransient()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic getBasic(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic newBasic()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic[] getBasic()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient getTransient(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient newTransient()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient[] getTransient()
meth public abstract void setBasic(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic)
meth public abstract void setBasic(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Basic[])
meth public abstract void setTransient(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient)
meth public abstract void setTransient(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embedded
meth public abstract int addAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract int removeAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract int sizeAttributeOverride()
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride getAttributeOverride(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride newAttributeOverride()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride[] getAttributeOverride()
meth public abstract void setAttributeOverride(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract void setAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride[])
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmbeddedId
meth public abstract int addAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract int removeAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract int sizeAttributeOverride()
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride getAttributeOverride(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride newAttributeOverride()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride[] getAttributeOverride()
meth public abstract void setAttributeOverride(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract void setAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride[])
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity
fld public final static java.lang.String FIELD_ACCESS = "FIELD"
fld public final static java.lang.String PROPERTY_ACCESS = "PROPERTY"
meth public abstract boolean isMetadataComplete()
meth public abstract int addAssociationOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride)
meth public abstract int addAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract int addNamedNativeQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery)
meth public abstract int addNamedQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery)
meth public abstract int addPrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract int addSecondaryTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable)
meth public abstract int addSqlResultSetMapping(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping)
meth public abstract int removeAssociationOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride)
meth public abstract int removeAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract int removeNamedNativeQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery)
meth public abstract int removeNamedQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery)
meth public abstract int removePrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract int removeSecondaryTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable)
meth public abstract int removeSqlResultSetMapping(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping)
meth public abstract int sizeAssociationOverride()
meth public abstract int sizeAttributeOverride()
meth public abstract int sizeNamedNativeQuery()
meth public abstract int sizeNamedQuery()
meth public abstract int sizePrimaryKeyJoinColumn()
meth public abstract int sizeSecondaryTable()
meth public abstract int sizeSqlResultSetMapping()
meth public abstract java.lang.String getAccess()
meth public abstract java.lang.String getClass2()
meth public abstract java.lang.String getDescription()
meth public abstract java.lang.String getDiscriminatorValue()
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride getAssociationOverride(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride newAssociationOverride()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride[] getAssociationOverride()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride getAttributeOverride(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride newAttributeOverride()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride[] getAttributeOverride()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes getAttributes()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes newAttributes()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.DiscriminatorColumn getDiscriminatorColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.DiscriminatorColumn newDiscriminatorColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getExcludeDefaultListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getExcludeSuperclassListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType newEmptyType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners getEntityListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners newEntityListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass getIdClass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass newIdClass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Inheritance getInheritance()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Inheritance newInheritance()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery getNamedNativeQuery(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery newNamedNativeQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery[] getNamedNativeQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery getNamedQuery(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery newNamedQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery[] getNamedQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad getPostLoad()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad newPostLoad()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist getPostPersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist newPostPersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove getPostRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove newPostRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate getPostUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate newPostUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist getPrePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist newPrePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove getPreRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove newPreRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate getPreUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate newPreUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn getPrimaryKeyJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn newPrimaryKeyJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn[] getPrimaryKeyJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable getSecondaryTable(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable newSecondaryTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable[] getSecondaryTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator getSequenceGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator newSequenceGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping getSqlResultSetMapping(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping newSqlResultSetMapping()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping[] getSqlResultSetMapping()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Table getTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Table newTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator getTableGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator newTableGenerator()
meth public abstract void setAccess(java.lang.String)
meth public abstract void setAssociationOverride(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride)
meth public abstract void setAssociationOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AssociationOverride[])
meth public abstract void setAttributeOverride(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride)
meth public abstract void setAttributeOverride(org.netbeans.modules.j2ee.persistence.api.metadata.orm.AttributeOverride[])
meth public abstract void setAttributes(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes)
meth public abstract void setClass2(java.lang.String)
meth public abstract void setDescription(java.lang.String)
meth public abstract void setDiscriminatorColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.DiscriminatorColumn)
meth public abstract void setDiscriminatorValue(java.lang.String)
meth public abstract void setEntityListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners)
meth public abstract void setExcludeDefaultListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setExcludeSuperclassListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setIdClass(org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass)
meth public abstract void setInheritance(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Inheritance)
meth public abstract void setMetadataComplete(boolean)
meth public abstract void setName(java.lang.String)
meth public abstract void setNamedNativeQuery(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery)
meth public abstract void setNamedNativeQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery[])
meth public abstract void setNamedQuery(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery)
meth public abstract void setNamedQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery[])
meth public abstract void setPostLoad(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad)
meth public abstract void setPostPersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist)
meth public abstract void setPostRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove)
meth public abstract void setPostUpdate(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate)
meth public abstract void setPrePersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist)
meth public abstract void setPreRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove)
meth public abstract void setPreUpdate(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate)
meth public abstract void setPrimaryKeyJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract void setPrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn[])
meth public abstract void setSecondaryTable(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable)
meth public abstract void setSecondaryTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable[])
meth public abstract void setSequenceGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator)
meth public abstract void setSqlResultSetMapping(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping)
meth public abstract void setSqlResultSetMapping(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping[])
meth public abstract void setTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Table)
meth public abstract void setTableGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener
meth public abstract java.lang.String getClass2()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad getPostLoad()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad newPostLoad()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist getPostPersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist newPostPersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove getPostRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove newPostRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate getPostUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate newPostUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist getPrePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist newPrePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove getPreRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove newPreRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate getPreUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate newPreUpdate()
meth public abstract void setClass2(java.lang.String)
meth public abstract void setPostLoad(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad)
meth public abstract void setPostPersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist)
meth public abstract void setPostRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove)
meth public abstract void setPostUpdate(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate)
meth public abstract void setPrePersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist)
meth public abstract void setPreRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove)
meth public abstract void setPreUpdate(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners
meth public abstract int addEntityListener(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener)
meth public abstract int removeEntityListener(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener)
meth public abstract int sizeEntityListener()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener getEntityListener(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener newEntityListener()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener[] getEntityListener()
meth public abstract void setEntityListener(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener)
meth public abstract void setEntityListener(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListener[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappings
meth public abstract int addEmbeddable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable)
meth public abstract int addEntity(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity)
meth public abstract int addMappedSuperclass(org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass)
meth public abstract int addNamedNativeQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery)
meth public abstract int addNamedQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery)
meth public abstract int addSequenceGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator)
meth public abstract int addSqlResultSetMapping(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping)
meth public abstract int addTableGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator)
meth public abstract int removeEmbeddable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable)
meth public abstract int removeEntity(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity)
meth public abstract int removeMappedSuperclass(org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass)
meth public abstract int removeNamedNativeQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery)
meth public abstract int removeNamedQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery)
meth public abstract int removeSequenceGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator)
meth public abstract int removeSqlResultSetMapping(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping)
meth public abstract int removeTableGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator)
meth public abstract int sizeEmbeddable()
meth public abstract int sizeEntity()
meth public abstract int sizeMappedSuperclass()
meth public abstract int sizeNamedNativeQuery()
meth public abstract int sizeNamedQuery()
meth public abstract int sizeSequenceGenerator()
meth public abstract int sizeSqlResultSetMapping()
meth public abstract int sizeTableGenerator()
meth public abstract java.lang.String getAccess()
meth public abstract java.lang.String getCatalog()
meth public abstract java.lang.String getDescription()
meth public abstract java.lang.String getPackage()
meth public abstract java.lang.String getSchema()
meth public abstract java.lang.String getVersion()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable getEmbeddable(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable newEmbeddable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable[] getEmbeddable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity getEntity(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity newEntity()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity[] getEntity()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass getMappedSuperclass(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass newMappedSuperclass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass[] getMappedSuperclass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery getNamedNativeQuery(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery newNamedNativeQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery[] getNamedNativeQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery getNamedQuery(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery newNamedQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery[] getNamedQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitMetadata getPersistenceUnitMetadata()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitMetadata newPersistenceUnitMetadata()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator getSequenceGenerator(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator newSequenceGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator[] getSequenceGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping getSqlResultSetMapping(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping newSqlResultSetMapping()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping[] getSqlResultSetMapping()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator getTableGenerator(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator newTableGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator[] getTableGenerator()
meth public abstract void setAccess(java.lang.String)
meth public abstract void setCatalog(java.lang.String)
meth public abstract void setDescription(java.lang.String)
meth public abstract void setEmbeddable(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable)
meth public abstract void setEmbeddable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Embeddable[])
meth public abstract void setEntity(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity)
meth public abstract void setEntity(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Entity[])
meth public abstract void setMappedSuperclass(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass)
meth public abstract void setMappedSuperclass(org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass[])
meth public abstract void setNamedNativeQuery(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery)
meth public abstract void setNamedNativeQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery[])
meth public abstract void setNamedQuery(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery)
meth public abstract void setNamedQuery(org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery[])
meth public abstract void setPackage(java.lang.String)
meth public abstract void setPersistenceUnitMetadata(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitMetadata)
meth public abstract void setSchema(java.lang.String)
meth public abstract void setSequenceGenerator(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator)
meth public abstract void setSequenceGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator[])
meth public abstract void setSqlResultSetMapping(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping)
meth public abstract void setSqlResultSetMapping(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping[])
meth public abstract void setTableGenerator(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator)
meth public abstract void setTableGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator[])
meth public abstract void setVersion(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata
meth public abstract org.netbeans.api.java.source.JavaSource createJavaSource()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappings getRoot()

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult
meth public abstract int addFieldResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult)
meth public abstract int removeFieldResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult)
meth public abstract int sizeFieldResult()
meth public abstract java.lang.String getDiscriminatorColumn()
meth public abstract java.lang.String getEntityClass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult getFieldResult(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult newFieldResult()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult[] getFieldResult()
meth public abstract void setDiscriminatorColumn(java.lang.String)
meth public abstract void setEntityClass(java.lang.String)
meth public abstract void setFieldResult(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult)
meth public abstract void setFieldResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.FieldResult
meth public abstract java.lang.String getColumn()
meth public abstract java.lang.String getName()
meth public abstract void setColumn(java.lang.String)
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.GeneratedValue
meth public abstract java.lang.String getGenerator()
meth public abstract java.lang.String getStrategy()
meth public abstract void setGenerator(java.lang.String)
meth public abstract void setStrategy(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Id
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getTemporal()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column getColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column newColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.GeneratedValue getGeneratedValue()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.GeneratedValue newGeneratedValue()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator getSequenceGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator newSequenceGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator getTableGenerator()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator newTableGenerator()
meth public abstract void setColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column)
meth public abstract void setGeneratedValue(org.netbeans.modules.j2ee.persistence.api.metadata.orm.GeneratedValue)
meth public abstract void setName(java.lang.String)
meth public abstract void setSequenceGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator)
meth public abstract void setTableGenerator(org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator)
meth public abstract void setTemporal(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass
meth public abstract java.lang.String getClass2()
meth public abstract void setClass2(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Inheritance
meth public abstract java.lang.String getStrategy()
meth public abstract void setStrategy(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn
meth public abstract boolean isInsertable()
meth public abstract boolean isNullable()
meth public abstract boolean isUnique()
meth public abstract boolean isUpdatable()
meth public abstract java.lang.String getColumnDefinition()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getReferencedColumnName()
meth public abstract java.lang.String getTable()
meth public abstract void setColumnDefinition(java.lang.String)
meth public abstract void setInsertable(boolean)
meth public abstract void setName(java.lang.String)
meth public abstract void setNullable(boolean)
meth public abstract void setReferencedColumnName(java.lang.String)
meth public abstract void setTable(java.lang.String)
meth public abstract void setUnique(boolean)
meth public abstract void setUpdatable(boolean)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable
meth public abstract int addInverseJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int addJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int addUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int removeInverseJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int removeJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int removeUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int sizeInverseJoinColumn()
meth public abstract int sizeJoinColumn()
meth public abstract int sizeUniqueConstraint()
meth public abstract java.lang.String getCatalog()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getSchema()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn getInverseJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn getJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn newJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[] getInverseJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[] getJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint getUniqueConstraint(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint newUniqueConstraint()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[] getUniqueConstraint()
meth public abstract void setCatalog(java.lang.String)
meth public abstract void setInverseJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract void setInverseJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[])
meth public abstract void setJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract void setJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[])
meth public abstract void setName(java.lang.String)
meth public abstract void setSchema(java.lang.String)
meth public abstract void setUniqueConstraint(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract void setUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Lob

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToMany
meth public abstract java.lang.String getFetch()
meth public abstract java.lang.String getMappedBy()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getOrderBy()
meth public abstract java.lang.String getTargetEntity()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType getCascade()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType newCascadeType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable getJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable newJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey getMapKey()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey newMapKey()
meth public abstract void setCascade(org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType)
meth public abstract void setFetch(java.lang.String)
meth public abstract void setJoinTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable)
meth public abstract void setMapKey(org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey)
meth public abstract void setMappedBy(java.lang.String)
meth public abstract void setName(java.lang.String)
meth public abstract void setOrderBy(java.lang.String)
meth public abstract void setTargetEntity(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.ManyToOne
meth public abstract boolean isOptional()
meth public abstract int addJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int removeJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int sizeJoinColumn()
meth public abstract java.lang.String getFetch()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getTargetEntity()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType getCascade()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType newCascadeType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn getJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn newJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[] getJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable getJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable newJoinTable()
meth public abstract void setCascade(org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType)
meth public abstract void setFetch(java.lang.String)
meth public abstract void setJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract void setJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[])
meth public abstract void setJoinTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable)
meth public abstract void setName(java.lang.String)
meth public abstract void setOptional(boolean)
meth public abstract void setTargetEntity(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey
meth public abstract java.lang.String getName()
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.MappedSuperclass
fld public final static java.lang.String FIELD_ACCESS = "FIELD"
fld public final static java.lang.String PROPERTY_ACCESS = "PROPERTY"
meth public abstract boolean isMetadataComplete()
meth public abstract java.lang.String getAccess()
meth public abstract java.lang.String getClass2()
meth public abstract java.lang.String getDescription()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes getAttributes()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes newAttributes()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getExcludeDefaultListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getExcludeSuperclassListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType newEmptyType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners getEntityListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners newEntityListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass getIdClass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass newIdClass()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad getPostLoad()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad newPostLoad()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist getPostPersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist newPostPersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove getPostRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove newPostRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate getPostUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate newPostUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist getPrePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist newPrePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove getPreRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove newPreRemove()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate getPreUpdate()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate newPreUpdate()
meth public abstract void setAccess(java.lang.String)
meth public abstract void setAttributes(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Attributes)
meth public abstract void setClass2(java.lang.String)
meth public abstract void setDescription(java.lang.String)
meth public abstract void setEntityListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners)
meth public abstract void setExcludeDefaultListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setExcludeSuperclassListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setIdClass(org.netbeans.modules.j2ee.persistence.api.metadata.orm.IdClass)
meth public abstract void setMetadataComplete(boolean)
meth public abstract void setPostLoad(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad)
meth public abstract void setPostPersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist)
meth public abstract void setPostRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove)
meth public abstract void setPostUpdate(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate)
meth public abstract void setPrePersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist)
meth public abstract void setPreRemove(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove)
meth public abstract void setPreUpdate(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedNativeQuery
meth public abstract int addHint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint)
meth public abstract int removeHint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint)
meth public abstract int sizeHint()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getQuery()
meth public abstract java.lang.String getResultClass()
meth public abstract java.lang.String getResultSetMapping()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint getHint(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint newQueryHint()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint[] getHint()
meth public abstract void setHint(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint)
meth public abstract void setHint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint[])
meth public abstract void setName(java.lang.String)
meth public abstract void setQuery(java.lang.String)
meth public abstract void setResultClass(java.lang.String)
meth public abstract void setResultSetMapping(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.NamedQuery
meth public abstract int addHint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint)
meth public abstract int removeHint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint)
meth public abstract int sizeHint()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getQuery()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint getHint(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint newQueryHint()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint[] getHint()
meth public abstract void setHint(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint)
meth public abstract void setHint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint[])
meth public abstract void setName(java.lang.String)
meth public abstract void setQuery(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToMany
meth public abstract int addJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int removeJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int sizeJoinColumn()
meth public abstract java.lang.String getFetch()
meth public abstract java.lang.String getMappedBy()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getOrderBy()
meth public abstract java.lang.String getTargetEntity()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType getCascade()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType newCascadeType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn getJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn newJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[] getJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable getJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable newJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey getMapKey()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey newMapKey()
meth public abstract void setCascade(org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType)
meth public abstract void setFetch(java.lang.String)
meth public abstract void setJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract void setJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[])
meth public abstract void setJoinTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable)
meth public abstract void setMapKey(org.netbeans.modules.j2ee.persistence.api.metadata.orm.MapKey)
meth public abstract void setMappedBy(java.lang.String)
meth public abstract void setName(java.lang.String)
meth public abstract void setOrderBy(java.lang.String)
meth public abstract void setTargetEntity(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.OneToOne
meth public abstract boolean isOptional()
meth public abstract int addJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int addPrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract int removeJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract int removePrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract int sizeJoinColumn()
meth public abstract int sizePrimaryKeyJoinColumn()
meth public abstract java.lang.String getFetch()
meth public abstract java.lang.String getMappedBy()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getTargetEntity()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType getCascade()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType newCascadeType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn getJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn newJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[] getJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable getJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable newJoinTable()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn getPrimaryKeyJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn newPrimaryKeyJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn[] getPrimaryKeyJoinColumn()
meth public abstract void setCascade(org.netbeans.modules.j2ee.persistence.api.metadata.orm.CascadeType)
meth public abstract void setFetch(java.lang.String)
meth public abstract void setJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn)
meth public abstract void setJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinColumn[])
meth public abstract void setJoinTable(org.netbeans.modules.j2ee.persistence.api.metadata.orm.JoinTable)
meth public abstract void setMappedBy(java.lang.String)
meth public abstract void setName(java.lang.String)
meth public abstract void setOptional(boolean)
meth public abstract void setPrimaryKeyJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract void setPrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn[])
meth public abstract void setTargetEntity(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitDefaults
meth public abstract java.lang.String getAccess()
meth public abstract java.lang.String getCatalog()
meth public abstract java.lang.String getSchema()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getCascadePersist()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType newEmptyType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners getEntityListeners()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners newEntityListeners()
meth public abstract void setAccess(java.lang.String)
meth public abstract void setCascadePersist(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)
meth public abstract void setCatalog(java.lang.String)
meth public abstract void setEntityListeners(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityListeners)
meth public abstract void setSchema(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitMetadata
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType getXmlMappingMetadataComplete()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType newEmptyType()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitDefaults getPersistenceUnitDefaults()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitDefaults newPersistenceUnitDefaults()
meth public abstract void setPersistenceUnitDefaults(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PersistenceUnitDefaults)
meth public abstract void setXmlMappingMetadataComplete(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EmptyType)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostLoad
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostPersist
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostRemove
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PostUpdate
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrePersist
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreRemove
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PreUpdate
meth public abstract java.lang.String getMethodName()
meth public abstract void setMethodName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn
meth public abstract java.lang.String getColumnDefinition()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getReferencedColumnName()
meth public abstract void setColumnDefinition(java.lang.String)
meth public abstract void setName(java.lang.String)
meth public abstract void setReferencedColumnName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.QueryHint
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getValue()
meth public abstract void setName(java.lang.String)
meth public abstract void setValue(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.SecondaryTable
meth public abstract int addPrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract int addUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int removePrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract int removeUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int sizePrimaryKeyJoinColumn()
meth public abstract int sizeUniqueConstraint()
meth public abstract java.lang.String getCatalog()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getSchema()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn getPrimaryKeyJoinColumn(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn newPrimaryKeyJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn[] getPrimaryKeyJoinColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint getUniqueConstraint(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint newUniqueConstraint()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[] getUniqueConstraint()
meth public abstract void setCatalog(java.lang.String)
meth public abstract void setName(java.lang.String)
meth public abstract void setPrimaryKeyJoinColumn(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn)
meth public abstract void setPrimaryKeyJoinColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.PrimaryKeyJoinColumn[])
meth public abstract void setSchema(java.lang.String)
meth public abstract void setUniqueConstraint(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract void setUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.SequenceGenerator
meth public abstract int getAllocationSize()
meth public abstract int getInitialValue()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getSequenceName()
meth public abstract void setAllocationSize(int)
meth public abstract void setInitialValue(int)
meth public abstract void setName(java.lang.String)
meth public abstract void setSequenceName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.SqlResultSetMapping
meth public abstract int addColumnResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult)
meth public abstract int addEntityResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult)
meth public abstract int removeColumnResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult)
meth public abstract int removeEntityResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult)
meth public abstract int sizeColumnResult()
meth public abstract int sizeEntityResult()
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult getColumnResult(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult newColumnResult()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult[] getColumnResult()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult getEntityResult(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult newEntityResult()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult[] getEntityResult()
meth public abstract void setColumnResult(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult)
meth public abstract void setColumnResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.ColumnResult[])
meth public abstract void setEntityResult(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult)
meth public abstract void setEntityResult(org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityResult[])
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Table
meth public abstract int addUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int removeUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int sizeUniqueConstraint()
meth public abstract java.lang.String getCatalog()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getSchema()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint getUniqueConstraint(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint newUniqueConstraint()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[] getUniqueConstraint()
meth public abstract void setCatalog(java.lang.String)
meth public abstract void setName(java.lang.String)
meth public abstract void setSchema(java.lang.String)
meth public abstract void setUniqueConstraint(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract void setUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.TableGenerator
meth public abstract int addUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int getAllocationSize()
meth public abstract int getInitialValue()
meth public abstract int removeUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract int sizeUniqueConstraint()
meth public abstract java.lang.String getCatalog()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getPkColumnName()
meth public abstract java.lang.String getPkColumnValue()
meth public abstract java.lang.String getSchema()
meth public abstract java.lang.String getTable()
meth public abstract java.lang.String getValueColumnName()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint getUniqueConstraint(int)
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint newUniqueConstraint()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[] getUniqueConstraint()
meth public abstract void setAllocationSize(int)
meth public abstract void setCatalog(java.lang.String)
meth public abstract void setInitialValue(int)
meth public abstract void setName(java.lang.String)
meth public abstract void setPkColumnName(java.lang.String)
meth public abstract void setPkColumnValue(java.lang.String)
meth public abstract void setSchema(java.lang.String)
meth public abstract void setTable(java.lang.String)
meth public abstract void setUniqueConstraint(int,org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint)
meth public abstract void setUniqueConstraint(org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint[])
meth public abstract void setValueColumnName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Transient
meth public abstract java.lang.String getName()
meth public abstract void setName(java.lang.String)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.UniqueConstraint
meth public abstract int addColumnName(java.lang.String)
meth public abstract int removeColumnName(java.lang.String)
meth public abstract int sizeColumnName()
meth public abstract java.lang.String getColumnName(int)
meth public abstract java.lang.String[] getColumnName()
meth public abstract void setColumnName(int,java.lang.String)
meth public abstract void setColumnName(java.lang.String[])

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.api.metadata.orm.Version
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getTemporal()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column getColumn()
meth public abstract org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column newColumn()
meth public abstract void setColumn(org.netbeans.modules.j2ee.persistence.api.metadata.orm.Column)
meth public abstract void setName(java.lang.String)
meth public abstract void setTemporal(java.lang.String)

CLSS public final org.netbeans.modules.j2ee.persistence.spi.EntityClassScopeFactory
meth public static org.netbeans.modules.j2ee.persistence.api.EntityClassScope createEntityClassScope(org.netbeans.modules.j2ee.persistence.spi.EntityClassScopeImplementation)
supr java.lang.Object

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.EntityClassScopeImplementation
meth public abstract org.netbeans.modules.j2ee.metadata.model.api.MetadataModel<org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata> getEntityMappingsModel(boolean)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.EntityClassScopeProvider
meth public abstract org.netbeans.modules.j2ee.persistence.api.EntityClassScope findEntityClassScope(org.openide.filesystems.FileObject)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.PersistenceLocationProvider
meth public abstract org.openide.filesystems.FileObject createLocation() throws java.io.IOException
meth public abstract org.openide.filesystems.FileObject getLocation()
meth public org.openide.filesystems.FileObject createLocation(org.openide.filesystems.FileObject) throws java.io.IOException
meth public org.openide.filesystems.FileObject getLocation(org.openide.filesystems.FileObject)

CLSS public final org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeFactory
meth public static org.netbeans.modules.j2ee.persistence.api.PersistenceScope createPersistenceScope(org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeImplementation)
supr java.lang.Object

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeImplementation
meth public abstract org.netbeans.api.java.classpath.ClassPath getClassPath()
meth public abstract org.netbeans.modules.j2ee.metadata.model.api.MetadataModel<org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata> getEntityMappingsModel(java.lang.String)
meth public abstract org.openide.filesystems.FileObject getPersistenceXml()

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.PersistenceScopeProvider
meth public abstract org.netbeans.modules.j2ee.persistence.api.PersistenceScope findPersistenceScope(org.openide.filesystems.FileObject)

CLSS public final org.netbeans.modules.j2ee.persistence.spi.PersistenceScopesFactory
meth public static org.netbeans.modules.j2ee.persistence.api.PersistenceScopes createPersistenceScopes(org.netbeans.modules.j2ee.persistence.spi.PersistenceScopesImplementation)
supr java.lang.Object

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.PersistenceScopesImplementation
meth public abstract org.netbeans.modules.j2ee.persistence.api.PersistenceScope[] getPersistenceScopes()
meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)

CLSS public abstract interface org.netbeans.modules.j2ee.persistence.spi.PersistenceScopesProvider
meth public abstract org.netbeans.modules.j2ee.persistence.api.PersistenceScopes getPersistenceScopes()
meth public org.netbeans.modules.j2ee.persistence.api.PersistenceScopes getPersistenceScopes(org.openide.filesystems.FileObject)

CLSS public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper
innr public final static Builder
meth public org.netbeans.modules.j2ee.metadata.model.api.MetadataModel<org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata> getDefaultEntityMappingsModel(boolean)
meth public org.netbeans.modules.j2ee.metadata.model.api.MetadataModel<org.netbeans.modules.j2ee.persistence.api.metadata.orm.EntityMappingsMetadata> getEntityMappingsModel(java.lang.String)
meth public static org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper create(org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath)
meth public void changePersistenceXml(java.io.File)
supr java.lang.Object
hfds bootPath,compilePath,model,modelLock,moduleBootPath,moduleClassPath,moduleCompilePath,moduleSourcePath,persistenceXml,sourcePath

CLSS public final static org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder
 outer org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper
cons public init(org.netbeans.api.java.classpath.ClassPath)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder setClassPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder setModuleBootPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder setModuleClassPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder setModuleCompilePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder setModuleSourcePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.j2ee.persistence.spi.support.EntityMappingsMetadataModelHelper$Builder setSourcePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
supr java.lang.Object
hfds bootPath,classPath,moduleBootPath,moduleClassPath,moduleCompilePath,moduleSourcePath,sourcePath

CLSS public final org.netbeans.modules.j2ee.persistence.spi.support.PersistenceScopesHelper
cons public init()
meth public org.netbeans.modules.j2ee.persistence.api.PersistenceScopes getPersistenceScopes()
meth public void changePersistenceScope(org.netbeans.modules.j2ee.persistence.api.PersistenceScope,java.io.File)
supr java.lang.Object
hfds LOG,fileChangeListener,persistenceExists,persistenceScope,persistenceScopes,persistenceXml,propChangeSupport
hcls FileListener,PersistenceScopesImpl

