001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.ken.core; 017 018 import org.apache.ojb.broker.query.Criteria; 019 import org.apache.ojb.broker.query.Query; 020 import org.apache.ojb.broker.query.QueryFactory; 021 import org.junit.Test; 022 import org.kuali.rice.ken.bo.NotificationBo; 023 import org.kuali.rice.ken.bo.NotificationChannelBo; 024 import org.kuali.rice.ken.bo.NotificationProducerBo; 025 import org.kuali.rice.ken.dao.BusinessObjectDaoTestCaseBase; 026 import org.kuali.rice.ken.test.util.MockObjectsUtil; 027 import org.kuali.rice.ken.util.NotificationConstants; 028 import org.kuali.rice.test.BaselineTestCase.BaselineMode; 029 import org.kuali.rice.test.BaselineTestCase.Mode; 030 031 import java.sql.Timestamp; 032 033 import static org.junit.Assert.assertEquals; 034 035 //import org.apache.ojb.broker.query.Criteria; 036 //import org.kuali.rice.core.jpa.criteria.Criteria; 037 //import org.kuali.rice.core.jpa.criteria.QueryByCriteria; 038 039 /** 040 * Scratch test case for testing aspects of OJB under test harness 041 * @author Kuali Rice Team (rice.collab@kuali.org) 042 */ 043 @BaselineMode(Mode.CLEAR_DB) 044 public class TestOJBTest extends BusinessObjectDaoTestCaseBase { 045 /** 046 * Just prints the SQL generated by a query criteria 047 */ 048 /* 049 @Ignore 050 @Test 051 public void testJPACriteria() { 052 Criteria criteria_STATUS = new Criteria(Notification.class.getName()); 053 criteria_STATUS.eq(NotificationConstants.BO_PROPERTY_NAMES.MESSAGE_DELIVERY_STATUS, NotificationConstants.MESSAGE_DELIVERY_STATUS.DELIVERED); 054 055 Criteria criteria_UNDELIVERED = new Criteria(Notification.class.getName()); 056 criteria_UNDELIVERED.eq(NotificationConstants.BO_PROPERTY_NAMES.MESSAGE_DELIVERY_STATUS, NotificationConstants.MESSAGE_DELIVERY_STATUS.UNDELIVERED); 057 058 // now OR the above two together 059 criteria_STATUS.or(criteria_UNDELIVERED); 060 061 Criteria criteria_NOTLOCKED = new Criteria(Notification.class.getName()); 062 criteria_NOTLOCKED.isNull(NotificationConstants.BO_PROPERTY_NAMES.LOCKED_DATE); 063 064 Criteria fullQueryCriteria = new Criteria(Notification.class.getName()); 065 fullQueryCriteria.and(criteria_NOTLOCKED); 066 fullQueryCriteria.lte(NotificationConstants.BO_PROPERTY_NAMES.NOTIFICATION_AUTO_REMOVE_DATE_TIME, new Timestamp(System.currentTimeMillis())); 067 // now add in the STATUS check 068 fullQueryCriteria.and(criteria_STATUS); 069 070 071 System.err.println(fullQueryCriteria.toString()); 072 073 074 QueryByCriteria q = new QueryByCriteria(KRADServiceLocatorInternal.getApplicationEntityManagerFactory().createEntityManager(), fullQueryCriteria); 075 076 System.err.println(q.toString()); 077 078 } 079 */ 080 @Test 081 public void testCriteria() { 082 Criteria criteria_STATUS = new Criteria(); 083 criteria_STATUS.addEqualTo(NotificationConstants.BO_PROPERTY_NAMES.MESSAGE_DELIVERY_STATUS, NotificationConstants.MESSAGE_DELIVERY_STATUS.DELIVERED); 084 085 Criteria criteria_UNDELIVERED = new Criteria(); 086 criteria_UNDELIVERED.addEqualTo(NotificationConstants.BO_PROPERTY_NAMES.MESSAGE_DELIVERY_STATUS, NotificationConstants.MESSAGE_DELIVERY_STATUS.UNDELIVERED); 087 088 // now OR the above two together 089 criteria_STATUS.addOrCriteria(criteria_UNDELIVERED); 090 091 Criteria criteria_NOTLOCKED = new Criteria(); 092 criteria_NOTLOCKED.addIsNull(NotificationConstants.BO_PROPERTY_NAMES.LOCKED_DATE); 093 094 Criteria fullQueryCriteria = new Criteria(); 095 fullQueryCriteria.addAndCriteria(criteria_NOTLOCKED); 096 fullQueryCriteria.addLessOrEqualThan(NotificationConstants.BO_PROPERTY_NAMES.NOTIFICATION_AUTO_REMOVE_DATE_TIME, new Timestamp(System.currentTimeMillis())); 097 // now add in the STATUS check 098 fullQueryCriteria.addAndCriteria(criteria_STATUS); 099 100 101 System.err.println(fullQueryCriteria.toString()); 102 103 Query q = QueryFactory.newQuery(NotificationBo.class, fullQueryCriteria); 104 System.err.println(q.toString()); 105 106 } 107 @Test 108 public void testUpdateRelationships() { 109 NotificationChannelBo channel1 = MockObjectsUtil.getTestChannel1(); 110 NotificationChannelBo channel2 = MockObjectsUtil.getTestChannel2(); 111 NotificationProducerBo mockProducer1 = MockObjectsUtil.getTestProducer1(); 112 113 businessObjectDao.save(mockProducer1); 114 assertEquals(0, mockProducer1.getChannels().size()); 115 116 // add in a notification channel producer join object 117 channel1.getProducers().add(mockProducer1); 118 119 businessObjectDao.save(channel1); 120 121 assertEquals(1, channel1.getProducers().size()); 122 123 // ojb doesn't update the collections of the child in the relationship on save, despite auto-update... 124 // so I'm forced to load it again 125 mockProducer1 = (NotificationProducerBo) businessObjectDao.findById(NotificationProducerBo.class, mockProducer1.getId()); 126 assertEquals(1, mockProducer1.getChannels().size()); 127 128 channel2.getProducers().add(mockProducer1); 129 businessObjectDao.save(channel2); 130 131 assertEquals(1, channel2.getProducers().size()); 132 133 mockProducer1 = (NotificationProducerBo) businessObjectDao.findById(NotificationProducerBo.class, mockProducer1.getId()); 134 135 assertEquals(2, mockProducer1.getChannels().size()); 136 } 137 }