/*
* Created on Feb 16, 2004
*
* To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package context.arch.logging;
import java.util.ArrayList;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import context.arch.logging.hibernate.WRAttribute;
import context.arch.logging.hibernate.WRCallback;
import context.arch.logging.hibernate.WRService;
import context.arch.logging.hibernate.WRServiceFunction;
import context.arch.logging.hibernate.WidgetRegistration;
import context.arch.service.Service;
import context.arch.service.Services;
import context.arch.service.helper.FunctionDescription;
import context.arch.service.helper.FunctionDescriptions;
import context.arch.storage.Attribute;
import context.arch.storage.AttributeNameValue;
import context.arch.storage.Attributes;
import context.arch.subscriber.Callback;
import context.arch.subscriber.Callbacks;
/**
* @author Marti Motoyama
* @author Brian Y. Lim
*/
public class WidgetRegistrationLogger {
private static WidgetRegistrationLogger WRLInstance;
@SuppressWarnings("unused")
private boolean isInitialized;
protected WidgetRegistrationLogger() {
}
public static WidgetRegistrationLogger getWRLInstance() {
if (WRLInstance == null) {
synchronized (WidgetRegistrationLogger.class) {
if (WRLInstance == null) {
WRLInstance = new WidgetRegistrationLogger();
WRLInstance.initialize();
}
}
}
return WRLInstance;
}
private void initialize(){
}
public void insertWidgetRegistrationEntry( String in_id, Attributes in_constantAttributes, Attributes in_nonConstantAttributes,
Callbacks in_callbacks, Services in_services) throws LoggingException {
Session session = HibernateUtils.getNewSession();
if (session == null) return;
//Containers for entries to submit
ArrayList<WRAttribute> wrAttributeList = new ArrayList<WRAttribute>();
ArrayList<WRCallback> wrCallbackList = new ArrayList<WRCallback>();
ArrayList<WRService> wrServiceList = new ArrayList<WRService>();
ArrayList<WRServiceFunction> wrServiceFunctionList = new ArrayList<WRServiceFunction>();
//Set up a widget registration entry
WidgetRegistration widgetRegistrationEntry = new WidgetRegistration();
widgetRegistrationEntry.setWidgetid(in_id);
widgetRegistrationEntry.setRegistrationtime(new Date());
//Set up the constant attribute entries
for (Attribute<?> attribute : in_constantAttributes.values()) {
WRAttribute wrAttributeEntry = new WRAttribute();
wrAttributeEntry.setAttributename(attribute.getName());
wrAttributeEntry.setAttributetype(attribute.getType());
wrAttributeEntry.setConstant(true);
wrAttributeEntry.setWidgetRegistration(widgetRegistrationEntry);
if (attribute instanceof AttributeNameValue<?>){
AttributeNameValue<?> attributeNameValue = (AttributeNameValue<?>) attribute;
if (attributeNameValue.getType().equals(String.class)) {
wrAttributeEntry.setAttributevaluestring((String) attributeNameValue.getValue());
}
else if (attributeNameValue.getType().isInstance(Number.class)) {
wrAttributeEntry.setAttributevaluenumeric(Float.valueOf(attributeNameValue.getValue().toString()));
}
}
wrAttributeList.add(wrAttributeEntry);
}
// Set up the non-constant attribute entries
for (Attribute<?> attribute : in_nonConstantAttributes.values()) {
WRAttribute wrAttributeEntry = new WRAttribute();
wrAttributeEntry.setAttributename(attribute.getName());
wrAttributeEntry.setAttributetype(attribute.getType());
wrAttributeEntry.setConstant(false);
wrAttributeEntry.setWidgetRegistration(widgetRegistrationEntry);
if (attribute instanceof AttributeNameValue<?>){
AttributeNameValue<?> attributeNameValue = (AttributeNameValue<?>) attribute;
if (attributeNameValue.getType().equals(String.class)) {
wrAttributeEntry.setAttributevaluestring((String) attributeNameValue.getValue());
}
else if (attributeNameValue.getType().isInstance(Number.class)) {
wrAttributeEntry.setAttributevaluenumeric(Float.valueOf(attributeNameValue.getValue().toString()));
}
}
wrAttributeList.add(wrAttributeEntry);
}
//Set up the callback entries
for (Callback callback : in_callbacks.values()) {
WRCallback wrCallbackEntry = new WRCallback();
wrCallbackEntry.setCallbackname(callback.getName());
wrCallbackEntry.setWidgetRegistration(widgetRegistrationEntry);
wrCallbackList.add(wrCallbackEntry);
}
//Set up the service and the servicefunction entries
FunctionDescriptions tempFnDescriptions;
for (Service tempService : in_services.values()) {
WRService wrServiceEntry = new WRService();
wrServiceEntry.setServicename(tempService.getName());
wrServiceEntry.setWidgetRegistration(widgetRegistrationEntry);
tempFnDescriptions = tempService.getFunctionDescriptions();
for (FunctionDescription tempFnDescription : tempFnDescriptions){
WRServiceFunction wrServiceFunctionEntry = new WRServiceFunction();
wrServiceFunctionEntry.setWRService(wrServiceEntry);
wrServiceFunctionEntry.setFunctionname(tempFnDescription.getName());
wrServiceFunctionEntry.setFunctiondescription(tempFnDescription.getDescription());
wrServiceFunctionList.add(wrServiceFunctionEntry);
}
wrServiceList.add(wrServiceEntry);
}
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save(widgetRegistrationEntry);
for (int i = 0; i < wrAttributeList.size(); i++){
session.save(wrAttributeList.get(i));
}
for (int i = 0; i < wrCallbackList.size(); i++){
session.save(wrCallbackList.get(i));
}
for (int i = 0; i < wrServiceList.size(); i++){
session.save(wrServiceList.get(i));
}
for (int i = 0; i < wrServiceFunctionList.size(); i++){
session.save(wrServiceFunctionList.get(i));
}
tx.commit(); // flush the Session and commit the transaction
}
catch(Exception e){
try{
if (tx != null) tx.rollback(); // rollback the transaction
}catch(Exception x){
throw new LoggingException(x);
}
}
finally{
try{
session.close();
}catch (Exception e){
throw new LoggingException(e);
}
}
}
public static void main(String argv[]) {
@SuppressWarnings("unused")
WidgetRegistrationLogger testWRL = WidgetRegistrationLogger.getWRLInstance();
}
}