/**
* Copyright (c) 2009 Juwi MacMillan Group GmbH
*
* 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 de.juwimm.cms.test.hibernate;
import java.security.Principal;
import java.util.Iterator;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.security.Authentication;
import org.springframework.security.GrantedAuthority;
import org.springframework.security.GrantedAuthorityImpl;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.security.context.SecurityContextImpl;
import org.springframework.security.providers.anonymous.AnonymousAuthenticationToken;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import de.juwimm.cms.authorization.SimpleCallbackHandler;
import de.juwimm.cms.model.ContentHbm;
import de.juwimm.cms.model.ContentVersionHbm;
import de.juwimm.cms.model.DocumentHbm;
import de.juwimm.cms.model.HostHbm;
import de.juwimm.cms.model.LockHbm;
import de.juwimm.cms.model.SiteHbm;
import de.juwimm.cms.model.UnitHbm;
import de.juwimm.cms.model.TaskHbm;
import de.juwimm.cms.model.ViewComponentHbm;
import de.juwimm.cms.model.ViewDocumentHbm;
import de.juwimm.cms.safeguard.model.Realm2viewComponentHbm;
/**
* Abstract test class inherited from
* AbstractTransactionalDataSourceSpringContextTests which overrides the
* getConfigLocations() method so that the derived test classes do not to
* override the method every time
*
* @see org.springframework.test.AbstractTransactionalDataSourceSpringContextTests
* @author Jens
*
*/
public abstract class HbmTestImpl extends AbstractTransactionalDataSourceSpringContextTests implements HbmTest {
private static Log log = LogFactory.getLog(HbmTestImpl.class);
private static final String DATA_SOURCE = "classpath:beans-test.xml";
private static final String APPLICATION_CONTEXT = "applicationContext.xml";
private static final String TIZZIT_BEANS = "classpath:applicationContext-tizzitBeans-test.xml";
private static final String TIZZIT_COMPASS = "classpath:applicationContext-compass-test.xml";
private LoginContext loginContext = null;
public static final String SYSTEM_USER = "system";
public HbmTestImpl() {
super();
setAutowireMode(AUTOWIRE_BY_NAME);
}
/**
* Supply the spring configuration files
*/
@Override
protected String[] getConfigLocations() {
//String[] springConfig = { TEST_APPLICATION_CONTEXT, TEST_DATA_SOURCE };
String[] springConfig = {DATA_SOURCE, APPLICATION_CONTEXT, TIZZIT_COMPASS, TIZZIT_BEANS};
return springConfig;
}
/**
* Returns the used hibernate session factory
*
* @return A a session factory object
*/
protected SessionFactory getSessionFactory() {
return (SessionFactory) applicationContext.getBean("sessionFactory");
}
/**
* Returns a new hibernate session
*
* @return A hibernate session
*/
protected Session getSession() {
return getSessionFactory().openSession();
}
/**
* List all mapped classes using log4j
*
*/
protected void listMappedClasses() {
String[] classes = getApplicationContext().getBeanDefinitionNames();
logSeperator();
for (int i = 0; i < classes.length; i++) {
log.info(classes[i]);
}
logSeperator();
}
protected void logSeperator() {
log.info("\n##############################\n");
}
public void loginUser(String username, String password) {
Principal p = null;
if (loginContext == null) {
SimpleCallbackHandler simpleCallbackHandler = new SimpleCallbackHandler(username, password);
try {
loginContext = new LoginContext("juwimm-cms-security-domain", simpleCallbackHandler);
loginContext.login();
Subject s = loginContext.getSubject();
Iterator it = s.getPrincipals().iterator();
if (!s.getPrincipals().isEmpty()) {
while (it.hasNext()) {
p = (Principal) it.next();
if (!p.getName().equalsIgnoreCase(SYSTEM_USER)) {
org.andromda.spring.PrincipalStore.set(p);
break;
}
}
}
} catch (LoginException e) {
if (log.isErrorEnabled()) {
log.error("Could not login: " + e.getMessage(), e);
}
}
}
}
public Principal loginSystemUser() {
Principal p = null;
if (loginContext == null) {
log.info("Setting principal...");
//TODO login
// System.setProperty( "java.security.auth.login.config", "C:\\svnroot\\juwimm-cms\\core\\src\\test\\jaas.conf" );
String encoded = "e";
SimpleCallbackHandler simpleCallbackHandler = new SimpleCallbackHandler(SYSTEM_USER, encoded);
try {
loginContext = new LoginContext("juwimm-cms-security-domain", simpleCallbackHandler);
loginContext.login();
Subject s = loginContext.getSubject();
Iterator it = s.getPrincipals().iterator();
if (!s.getPrincipals().isEmpty()) {
p = (Principal) it.next();
org.andromda.spring.PrincipalStore.set(p);
}
} catch (LoginException e) {
if (log.isErrorEnabled()) {
log.error("Could not login: " + e.getMessage(), e);
}
}
}
return p;
}
public Object getBean(String mappedName) {
loginSystemUser();
return applicationContext.getBean(mappedName);
}
public Subject getSubject() {
if (loginContext != null) {
return loginContext.getSubject();
}
return null;
}
public void mockAuthetication() {
SecurityContextImpl secureContext = new SecurityContextImpl();
Authentication token = new AnonymousAuthenticationToken("testUser", "testUser", new GrantedAuthority[] {new GrantedAuthorityImpl("testRole")});
secureContext.setAuthentication(token);
SecurityContextHolder.setContext(secureContext);
}
public void insertSite(SiteHbm site) {
getJdbcTemplate().update(String.format("insert into site " + "(site_id,site_name,site_short,mandator_dir,WYSIWYG_IMAGE_URL,HELP_URL,DCF_URL,PREVIEW_URL_LIVE_SERVER,PREVIEW_URL_WORK_SERVER,PAGE_NAME_FULL,PAGE_NAME_CONTENT,PAGE_NAME_SEARCH,LAST_MODIFIED_DATE,UPDATE_SITE_INDEX, EXTERNAL_SITE_SEARCH) values " + "(%d,'%s','%s','c:/mandatorDir','WYSIWYG_IMAGE_URL','HELP_URL','DCF_URL','PREVIEW_URL_LIVE_SERVER','PREVIEW_URL_WORK_SERVER','page.html','content.html','search.html',0,0,0)", site.getSiteId(), site.getName(), site.getName()));
}
public void insertUnit(UnitHbm unit) {
getJdbcTemplate().update(String.format("insert into unit (unit_id,name,last_Modified_date,site_id_fk, colour) " + "values (%d,'%s',0,%d,'testColour')", unit.getUnitId(), unit.getName(), unit.getSite().getSiteId()));
}
public void insertHost(HostHbm hostHbm) {
getJdbcTemplate().update(String.format("insert into host " + "(host_name,site_id_fk,unit_id_fk,redirect_url,liveserver) values " + "('testHost',%d,%d,'%s',%b)", hostHbm.getSite().getSiteId(), hostHbm.getUnit().getUnitId(), hostHbm.getRedirectUrl(), hostHbm.isLiveserver()));
}
public void insertViewDocument(ViewDocumentHbm viewDocument) {
getJdbcTemplate().update(String.format("insert into viewdocument (view_document_id,language,view_type,site_id_fk) " + "values (%d,'%s','%s',%d)", viewDocument.getViewDocumentId(), viewDocument.getLanguage(), viewDocument.getViewType(), viewDocument.getSite().getSiteId()));
}
public void insertUser(String userName, Integer activeSiteId) {
getJdbcTemplate().update(String.format("insert into usr " + "(user_id,first_name,last_name,email,login_date,active_site_id_fk,masterRoot,passwd) values " + "('%s','%s','%s','%s',0,%d,1,'123')", userName, userName, userName, userName + "@juwimm.de", activeSiteId));
}
public void insertLock(LockHbm lock) {
getJdbcTemplate().update(String.format("insert into locks (lock_id,create_date,owner_id_fk) " + "values (%d,'0','testUser')", lock.getLockId()));
}
public void insertViewComponent(ViewComponentHbm viewComponent) {
getJdbcTemplate().update(String.format("insert into viewcomponent" + "(view_component_id,status,show_type,view_type,visible,search_indexed,xml_search_indexed,display_link_name,link_description,url_link_name,approved_link_name,online_start,online_stop,reference,online_state,deploy_command,meta_data,meta_description,view_document_id_fk,create_date,last_modified_date,display_settings,user_last_modified_date) " + "values (%d,0,3,1,1,1,1,'%s','%s','%s','%s',0,0,'%s',0,0,'%s','%s',%d,0,0,0,0)", viewComponent.getViewComponentId(), viewComponent.getDisplayLinkName(), viewComponent.getLinkDescription(), viewComponent.getUrlLinkName(), viewComponent.getApprovedLinkName(), viewComponent.getReference(), viewComponent.getMetaData(), viewComponent.getMetaDescription(), viewComponent.getViewDocument().getViewDocumentId()));
}
public void insertContent(ContentHbm content) {
getJdbcTemplate().update(String.format("insert into content (content_id,status,template,UPDATE_SEARCH_INDEX) " + "values (%d,%d,'%s',%b)", content.getContentId(), content.getStatus(), content.getTemplate(), content.isUpdateSearchIndex()));
}
public void insertDocument(DocumentHbm document) {
getJdbcTemplate().update(String.format("insert into document" + "(document_id,mime_type,time_stamp,document_name,use_count_last_version,use_count_publish_version,update_Search_Index,unit_id_fk,searchable) " + "values (%d,'%s',0,'%s',1,1,0,%d,%b)", document.getDocumentId(), document.getMimeType(), document.getDocumentName(), document.getUnit().getUnitId(), document.isSearchable()));
}
public void insertContentVersion(ContentVersionHbm contentVersion, Integer contentId) {
getJdbcTemplate().update(String.format("insert into contentversion (content_version_id,version,heading,text,create_date,creator,content_id_fk) " + "values (%d,'%s','%s','%s',%d,'%s',%d)", contentVersion.getContentVersionId(), contentVersion.getVersion(), contentVersion.getHeading(), contentVersion.getText(), contentVersion.getCreateDate(), contentVersion.getCreator(), contentId));
}
public void insertContentVersion(ContentVersionHbm contentVersion) {
getJdbcTemplate().update(String.format("insert into contentversion (content_version_id,version,heading,text,create_date,creator) " + "values (%d,'%s','%s','%s',%d,'%s')", contentVersion.getContentVersionId(), contentVersion.getVersion(), contentVersion.getHeading(), contentVersion.getText(), contentVersion.getCreateDate(), contentVersion.getCreator()));
}
public void insertRealm2viewComponent(Realm2viewComponentHbm realm) {
getJdbcTemplate().update(String.format("insert into realm2view_component (realm2view_component_id,role_needed,view_component_id_fk,login_page_id_fk) " + "values (%d,'%s',1,1)", realm.getRealm2viewComponentId(), realm.getRoleNeeded()));
}
public void insertTask(TaskHbm task) {
getJdbcTemplate().update(String.format("insert into task " + "(task_id,task_type,receiver_role,unit_id_fk,receiver,sender,user_comment,status,creation_date) values " + "(%d,1,'receiverRole',%d,'%s','%s','comment',1,1)", task.getTaskId(), task.getUnit().getUnitId(), task.getReceiver().getUserId(), task.getSender().getUserId()));
}
}