/**
* Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET
* (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije
* informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE
* COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp.,
* INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM
* ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC))
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.societies.context.community.db.impl.model;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import org.societies.api.context.model.CtxAssociation;
import org.societies.api.context.model.CtxAttribute;
import org.societies.api.context.model.CommunityCtxEntity;
import org.societies.api.context.model.CtxEntity;
import org.societies.api.context.model.CtxModelObject;
import org.societies.api.context.model.CtxModelObjectFactory;
/**
* Describe your class here...
*
* @author <a href="mailto:nicolas.liampotis@cn.ntua.gr">Nicolas Liampotis</a> (ICCS)
* @since 0.5
*/
public final class CommunityCtxModelDAOTranslator {
private static CommunityCtxModelDAOTranslator instance = new CommunityCtxModelDAOTranslator();
private CommunityCtxModelDAOTranslator() {}
public static synchronized CommunityCtxModelDAOTranslator getInstance() {
return instance;
}
public CommunityCtxEntityDAO fromCommunityCtxEntity(CommunityCtxEntity mo) {
final CommunityCtxEntityDAO dao = new CommunityCtxEntityDAO(mo.getId());
dao.setLastModified(mo.getLastModified());
for (final CtxAttribute attribute : mo.getAttributes()) {
dao.addAttribute(this.fromCtxAttribute(attribute));
}
return dao;
}
public CommunityCtxEntity fromCommunityCtxEntityDAO(CommunityCtxEntityDAO dao) {
final Set<CtxAttribute> attributes = new HashSet<CtxAttribute>();
for (final CommunityCtxAttributeDAO attributeDAO : dao.getAttributes())
attributes.add(this.fromCtxAttributeDAO(attributeDAO));
final CommunityCtxEntity mo = CtxModelObjectFactory.getInstance()
.createCommunityEntity(dao.getId(), dao.getLastModified(), attributes,
dao.getAssociations(), dao.getCommunities(), dao.getMembers());
return mo;
}
public CommunityCtxEntityBaseDAO fromCtxEntity(CtxEntity mo) {
final CommunityCtxEntityBaseDAO dao = new CommunityCtxEntityBaseDAO(mo.getId());
dao.setLastModified(mo.getLastModified());
for (final CtxAttribute attribute : mo.getAttributes()) {
dao.addAttribute(this.fromCtxAttribute(attribute));
}
return dao;
}
public CtxEntity fromCtxEntityDAO(CommunityCtxEntityBaseDAO dao) {
final Set<CtxAttribute> attributes = new HashSet<CtxAttribute>();
for (final CommunityCtxAttributeDAO attributeDAO : dao.getAttributes())
attributes.add(this.fromCtxAttributeDAO(attributeDAO));
final CtxEntity mo = CtxModelObjectFactory.getInstance()
.createEntity(dao.getId(), dao.getLastModified(),
attributes, dao.getAssociations());
return mo;
}
public CommunityCtxAttributeDAO fromCtxAttribute(CtxAttribute mo) {
final CommunityCtxAttributeDAO dao = new CommunityCtxAttributeDAO(mo.getId());
dao.setQuality(new CommunityCtxQualityDAO(mo.getId()));
dao.setLastModified(mo.getLastModified());
dao.setHistoryRecorded(mo.isHistoryRecorded());
dao.setStringValue(mo.getStringValue());
dao.setIntegerValue(mo.getIntegerValue());
dao.setDoubleValue(mo.getDoubleValue());
dao.setBinaryValue(mo.getBinaryValue());
dao.setValueType(mo.getValueType());
dao.setValueMetric(mo.getValueMetric());
dao.setSourceId(mo.getSourceId());
dao.getQuality().setLastUpdated(mo.getQuality().getLastUpdated());
dao.getQuality().setOriginType(mo.getQuality().getOriginType());
dao.getQuality().setPrecision(mo.getQuality().getPrecision());
dao.getQuality().setUpdateFrequency(mo.getQuality().getUpdateFrequency());
return dao;
}
public CtxAttribute fromCtxAttributeDAO(CommunityCtxAttributeDAO dao) {
final Serializable value;
if (dao.getStringValue() != null)
value = dao.getStringValue();
else if (dao.getIntegerValue() != null)
value = dao.getIntegerValue();
else if (dao.getDoubleValue() != null)
value = dao.getDoubleValue();
else if (dao.getBinaryValue() != null)
value = dao.getBinaryValue();
else
value = null;
final CtxAttribute mo = CtxModelObjectFactory.getInstance()
.createAttribute(dao.getId(), dao.getLastModified(),
dao.getQuality().getLastUpdated(), value);
mo.setHistoryRecorded(dao.isHistoryRecorded());
mo.setValueType(dao.getValueType());
mo.setValueMetric(dao.getValueMetric());
mo.setSourceId(dao.getSourceId());
mo.getQuality().setOriginType(dao.getQuality().getOriginType());
mo.getQuality().setPrecision(dao.getQuality().getPrecision());
mo.getQuality().setUpdateFrequency(dao.getQuality().getUpdateFrequency());
return mo;
}
public CommunityCtxAssociationDAO fromCtxAssociation(CtxAssociation mo) {
CommunityCtxAssociationDAO dao = new CommunityCtxAssociationDAO(mo.getId());
dao.setLastModified(mo.getLastModified());
// Set parent entity
dao.setParentEntity(mo.getParentEntity());
// Set child entities
dao.setChildEntities(mo.getChildEntities());
return dao;
}
public CtxAssociation fromCtxAssociationDAO(CommunityCtxAssociationDAO dao) {
return CtxModelObjectFactory.getInstance()
.createAssociation(dao.getId(), dao.getLastModified(),
dao.getParentEntity(), dao.getChildEntities());
}
public CtxModelObjectDAO fromCtxModelObject(CtxModelObject mo) {
final CtxModelObjectDAO dao;
if (mo instanceof CtxEntity)
dao = this.fromCtxEntity((CtxEntity) mo);
else if (mo instanceof CommunityCtxEntity)
dao = this.fromCommunityCtxEntity((CommunityCtxEntity) mo);
else if (mo instanceof CtxAttribute)
dao = this.fromCtxAttribute((CtxAttribute) mo);
else if (mo instanceof CtxAssociation)
dao = this.fromCtxAssociation((CtxAssociation) mo);
else
throw new IllegalArgumentException("unsupported mo type " + mo.getClass().getName());
return dao;
}
public CtxModelObject fromCtxModelObjectDAO(CtxModelObjectDAO dao){
final CtxModelObject mo;
if (dao instanceof CommunityCtxEntityDAO)
mo = this.fromCommunityCtxEntityDAO((CommunityCtxEntityDAO) dao);
else if (dao instanceof CommunityCtxEntityBaseDAO)
mo = this.fromCtxEntityDAO((CommunityCtxEntityBaseDAO) dao);
else if (dao instanceof CommunityCtxAttributeDAO)
mo = this.fromCtxAttributeDAO((CommunityCtxAttributeDAO) dao);
else if (dao instanceof CommunityCtxAssociationDAO)
mo = this.fromCtxAssociationDAO((CommunityCtxAssociationDAO) dao);
else
throw new IllegalArgumentException("unsupported dao type " + dao.getClass().getName());
return mo;
}
@Override
protected Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException("Clone is not allowed.");
}
}