HSAdmin Backend Domains, E-Mail, Datenbanken
Peter Hormanns
2010-10-06 dda8fc11e77ae5b29f58f1b7d5e63509879203a7
Imports 
12 files modified
1 files added
560 ■■■■■ changed files
hsarback/src/de/hsadmin/cliClientConnector/CLIClientConnectorServlet.java 15 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/model/AbstractModuleImpl.java 9 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/model/EntitySessionHelper.java 4 ●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/model/GenericModuleImpl.java 25 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/model/LoginUser.java 25 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/core/util/DNSCheck.java 5 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/BaseComponent.java 26 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/BasePac.java 36 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/Component.java 24 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/Hive.java 154 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/INetAddress.java 114 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/Pac.java 93 ●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/mods/pac/PacComponent.java 30 ●●●●● patch | view | raw | blame | history
hsarback/src/de/hsadmin/cliClientConnector/CLIClientConnectorServlet.java
@@ -33,8 +33,10 @@
 * 
 */
public class CLIClientConnectorServlet extends HttpServlet {
    private static final long serialVersionUID = 7150004719303750077L;
    public static final String version = "1.0.9 (2010/Oct/05 18:34)";
    private Map<String, Class<?>> componentmap;
    private Map<String, String> componentDescriptions;
    private ArgumentParser parser;
@@ -432,8 +434,8 @@
     */
    public void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
        try {
            ModuleInterface module;
            ModuleInterface module = null;
            Transaction tx = null;
            // check login
            String auth = req.getHeader("authorization");
            if (auth == null) {
@@ -453,12 +455,11 @@
                // try to log in
                String login = a[0];
                ticket = a[1];
                module = null;
                try {
                    if (TicketAuthentication.getInstance().login(login, ticket)) {
                        // login successful
                        module = new GenericModuleImpl(new Transaction(login));
                        tx = new Transaction(login);
                        module = new GenericModuleImpl(tx);
                        // read arguments
                        BufferedReader read = req.getReader();
@@ -478,8 +479,8 @@
                } catch (Exception e) {
                    resp.addHeader("X-hsadmin-error", "exception: " + e.getMessage());
                } finally {
                    if (module != null && module.getTransaction() != null) {
                        module.getTransaction().close();
                    if (tx != null) {
                        tx.close();
                    }
                }
            }
hsarback/src/de/hsadmin/core/model/AbstractModuleImpl.java
@@ -336,15 +336,6 @@
        return stack.toString();
    }
    /**
     *  determines if the login user is a hostmaster.
     * @return
     */
    public boolean isHostmaster() {
        // TODO: dummy
        return false;
    }
    public static void setQueryParameter(Query query, String queryString,
            String argName, Object argValue) {
        int argLen = argName.length();
hsarback/src/de/hsadmin/core/model/EntitySessionHelper.java
@@ -13,7 +13,7 @@
     * @param entityClass
     * @return
     */
    public static AbstractModuleImpl createEntitySessionWrapper(Class<? extends AbstractEntity> entityClass) {
    public static AbstractModuleImpl createEntitySessionWrapper(Class<? extends AbstractEntity> entityClass, Transaction tx) {
        // get in instance
        AbstractModuleImpl impl = null;
        try {
@@ -27,11 +27,13 @@
            }
            // instantiate wrapper
            impl = (AbstractModuleImpl) wrapperClass.newInstance();
            impl.construct(tx);
        } catch (ClassNotFoundException exc) {
            log.info("entity class '"
                            + entityClass.getCanonicalName()
                            + "' has no session wrapper => using restrictive default access rights");
            impl = new SecureDefaultModuleImpl();
            impl.construct(tx);
        } catch (Exception exc) {
            throw new RuntimeException(exc);
        }
hsarback/src/de/hsadmin/core/model/GenericModuleImpl.java
@@ -23,8 +23,7 @@
    public AbstractEntity initialize(AbstractEntity newEntity) throws HSAdminException {
        log.trace("initialize(" + newEntity + ")");
        AbstractModuleImpl wrapper = 
            EntitySessionHelper.createEntitySessionWrapper(newEntity.getClass());
        wrapper.construct(tx);
            EntitySessionHelper.createEntitySessionWrapper(newEntity.getClass(), tx);
        return wrapper.initialize(newEntity);
    }
@@ -34,34 +33,28 @@
            throw new HSAdminException("cannot add an already persistent entity");
        log.trace("add(" + newEntity + ")");
        AbstractModuleImpl wrapper = 
            EntitySessionHelper.createEntitySessionWrapper(newEntity.getClass());
        wrapper.construct(tx);
        AbstractEntity result = null;
        result = wrapper.add(newEntity);
        return result;
            EntitySessionHelper.createEntitySessionWrapper(newEntity.getClass(), tx);
        return wrapper.add(newEntity);
    }
    @Override
    public AbstractEntity find(Class<? extends AbstractEntity> entityClass, Object key) throws HSAdminException {
        log.trace("find(" + entityClass + ", " + key + ")");
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(entityClass);
        wrapper.construct(tx);
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(entityClass, tx);
        return wrapper.find(entityClass, key);
    }
    @Override
    public AbstractEntity findByString(Class<? extends AbstractEntity> entityClass, String key) throws HSAdminException {
        log.trace("find(" + entityClass + ", " + key + ")");
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(entityClass);
        wrapper.construct(tx);
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(entityClass, tx);
        return wrapper.findByString(entityClass, key);
    }
    @Override
    public List<AbstractEntity> search(Class<? extends AbstractEntity> entityClass, String condition, String orderBy) throws HSAdminException {
        log.trace("search(" + entityClass + ", " + condition + ")");
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(entityClass);
        wrapper.construct(tx);
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(entityClass, tx);
        return wrapper.search(entityClass, condition, orderBy);
    }
@@ -70,8 +63,7 @@
        if (existingEntity.isNew())
            return add(existingEntity);
        log.debug("update(" + existingEntity + ")");
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(existingEntity.getClass());
        wrapper.construct(tx);
        AbstractModuleImpl wrapper = EntitySessionHelper.createEntitySessionWrapper(existingEntity.getClass(), tx);
        return wrapper.update(existingEntity);
    }
@@ -79,8 +71,7 @@
    public void delete(AbstractEntity existingEntity) throws HSAdminException {
        log.trace("delete(" + existingEntity + ")");
        AbstractModuleImpl wrapper = 
            EntitySessionHelper.createEntitySessionWrapper(existingEntity.getClass());
        wrapper.construct(tx);
            EntitySessionHelper.createEntitySessionWrapper(existingEntity.getClass(), tx);
        wrapper.delete(existingEntity);
    }
hsarback/src/de/hsadmin/core/model/LoginUser.java
New file
@@ -0,0 +1,25 @@
package de.hsadmin.core.model;
/**
 * Transiente User-Klasse. Entkoppelt das core-Paket vom UnixUser-Modul.
 * @author Peter Hormanns
 */
public class LoginUser {
    // TODO UnixUser Referenzen im Core-Paket ersetzen
    private String login;
    public LoginUser(String loginName) {
        login = loginName;
    }
    public String getLogin() {
        return login;
    }
    public boolean hasHostmasterRole() {
        // TODO Auto-generated method stub
        return false;
    }
}
hsarback/src/de/hsadmin/core/util/DNSCheck.java
@@ -12,15 +12,14 @@
    private String dnsServer;
    
    public DNSCheck(String dnsServer) {
    public DNSCheck(String dnsServer) throws HSAdminException {
        this.dnsServer = dnsServer;
        InetAddress dnsInetAddress;
        try {
            dnsInetAddress = InetAddress.getByName(dnsServer);
            DNSService.SetDNSAddress(dnsInetAddress);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new HSAdminException(e);
        }
    }
    
hsarback/src/de/hsadmin/mods/pac/BaseComponent.java
@@ -4,32 +4,38 @@
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import de.hsadmin.mods.user.UnixUser;
@javax.persistence.Entity(name = "BaseComponents")
@javax.persistence.Table(name = " basecomponent")
@javax.persistence.SequenceGenerator(name = "BaseComponentsSeqGen", sequenceName = "basecomponent_basecomponent_seq")
@Entity(name = "BaseComponents")
@Table(name = " basecomponent")
@SequenceGenerator(name = "BaseComponentsSeqGen", sequenceName = "basecomponent_basecomponent_seq")
public class BaseComponent extends de.hsadmin.core.model.AbstractEntity implements Serializable {
    
    private static final long serialVersionUID = -8161827018235142603L;
    @javax.persistence.Id
    @javax.persistence.GeneratedValue(strategy = SEQUENCE, generator = "BaseComponentsSeqGen")
    @javax.persistence.Column(name = "basecomponent_id", columnDefinition = "integer")
    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "BaseComponentsSeqGen")
    @Column(name = "basecomponent_id", columnDefinition = "integer")
    private long id;
    @javax.persistence.Column(name = "basecomponent_code", columnDefinition = "character varying(10)")
    @Column(name = "basecomponent_code", columnDefinition = "character varying(10)")
    private String feature;
    @javax.persistence.Column(name = "description", columnDefinition = "character varying(100)")
    @Column(name = "description", columnDefinition = "character varying(100)")
    private String description;
    @javax.persistence.Column(name = "sorting", columnDefinition = "integer")
    @Column(name = "sorting", columnDefinition = "integer")
    private int sorting;
    @javax.persistence.Column(name = "valid", columnDefinition = "boolean")
    @Column(name = "valid", columnDefinition = "boolean")
    private boolean valid;
    public BaseComponent() {
hsarback/src/de/hsadmin/mods/pac/BasePac.java
@@ -8,9 +8,19 @@
import java.util.HashSet;
import java.util.Set;
@javax.persistence.Entity(name = "BasePacs")
@javax.persistence.Table(name = "basepacket")
@javax.persistence.SequenceGenerator(name = "BasePacsSeqGen", sequenceName = "basepacket_basepacket_id_seq")
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity(name = "BasePacs")
@Table(name = "basepacket")
@SequenceGenerator(name = "BasePacsSeqGen", sequenceName = "basepacket_basepacket_id_seq")
public class BasePac implements Serializable {
    
    private static final long serialVersionUID = 1491121619195513435L;
@@ -25,28 +35,28 @@
        this.valid = true;
    }
    @javax.persistence.Id
    @javax.persistence.GeneratedValue(strategy = SEQUENCE, generator = "BasePacsSeqGen")
    @javax.persistence.Column(name = "basepacket_id", columnDefinition = "integer")
    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "BasePacsSeqGen")
    @Column(name = "basepacket_id", columnDefinition = "integer")
    private long id;
    @javax.persistence.Column(name = "basepacket_code", columnDefinition = "character varying(10)")
    @Column(name = "basepacket_code", columnDefinition = "character varying(10)")
    private String name;
    @javax.persistence.Column(name = "description", columnDefinition = "character varying(100)")
    @Column(name = "description", columnDefinition = "character varying(100)")
    private String description;
    @javax.persistence.Column(name = "sorting", columnDefinition = "integer")
    @Column(name = "sorting", columnDefinition = "integer")
    private int sorting;
    @javax.persistence.Column(name = "valid", columnDefinition = "boolean")
    @Column(name = "valid", columnDefinition = "boolean")
    private boolean valid;
    @javax.persistence.OneToMany(fetch = LAZY, cascade = ALL)
    @OneToMany(fetch = LAZY, cascade = ALL)
    private Set<Component> components;
    @javax.persistence.OneToMany(fetch = LAZY, cascade = ALL)
    @javax.persistence.JoinTable(name = "packet_component", joinColumns = @javax.persistence.JoinColumn(name = "packet_id"), inverseJoinColumns = @javax.persistence.JoinColumn(name = "basepacket_id"))
    @OneToMany(fetch = LAZY, cascade = ALL)
    @JoinTable(name = "packet_component", joinColumns = @JoinColumn(name = "packet_id"), inverseJoinColumns = @JoinColumn(name = "basepacket_id"))
    private Set<Pac> pacs;
    public long getId() {
hsarback/src/de/hsadmin/mods/pac/Component.java
@@ -2,37 +2,41 @@
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
@javax.persistence.Entity(name = "Components")
@javax.persistence.Table(name = "component")
@Entity(name = "Components")
@Table(name = "component")
@IdClass(ComponentId.class)
public class Component implements Serializable {
    
    private static final long serialVersionUID = 970709621200712794L;
    @javax.persistence.Id
    @Id
    private BasePac basePac;
    
    @javax.persistence.Id
    @Id
    private BaseComponent baseComponent;
    
    @javax.persistence.Column(name = "min_quantity", columnDefinition = "integer")
    @Column(name = "min_quantity", columnDefinition = "integer")
    private int minimumQuantity;
    @javax.persistence.Column(name = "max_quantity", columnDefinition = "integer")
    @Column(name = "max_quantity", columnDefinition = "integer")
    private int maximimumQuantity;
    @javax.persistence.Column(name = "default_quantity", columnDefinition = "integer")
    @Column(name = "default_quantity", columnDefinition = "integer")
    private int defaultQuantity;
    @javax.persistence.Column(name = "increment_quantity", columnDefinition = "integer")
    @Column(name = "increment_quantity", columnDefinition = "integer")
    private int incrementQuantity;
    @javax.persistence.Column(name = "include_quantity", columnDefinition = "integer")
    @Column(name = "include_quantity", columnDefinition = "integer")
    private int includedQuantity;
    @javax.persistence.Column(name = "admin_only", columnDefinition = "boolean")
    @Column(name = "admin_only", columnDefinition = "boolean")
    private boolean adminOnly;
    public Component() {
hsarback/src/de/hsadmin/mods/pac/Hive.java
@@ -5,105 +5,129 @@
import static javax.persistence.FetchType.LAZY;
import static javax.persistence.GenerationType.SEQUENCE;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.mods.user.UnixUser;
@javax.persistence.Entity(name="Hives")
@javax.persistence.Table(name="hive")
@javax.persistence.SequenceGenerator(name="HivesSeqGen", sequenceName="hive_hive_id_seq")
public class Hive
    extends de.hsadmin.core.model.AbstractEntity
    implements java.io.Serializable
{
@Entity(name = "Hives")
@Table(name = "hive")
@SequenceGenerator(name = "HivesSeqGen", sequenceName = "hive_hive_id_seq")
public class Hive extends AbstractEntity implements Serializable {
    private static final long serialVersionUID = -2270234313165009590L;
    /// bean ctor
    public Hive()
    {
    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "HivesSeqGen")
    @Column(name = "hive_id")
    private long id;
    @Column(name = "hive_name", columnDefinition = "character varying(3)", unique = true)
    private String name;
    @JoinColumn(name = "inet_addr_id")
    @ManyToOne(fetch = EAGER)
    private INetAddress inetAddr;
    @Column(name = "description", columnDefinition = "character varying(100)")
    private String description;
    @OneToMany(fetch = LAZY, cascade = ALL, mappedBy = "hive")
    @OrderBy("name")
    private Set<Pac> pacs;
    public Hive() {
    }
    public Hive( String name, INetAddress inetAddr )
    {
    public Hive(String name, INetAddress inetAddr) {
        this.name = name;
        this.inetAddr = inetAddr;
    }
    public Hive( String name, INetAddress inetAddr, String desc )
    {
    public Hive(String name, INetAddress inetAddr, String desc) {
        this(name, inetAddr);
        this.description = desc;
    }
    /// {@inheritDoc}
    public static String createQueryFromStringKey(String humanKey)
    {
    public static String createQueryFromStringKey(String humanKey) {
        return "hiveName='" + humanKey + "'";
    }
    /// {@inheritDoc}
    @Override
    public String createStringKey()
    {
    public String createStringKey() {
        return getHiveName();
    }
    /// {@inheritDoc}
    @Override
    public long id()
    {
        return id;
    public long id() {
        return id;
    }
    // attribute id
    @javax.persistence.Id
    @javax.persistence.GeneratedValue(strategy=SEQUENCE, generator="HivesSeqGen")
    @javax.persistence.Column(name="hive_id")
    private long id;
    public long getId() { return id; }
    public void setId( long id ) { this.id = id; }
    public long getId() {
        return id;
    }
    // attribute hiveName
    @javax.persistence.Column(name="hive_name", columnDefinition="character varying(3)", unique=true)
    private String name;
    public String getName() { return name; }
    @Override
    public String getHiveName() { return name; }
    public void setName( String hiveName ) { this.name = hiveName; }
    public void setId(long id) {
        this.id = id;
    }
    // attribute inetAddr
    @javax.persistence.JoinColumn(name="inet_addr_id")
    @javax.persistence.ManyToOne(fetch=EAGER)
    private INetAddress inetAddr;
    public INetAddress getInetAddr() { return inetAddr; }
    public void setInetAddr( INetAddress inetAddr ) { this.inetAddr = inetAddr; }
    public String getName() {
        return name;
    }
    // attribute description
    @javax.persistence.Column(name="description", columnDefinition="character varying(100)")
    private String description;
    public String getDescription() { return description; }
    public void setDescription( String description ) { this.description = description; }
    // virtual attribute pacs
    @javax.persistence.OneToMany(fetch=LAZY, cascade=ALL, mappedBy="hive")
    @javax.persistence.OrderBy("name")
    private Set<Pac> pacs;
    public Set<Pac> getPacs() { return pacs; }
    public void setPacs( Set<Pac> pacs) { this.pacs = pacs; }
    /// {$inheritDoc}
    @Override
    public boolean isNew()
    {
    public String getHiveName() {
        return name;
    }
    public void setName(String hiveName) {
        this.name = hiveName;
    }
    public INetAddress getInetAddr() {
        return inetAddr;
    }
    public void setInetAddr(INetAddress inetAddr) {
        this.inetAddr = inetAddr;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public Set<Pac> getPacs() {
        return pacs;
    }
    public void setPacs(Set<Pac> pacs) {
        this.pacs = pacs;
    }
    @Override
    public boolean isNew() {
        return id == 0;
    }
    /// {@inheritDoc}
    @Override
    public UnixUser owningUser( EntityManager em )
    {
    public UnixUser owningUser(EntityManager em) {
        return null; // TODO: kinda somebody like root needed
    }
}
hsarback/src/de/hsadmin/mods/pac/INetAddress.java
@@ -2,86 +2,94 @@
import static javax.persistence.GenerationType.SEQUENCE;
import javax.persistence.EntityManager;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.mods.user.UnixUser;
@javax.persistence.Entity(name="INetAddresses")
@javax.persistence.Table(name="inet_addr")
@javax.persistence.SequenceGenerator(name="INetAddressesSeqGen", sequenceName="inet_addr_inet_addr_id_seq")
public class INetAddress
    extends de.hsadmin.core.model.AbstractEntity
    implements java.io.Serializable
{
    private static final long serialVersionUID = -5792279453911426607L;
@Entity(name = "INetAddresses")
@Table(name = "inet_addr")
@SequenceGenerator(name = "INetAddressesSeqGen", sequenceName = "inet_addr_inet_addr_id_seq")
public class INetAddress extends AbstractEntity implements Serializable {
    
    /// bean ctor
    public INetAddress()
    {
    private static final long serialVersionUID = -5792279453911426607L;
    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "INetAddressesSeqGen")
    @Column(name = "inet_addr_id")
    private long id;
    @Column(name = "inet_addr", columnDefinition = "inet", unique = true)
    private String inetAddr;
    @Column(name = "description", columnDefinition = "character varying(100)")
    private String description;
    public INetAddress() {
    }
    public INetAddress( String inetAddr )
    {
    public INetAddress(String inetAddr) {
        this.inetAddr = inetAddr;
    }
    public INetAddress( String inetAddr, String desc )
    {
        this(inetAddr);
        description = desc;
    public INetAddress(String inetAddr, String desc) {
        this(inetAddr);
        description = desc;
    }
    /// {@inheritDoc}
    public static String createQueryFromStringKey(String humanKey)
    {
    public static String createQueryFromStringKey(String humanKey) {
        return "inetAddr='" + humanKey + "'";
    }
    /// {@inheritDoc}
    @Override
    public String createStringKey()
    {
    public String createStringKey() {
        return getInetAddr();
    }
    /// {@inheritDoc}
    @Override
    public long id()
    {
        return id;
    public long id() {
        return id;
    }
    // attribute id
    @javax.persistence.Id
    @javax.persistence.GeneratedValue(strategy=SEQUENCE, generator="INetAddressesSeqGen")
    @javax.persistence.Column(name="inet_addr_id")
    private long id;
    public long getId() { return id; }
    public void setId( long id ) { this.id = id; }
    public long getId() {
        return id;
    }
    // attribute inetAddr
    @javax.persistence.Column(name="inet_addr", columnDefinition="inet", unique=true)
    private String inetAddr;
    public String getInetAddr() { return inetAddr; }
    public void setInetAddr( String inetAddr ) { this.inetAddr = inetAddr; }
    public void setId(long id) {
        this.id = id;
    }
    // attribute description
    @javax.persistence.Column(name="description", columnDefinition="character varying(100)")
    private String description;
    public String getDescription() { return description; }
    public void setDescription( String description ) { this.description = description; }
    public String getInetAddr() {
        return inetAddr;
    }
    /// {$inheritDoc}
    public void setInetAddr(String inetAddr) {
        this.inetAddr = inetAddr;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @Override
    public boolean isNew()
    {
    public boolean isNew() {
        return id == 0;
    }
    /// {@inheritDoc}
    @Override
    public UnixUser owningUser( EntityManager em )
    {
    public UnixUser owningUser(EntityManager em) {
        return null; // TODO: kinda somebody like root needed
    }
}
hsarback/src/de/hsadmin/mods/pac/Pac.java
@@ -8,61 +8,75 @@
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import de.hsadmin.core.model.AbstractEntity;
import de.hsadmin.core.model.EntityInfo;
import de.hsadmin.mods.cust.Customer;
import de.hsadmin.mods.user.UnixUser;
@javax.persistence.Entity(name = "Pacs")
@javax.persistence.Table(name = "packet")
@javax.persistence.SequenceGenerator(name = "PacsSeqGen", sequenceName = "packet_packet_id_seq")
@de.hsadmin.core.model.EntityInfo(name = "Paket")
public class Pac extends de.hsadmin.core.model.AbstractEntity implements Serializable {
@Entity(name = "Pacs")
@Table(name = "packet")
@SequenceGenerator(name = "PacsSeqGen", sequenceName = "packet_packet_id_seq")
@EntityInfo(name = "Paket")
public class Pac extends AbstractEntity implements Serializable {
    
    private static final long serialVersionUID = 1201899873300190132L;
    @javax.persistence.Id
    @javax.persistence.GeneratedValue(strategy = SEQUENCE, generator = "PacsSeqGen")
    @javax.persistence.Column(name = "packet_id")
    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "PacsSeqGen")
    @Column(name = "packet_id")
    private long id;
    @javax.persistence.Column(name = "packet_name", unique = true)
    @Column(name = "packet_name", unique = true)
    private String name;
    @javax.persistence.JoinColumn(name = "bp_id")
    @javax.persistence.ManyToOne(fetch = EAGER)
    @JoinColumn(name = "bp_id")
    @ManyToOne(fetch = EAGER)
    private Customer customer;
    @javax.persistence.JoinColumn(name = "hive_id")
    @javax.persistence.ManyToOne(fetch = EAGER)
    @JoinColumn(name = "hive_id")
    @ManyToOne(fetch = EAGER)
    private Hive hive;
    @javax.persistence.Column(name = "created")
    @javax.persistence.Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "created")
    @Temporal(TemporalType.DATE)
    private Date created;
    @javax.persistence.Column(name = "cancelled", nullable = true)
    @javax.persistence.Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "cancelled", nullable = true)
    @Temporal(TemporalType.DATE)
    private Date cancelled;
    @javax.persistence.Column(name = "order_number", nullable = true)
    @Column(name = "order_number", nullable = true)
    private String orderNo;
    @javax.persistence.Column(name = "webserver_group", nullable = true)
    @Column(name = "webserver_group", nullable = true)
    private String webserverGroup;
    @javax.persistence.JoinColumn(name = "cur_inet_addr_id", nullable = true)
    @javax.persistence.ManyToOne(fetch = EAGER)
    @JoinColumn(name = "cur_inet_addr_id", nullable = true)
    @ManyToOne(fetch = EAGER)
    private INetAddress curINetAddr;
    @javax.persistence.JoinColumn(name = "old_inet_addr_id", nullable = true)
    @javax.persistence.ManyToOne(fetch = EAGER)
    @JoinColumn(name = "old_inet_addr_id", nullable = true)
    @ManyToOne(fetch = EAGER)
    private INetAddress oldINetAddr;
    @javax.persistence.OneToMany(fetch = LAZY, cascade = ALL)
    @OneToMany(fetch = LAZY, cascade = ALL)
    private java.util.Set<PacComponent> pacComponents;
    @javax.persistence.OneToMany(fetch = LAZY, cascade = ALL, mappedBy = "pac")
    @OneToMany(fetch = LAZY, cascade = ALL, mappedBy = "pac")
    private java.util.Set<UnixUser> unixUser;
    public Pac() {
@@ -89,18 +103,15 @@
        }
    }
    // / {@inheritDoc}
    public static String createQueryFromStringKey(String humanKey) {
        return "obj.name='" + humanKey + "'";
    }
    // / {@inheritDoc}
    @Override
    public String createStringKey() {
        return getName();
    }
    // / {@inheritDoc}
    @Override
    public long id() {
        return id;
@@ -191,14 +202,14 @@
     * This does not work, JPA/Hibernate always wants to create an invalid row
     * in packet_component
     * 
     * @javax.persistence.ManyToOne(fetch=EAGER, optional=true) // optional
     * @ManyToOne(fetch=EAGER, optional=true) // optional
     * should be default anyway
     * 
     * @javax.persistence.JoinTable( name="packet_component",
     * joinColumns=@javax.persistence.JoinColumn(name="packet_id"),
     * inverseJoinColumns=@javax.persistence.JoinColumn(name="basepacket_id") )
     * @JoinTable( name="packet_component",
     * joinColumns=@JoinColumn(name="packet_id"),
     * inverseJoinColumns=@JoinColumn(name="basepacket_id") )
     */
    @javax.persistence.Transient
    @Transient
    public BasePac getBasePac() {
        return getPacComponents().iterator().next().getBasePac();
    }
@@ -230,18 +241,15 @@
        this.unixUser = unixUser;
    }
    // generic
    public String toString() {
        return super.toString() + "{ name=" + name + " }";
    }
    // / {$inheritDoc}
    @Override
    public boolean isNew() {
        return id == 0;
    }
    // / {$inheritDoc}
    @Override
    public String getHiveName() {
        if (isNew())
@@ -250,7 +258,6 @@
            return getHive().getHiveName();
    }
    // / {@inheritDoc}
    @Override
    public UnixUser owningUser(EntityManager em) {
        return customer.owningUser(em);
@@ -261,20 +268,16 @@
        return null;
    }
    // / determines whether the given user has full read access on all merged
    // fields of this entity
    public boolean isReadAllowedFor(UnixUser loginUser) {
        return getName().equals(loginUser.getName())
                || super.isReadAllowedFor(loginUser);
    }
    // / query restriction for access control
    public static String restriction() {
        return
        // all pacs of customer
        "obj.customer.name=:loginUserName OR " +
        // pac of packet admin
                "obj.name=:loginUserName";
            // all pacs of customer
            "obj.customer.name=:loginUserName OR " +
            // pac of packet admin
            "obj.name=:loginUserName";
    }
}
hsarback/src/de/hsadmin/mods/pac/PacComponent.java
@@ -5,34 +5,42 @@
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@javax.persistence.Entity(name = "PacComponents")
@javax.persistence.Table(name = "packet_component")
@Entity(name = "PacComponents")
@Table(name = "packet_component")
@IdClass(PacComponentId.class)
public class PacComponent implements Serializable {
    
    private static final long serialVersionUID = 5359873462163274873L;
    @javax.persistence.Id
    @Id
    private Pac pac;
    
    @javax.persistence.Id
    @Id
    private BaseComponent baseComponent;
    @javax.persistence.JoinColumn(name = "basepacket_id", columnDefinition = "integer", nullable = false)
    @javax.persistence.ManyToOne(fetch = EAGER)
    @JoinColumn(name = "basepacket_id", columnDefinition = "integer", nullable = false)
    @ManyToOne(fetch = EAGER)
    private BasePac basePac;
    @javax.persistence.Column(name = "quantity", columnDefinition = "integer")
    @Column(name = "quantity", columnDefinition = "integer")
    private int quantity;
    @javax.persistence.Column(name = "created", columnDefinition = "date", nullable = true)
    @javax.persistence.Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "created", columnDefinition = "date", nullable = true)
    @Temporal(TemporalType.DATE)
    private Date created;
    @javax.persistence.Column(name = "cancelled", columnDefinition = "date", nullable = true)
    @javax.persistence.Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "cancelled", columnDefinition = "date", nullable = true)
    @Temporal(TemporalType.DATE)
    private Date cancelled;
    public PacComponent() {