| /* |
| * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others. |
| * 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: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.emf.cdo.server.hibernate.teneo; |
| |
| import org.eclipse.emf.cdo.eresource.EresourcePackage; |
| import org.eclipse.emf.cdo.server.internal.hibernate.CDOHibernateConstants; |
| import org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.CDOIDUserType; |
| |
| import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEClass; |
| import org.eclipse.emf.teneo.annotations.pamodel.PAnnotatedEStructuralFeature; |
| import org.eclipse.emf.teneo.hibernate.mapper.EntityMapper; |
| import org.eclipse.emf.teneo.simpledom.Element; |
| |
| import java.util.List; |
| |
| /** |
| * Adds mapping for econtainer and eresource. |
| * |
| * @author <a href="mtaal@elver.org">Martin Taal</a> |
| * @since 3.0 |
| */ |
| public class CDOEntityMapper extends EntityMapper |
| { |
| private PAnnotatedEClass currentEntity; |
| |
| private boolean addedExtraMappings; |
| |
| public CDOEntityMapper() |
| { |
| } |
| |
| @Override |
| public void processEntity(PAnnotatedEClass entity) |
| { |
| // not the nicest solution |
| currentEntity = entity; |
| try |
| { |
| addedExtraMappings = false; |
| super.processEntity(entity); |
| } |
| finally |
| { |
| currentEntity = null; |
| } |
| } |
| |
| // add container and resource mappings |
| @Override |
| protected void processFeatures(List<PAnnotatedEStructuralFeature> features) |
| { |
| super.processFeatures(features); |
| |
| final Element entityElement = getHbmContext().getCurrent(); |
| entityElement.addAttribute("lazy", "true"); |
| |
| if (!addedExtraMappings && currentEntity.getPaSuperEntity() == null) |
| { |
| final Element resourceElement = entityElement.addElement("property"); //$NON-NLS-1$ |
| resourceElement.addAttribute("name", CDOHibernateConstants.RESOURCE_PROPERTY); //$NON-NLS-1$ |
| resourceElement.addElement("column").addAttribute("name", CDOHibernateConstants.RESOURCE_PROPERTY_COLUMN); //$NON-NLS-1$//$NON-NLS-2$ |
| resourceElement.addAttribute("type", CDOIDUserType.class.getName()); //$NON-NLS-1$ |
| |
| final Element containerElement = entityElement.addElement("property"); //$NON-NLS-1$ |
| containerElement.addAttribute("name", CDOHibernateConstants.CONTAINER_PROPERTY).addAttribute("type", "string"); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ |
| final Element columnElement = containerElement.addElement("column").addAttribute("name", //$NON-NLS-1$ //$NON-NLS-2$ |
| CDOHibernateConstants.CONTAINER_PROPERTY_COLUMN); |
| |
| final Element versionElement = entityElement.addElement("version"); //$NON-NLS-1$ |
| // add cdo_teneo prefix to prop name prevent name clashes with |
| // efeatures which are accidentally called version |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=378050 |
| versionElement.addAttribute("name", "cdo_teneo_" + getHbmContext().getVersionColumnName()); //$NON-NLS-1$ |
| versionElement.addElement("meta").addAttribute("attribute", "version").setText("true"); |
| versionElement.addElement("column").addAttribute("name", getHbmContext().getVersionColumnName()); //$NON-NLS-1$//$NON-NLS-2$ |
| versionElement.addAttribute("type", Integer.class.getName()); //$NON-NLS-1$ |
| |
| final Element timeStampElement = entityElement.addElement("property"); //$NON-NLS-1$ |
| timeStampElement.addAttribute("name", CDOHibernateConstants.COMMITTIMESTAMP_PROPERTY); //$NON-NLS-1$ |
| timeStampElement.addAttribute("type", Long.class.getName()); //$NON-NLS-1$ |
| |
| if (getHbmContext().getCurrentEClass() == EresourcePackage.eINSTANCE.getCDOResourceNode()) |
| { |
| // not nice but teneo will assign the first unique-key the number c0 |
| // and there is only one unique constraint |
| columnElement.addAttribute("unique-key", "c0"); //$NON-NLS-1$//$NON-NLS-2$ |
| } |
| |
| addedExtraMappings = true; |
| } |
| } |
| } |