/**
* GRANITE DATA SERVICES
* Copyright (C) 2006-2015 GRANITE DATA SERVICES S.A.S.
*
* This file is part of the Granite Data Services Platform.
*
* Granite Data Services is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Granite Data Services is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
* General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA, or see <http://www.gnu.org/licenses/>.
*/
package org.granite.test.tide.spring.service;
import java.sql.Date;
import java.util.HashSet;
import org.granite.test.tide.data.Customer;
import org.granite.test.tide.data.Job;
import org.granite.test.tide.data.JobApplication;
import org.granite.test.tide.data.Meeting;
import org.granite.test.tide.data.User;
import org.granite.tide.data.DataEnabled;
import org.granite.tide.data.DataEnabled.PublishMode;
import org.hibernate.Hibernate;
import org.hibernate.ObjectNotFoundException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
@DataEnabled(topic="testTopic", publish=PublishMode.ON_COMMIT, useInterceptor=true)
public class Hibernate3JobService implements JobService {
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public void init() {
Customer customer;
try {
customer = (Customer)getSession().load(Customer.class, 1L);
Hibernate.initialize(customer);
}
catch (ObjectNotFoundException e) {
customer = new Customer();
customer.initIdUid(1L, "C1");
Job job = new Job();
job.initIdUid(1L, "J1");
customer.setJobs(new HashSet<Job>());
customer.getJobs().add(job);
job.setCustomer(customer);
job.setApplications(new HashSet<JobApplication>());
User user = new User();
user.initIdUid(1L, "U1");
user.setApplications(new HashSet<JobApplication>());
getSession().persist(customer);
getSession().persist(user);
}
}
public Object[] apply(Long jobId, Long userId) {
Session session = getSession();
Job job = (Job)session.load(Job.class, jobId);
User user = (User)session.load(User.class, userId);
JobApplication application = new JobApplication();
application.initUid();
application.setDate(new Date(new java.util.Date().getTime()));
application.setJob(job);
application.setUser(user);
session.persist(application);
job.getApplications().add(application);
user.getApplications().add(application);
return new Object[] { job, user, application };
}
public Object[] createMeeting(Long customerId, Long userId) {
Session session = getSession();
Customer customer = (Customer)session.load(Customer.class, customerId);
User user = (User)session.load(User.class, userId);
Meeting meeting = new Meeting();
meeting.initUid();
meeting.setCustomer(customer);
meeting.setUser(user);
customer.getMeetings().add(meeting);
user.getMeetings().add(meeting);
return new Object[] { customer, user, meeting };
}
public void newMeeting(Long customerId, Long userId) {
Session session = getSession();
Customer customer = (Customer)session.load(Customer.class, customerId);
User user = (User)session.load(User.class, userId);
Meeting meeting = new Meeting();
meeting.initUid();
meeting.setCustomer(customer);
meeting.setUser(user);
customer.getMeetings().add(meeting);
user.getMeetings().add(meeting);
}
public Object[] closeMeeting(Long meetingId) {
Session session = getSession();
Meeting meeting = (Meeting)session.load(Meeting.class, meetingId);
meeting.getUser().getMeetings().remove(meeting);
meeting.getCustomer().getMeetings().remove(meeting);
return new Object[] { meeting };
}
}