import ns org.eclipse.osbp.authentication.account.entities.UserAccount

/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License v1.0       
 *  which accompanies this distribution, and is available at                  
 *  http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */
package org.eclipse.osbp.authentication.account.datamarts{

	datamart UserAccount 
	using entity UserAccount { 
		attributes {
			attribute userName axis columns 
			attribute email axis columns
			attribute position axis columns
			attribute profileimage axis columns
			attribute notRegistered axis columns 
		}
	}
}
