/*
* Copyright 2005 Werner Guttmann
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.castor.jdo.jpa.natures;
import org.castor.core.nature.BaseNature;
import org.castor.core.nature.PropertyHolder;
import java.util.Map;
import java.util.Properties;
import javax.persistence.InheritanceType;
/**
* A {@link BaseNature} extension that gives access to information derived from
* class bound JPA annotations.
*
* @see PropertyHolder
* @author Peter Schmidt
* @since 1.3
*/
public class JPAClassNature extends BaseNature {
/**
* Property Key for {@link javax.persistence.Entity#name()}.
*/
private static final String ENTITY_NAME = "ENTITY_NAME";
/**
* Property Key for {@link javax.persistence.Table#name()}.
*/
private static final String TABLE_NAME = "TABLE_NAME";
/**
* Property Key for {@link javax.persistence.Table#catalog()}.
*/
private static final String TABLE_CATALOG = "TABLE_CATALOG";
/**
* Property Key for {@link javax.persistence.Table#schema()}.
*/
private static final String TABLE_SCHEMA = "TABLE_SCHEMA";
/**
* Property Key for {@link javax.persistence.Inheritance#strategy()}.
*/
public static final String INHERITANCE_STRATEGY = "INHERITANCE_STRATEGY";
/**
* Nature property name for abstract.
*/
public static final String MAPPED_SUPERCLASS = "MAPPED_SUPERCLASS";
/**
* Property Key for {@link javax.persistence.NamedQuery}.
*/
public static final String NAMED_QUERY = "NAMED_QUERY";
/**
* Property Key for {@link javax.persistence.NamedNativeQuery}.
*/
public static final String NAMED_NATIVE_QUERY = "NAMED_NATIVE_QUERY";
/**
* Property Key for {@link org.castor.jdo.jpa.annotations.Cache}.
*/
public static final String CACHE_PROPERTIES = "CACHE_PROPERTIES";
/**
* Instantiate a {@link JPAClassNature} to access the given
* {@link PropertyHolder}.
*
* @param holder
* The underlying {@link PropertyHolder} (obviously a
* {@link org.castor.jdo.jpa.info.ClassInfo ClassInfo}).
*
* @see PropertyHolder
*
*/
public JPAClassNature(final PropertyHolder holder) {
super(holder);
}
/**
* {@inheritDoc}
*
* @see org.castor.core.nature.Nature#getId()
*/
public String getId() {
return getClass().getName();
}
/**
* @see #ENTITY_NAME
* @param entityname
* The value of {@link javax.persistence.Entity#name()}.
*/
public void setEntityName(final String entityname) {
super.setProperty (ENTITY_NAME, entityname);
}
/**
* @see #ENTITY_NAME
* @return The value of {@link javax.persistence.Entity#name()}.
*/
public String getEntityName() {
return (String) getProperty (ENTITY_NAME);
}
/**
* @see #TABLE_NAME
* @param tablename
* The value of {@link javax.persistence.Table#name()}
*/
public void setTableName(final String tablename) {
super.setProperty (TABLE_NAME, tablename);
}
/**
* @see #TABLE_NAME
* @return The value of {@link javax.persistence.Table#name()}
*/
public String getTableName() {
return (String) super.getProperty (TABLE_NAME);
}
/**
* @see #TABLE_CATALOG
* @param catalog
* The value of {@link javax.persistence.Table#catalog()}
*/
public void setTableCatalog(final String catalog) {
super.setProperty (TABLE_CATALOG, catalog);
}
/**
* @see #TABLE_CATALOG
* @return The value of {@link javax.persistence.Table#catalog()}
*/
public String getTableCatalog() {
return (String) super.getProperty (TABLE_CATALOG);
}
/**
* @see #TABLE_SCHEMA
* @param schema
* The value of {@link javax.persistence.Table#schema()}
*/
public void setTableSchema(final String schema) {
super.setProperty (TABLE_SCHEMA, schema);
}
/**
* @see #TABLE_SCHEMA
* @return The value of{@link javax.persistence.Table#schema()}
*/
public String getTableSchema() {
return (String) super.getProperty (TABLE_SCHEMA);
}
/**
* @see #INHERITANCE_STRATEGY
* @param strategy
* The value of {@link javax.persistence.Inheritance#strategy()}
*/
public void setInheritanceStrategy(final InheritanceType strategy) {
super.setProperty (INHERITANCE_STRATEGY, strategy);
}
/**
* @see #INHERITANCE_STRATEGY
* @return The value of{@link javax.persistence.Inheritance#strategy()}
*/
public InheritanceType getInheritanceStrategy() {
return (InheritanceType) super.getProperty (INHERITANCE_STRATEGY);
}
/**
* @return The value of{@link javax.persistence.NamedQuery}
* @see #NAMED_QUERY
*/
@SuppressWarnings("unchecked")
public Map<String, String> getNamedQuery() {
return super.getPropertyAsMap (NAMED_QUERY);
}
/**
* Set class to have a mapped super class.
*
* @param abstract Boolean True if the given class has a mapped super class.
*/
public void setMappedSuperclass(final Boolean hasMappedSuperclass) {
setProperty(MAPPED_SUPERCLASS, hasMappedSuperclass);
}
/**
* Returns if class has a mapped super class.
*
* @return true if class has a mapped super class.
*/
public boolean hasMappedSuperclass() {
return getBooleanPropertyDefaultFalse(MAPPED_SUPERCLASS);
}
/**
* @param namedQuery The value of {@link javax.persistence.NamedQuery}
* @see #NAMED_QUERY
*/
public void setNamedQuery(final Map<String, String> namedQuery) {
super.setProperty (NAMED_QUERY, namedQuery);
}
/**
* @return The value of{@link javax.persistence.NamedNativeQuery}
* @see #NAMED_NATIVE_QUERY
*/
@SuppressWarnings("unchecked")
public Map<String, String> getNamedNativeQuery() {
return super.getPropertyAsMap(NAMED_NATIVE_QUERY);
}
/**
* @param namedNativeQueryMap The value of {@link javax.persistence.NamedNativeQuery}
* @see #NAMED_NATIVE_QUERY
*/
public void setNamedNativeQuery(final Map<String, String> namedNativeQueryMap) {
super.setProperty(NAMED_NATIVE_QUERY, namedNativeQueryMap);
}
/**
* @see #CACHE_PROPERTIES
* @param schema
* The value of {@link org.castor.jdo.jpa.annotations.Cache}
*/
public void setCacheProperties(final Properties cacheProperties) {
super.setProperty (CACHE_PROPERTIES, cacheProperties);
}
/**
* @see #CACHE_PROPERTIES
* @return The value of {@link org.castor.jdo.jpa.annotations.Cache}
*/
public Properties getCacheProperties() {
return (Properties) super.getProperty (CACHE_PROPERTIES);
}
}