/* * Copyright 2012 The Solmix Project * * This 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. * * This software 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 may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.gnu.org/licenses/ * or see the FSF site: http://www.fsf.org. */ package org.solmix.jpa.test; import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.UUID; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.solmix.runtime.SystemContext; import org.solmix.api.datasource.DSRequest; import org.solmix.api.datasource.DSResponse; import org.solmix.api.datasource.DataSource; import org.solmix.api.datasource.DataSourceData; import org.solmix.api.exception.SlxException; import org.solmix.api.jaxb.Eoperation; import org.solmix.api.jaxb.TdataSource; import org.solmix.api.jaxb.ToperationBinding; import org.solmix.api.jaxb.ToperationBindings; import org.solmix.api.jaxb.TqueryClauses; import org.solmix.fmk.SlxContext; import org.solmix.fmk.criterion.Criteria; import org.solmix.fmk.datasource.AddOp; import org.solmix.fmk.datasource.FetchOp; import org.solmix.fmk.datasource.RemoveOp; import org.solmix.fmk.datasource.UpdateOp; import org.solmix.jpa.JPADataSourceBuilder; import org.solmix.jpa.test.entity.AuthUser; /** * * @author solmix.f@gmail.com * @version $Id$ 2013年12月11日 */ public class JPADataSourceTest { private SystemContext sc; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { sc = SlxContext.getThreadSystemContext(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { sc.close(true); } // @Test public void fetchEntity() { Criteria c = new Criteria("userName","superadminzz"); try { JPADataSourceBuilder builder = new JPADataSourceBuilder(); DataSource ds= builder.build(AuthUser.class,true); List<AuthUser> aUser= SlxContext.doInSystemContext(new FetchOp<List<AuthUser>>(ds){ @Override public List<AuthUser> fetch(DSRequest request) throws SlxException { DSResponse res= request.execute(); return res.getResultList(AuthUser.class); } }.withCriteria(c)); Assert.assertNotNull(aUser); } catch (SlxException e) { e.printStackTrace(); } } // @Test public void addByEntity() { AuthUser au = new AuthUser(); au.setUserName("superadminzz"); au.setComments("super administrator ,this user can do anything."); au.setCreateDate(new Date()); try { JPADataSourceBuilder builder = new JPADataSourceBuilder(); DataSource ds= builder.build(); AuthUser aUser= SlxContext.doInSystemContext(new AddOp<AuthUser>(ds){ @Override public AuthUser add(DSRequest request) throws SlxException { DSResponse res= request.execute(); return res.getSingleResult(AuthUser.class); } }.withValues(au)); Assert.assertNotNull(au.getUserId()); aUser.setUserName("superAdminzz"); AuthUser uUser= SlxContext.doInSystemContext(new UpdateOp<AuthUser>(ds){ @Override public AuthUser update(DSRequest request) throws SlxException { DSResponse res= request.execute(); return res.getSingleResult(AuthUser.class); } }.withValues(au)); Assert.assertEquals(aUser.getUserName(),"superAdminzz"); } catch (SlxException e) { e.printStackTrace(); } } // @Test public void removeByEntity() throws SlxException { JPADataSourceBuilder builder = new JPADataSourceBuilder(); DataSource ds= builder.build(); AuthUser au = new AuthUser(); au.setUserId(108); AuthUser aUser= SlxContext.doInSystemContext(new RemoveOp<AuthUser>(ds){ @Override public AuthUser remove(DSRequest request) throws SlxException { DSResponse res= request.execute(); return res.getSingleResult(AuthUser.class); } }.withCriteria(au)); } @Test public void removeByJPQL() { try { DataSource ds=getJPQLDataSource(Eoperation.REMOVE,"DELETE FROM AuthUser"); DSResponse aUser= SlxContext.doInSystemContext(new org.solmix.fmk.datasource.RemoveOp.DfRemoveOp(ds)); System.out.println(aUser); // Assert.assertNotNull(aUser.getUserId()); } catch (SlxException e) { e.printStackTrace(); } } private DataSource getJPQLDataSource(Eoperation operation,String jpql) throws SlxException{ JPADataSourceBuilder builder = new JPADataSourceBuilder(); TdataSource tds= builder.getJPATdata(); ToperationBindings ops= new ToperationBindings(); ToperationBinding op= new ToperationBinding(); op.setOperationType(operation); TqueryClauses qc = new TqueryClauses(); qc.setCustomQL(jpql); op.setQueryClauses(qc); ops.getOperationBinding().add(op); tds.setOperationBindings(ops); DataSourceData dsd = new DataSourceData(tds); return builder.build(dsd); } // @Test public void addByBean() { Map au = new Hashtable(); au.put("userName", "superadmin123"); au.put("comments", "super administrator ,this user can do anything."); au.put("createDate", new Date()); try { JPADataSourceBuilder builder = new JPADataSourceBuilder(); DataSource ds= builder.build(AuthUser.class,false); AuthUser aUser= SlxContext.doInSystemContext(new AddOp<AuthUser>(ds){ @Override public AuthUser add(DSRequest request) throws SlxException { DSResponse res= request.execute(); return res.getSingleResult(AuthUser.class); } }.withValues(au)); Assert.assertNotNull(aUser.getUserId()); } catch (SlxException e) { e.printStackTrace(); } } // @Test public void batchAddEntity() { try { JPADataSourceBuilder builder = new JPADataSourceBuilder(); DataSource ds= builder.build(); SlxContext.doInSystemContext(new AddOp<Object>(ds){ @Override public Object add(DSRequest request) throws SlxException { DSResponse res= request.execute(); return res.getRawData(); } }.withValues(getUsers())); } catch (SlxException e) { e.printStackTrace(); } } private List<AuthUser> getUsers(){ List<AuthUser> users= new ArrayList<AuthUser>(); for(int i=0;i<10;i++){ AuthUser au = new AuthUser(); au.setUserName("superadmin"+i); au.setComments("super administrator ,this user can do anything."); au.setCreateDate(new Date()); au.setCreateName("solmix"+i); au.setLastChangePassword(new Date()); au.setPassword(UUID.randomUUID().toString()); users.add(au); } return users; } }