/*
Copyright 2011 Jose Maria Arranz Santamaria
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 example.dao;
import example.model.Company;
import example.model.Contact;
import java.sql.ResultSet;
import java.util.List;
import jepl.JEPLDAO;
import jepl.JEPLDataSource;
import jepl.JEPLResultSet;
import jepl.JEPLResultSetDAOListener;
import jepl.JEPLTask;
public class CompanyDAO
{
protected ContactDAO contactDAO;
protected JEPLDAO<Company> dao;
protected JEPLResultSetDAOListener<Company> rsDAOListener;
public CompanyDAO(JEPLDataSource ds)
{
this.dao = ds.createJEPLDAO(Company.class);
this.rsDAOListener = new JEPLResultSetDAOListener<Company>()
{
@Override
public void setupJEPLResultSet(JEPLResultSet jrs,JEPLTask<?> task) throws Exception
{
}
@Override
public Company createObject(JEPLResultSet jrs) throws Exception
{
return new Company();
}
@Override
public void fillObject(Company obj,JEPLResultSet jrs) throws Exception
{
contactDAO.getJEPLResultSetDAOListener().fillObject(obj, jrs);
ResultSet rs = jrs.getResultSet();
obj.setAddress(rs.getString("ADDRESS"));
}
};
dao.addJEPLListener(rsDAOListener);
this.contactDAO = new ContactDAO(ds);
}
public JEPLDAO<Company> getJEPLDAO()
{
return dao;
}
public JEPLResultSetDAOListener<Company> getJEPLResultSetDAOListener()
{
return rsDAOListener;
}
public void insert(Company obj)
{
contactDAO.insert(obj);
dao.createJEPLDALQuery("INSERT INTO COMPANY (ID, ADDRESS) VALUES (?, ?)")
.addParameters( obj.getId(),obj.getAddress())
.setStrictMinRows(1).setStrictMaxRows(1)
.executeUpdate();
}
public void update(Company obj)
{
contactDAO.update(obj);
dao.createJEPLDALQuery("UPDATE COMPANY SET ADDRESS = ? WHERE ID = ?")
.addParameters(obj.getAddress(),obj.getId())
.setStrictMinRows(1).setStrictMaxRows(1)
.executeUpdate();
}
public boolean deleteByIdCascade(int id)
{
// Only use when ON DELETE CASCADE is defined in foreign keys
return contactDAO.deleteById(id);
}
public boolean deleteByIdNotCascade1(int id)
{
boolean res = dao.createJEPLDALQuery("DELETE FROM COMPANY WHERE ID = ?")
.setStrictMinRows(0).setStrictMaxRows(1)
.addParameter(id)
.executeUpdate() > 0;
if (res) contactDAO.deleteById(id);
return res;
}
public boolean deleteByIdNotCascade2(int id)
{
// Only MySQL
return dao.createJEPLDALQuery("DELETE C,CP FROM CONTACT C " +
"LEFT JOIN PERSON CP ON C.ID = CP.ID " +
"WHERE CP.ID = ?")
.setStrictMinRows(0).setStrictMaxRows(1)
.addParameter(id)
.executeUpdate() > 0;
}
public boolean delete(Company company)
{
return deleteByIdCascade(company.getId());
}
public int deleteAll()
{
return deleteAllCascade();
}
public int deleteAllCascade()
{
// Only use when ON DELETE CASCADE is defined in foreign key
return dao.createJEPLDALQuery("DELETE FROM CONTACT WHERE CONTACT.ID IN (SELECT ID FROM COMPANY)").executeUpdate();
}
public int deleteAllNotCascade()
{
// MySQL Only
return dao.createJEPLDALQuery("DELETE CONTACT,COMPANY FROM CONTACT INNER JOIN COMPANY WHERE CONTACT.ID = COMPANY.ID").executeUpdate();
}
public List<Company> selectAll()
{
return dao.createJEPLDAOQuery("SELECT * FROM COMPANY P,CONTACT C WHERE P.ID = C.ID")
.getResultList();
}
public Company selectById(int id)
{
return dao.createJEPLDAOQuery("SELECT * FROM COMPANY CP,CONTACT C WHERE CP.ID = C.ID AND CP.ID = ?")
.addParameter(id)
.getSingleResult();
}
public List<Company> selectByNameAndEMail(String name,String email)
{
return dao.createJEPLDAOQuery("SELECT * FROM COMPANY CP,CONTACT C WHERE CP.ID = C.ID AND C.NAME = ? AND C.EMAIL = ?")
.addParameters(name,email)
.getResultList();
}
public int selectCount()
{
return dao.createJEPLDALQuery("SELECT COUNT(*) FROM COMPANY")
.getOneRowFromSingleField(int.class);
}
}