#Signature file v4.1
#Version 1.68.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
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="9")
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

