public HstObjectConverterImpl(Mapper mapper, AtomicTypeConverterProvider converterProvider, ProxyManager proxyManager, ObjectCache requestObjectCache) { super(mapper, converterProvider, proxyManager, requestObjectCache); this.mapper = mapper; this.converterProvider = converterProvider; this.proxyManager = proxyManager; this.requestObjectCache = requestObjectCache; this.simpleFieldsHelp = new SimpleFieldsHelper(converterProvider); }
public Object getObject(Session session, Node parentNode, BeanDescriptor beanDescriptor, ClassDescriptor beanClassDescriptor, Class beanClass, Object bean) throws ObjectContentManagerException, RepositoryException,JcrMappingException { return simpleFieldsHelper.retrieveSimpleFields(session, beanClassDescriptor, parentNode, bean); }
public void remove(Session session, Node parentNode, BeanDescriptor beanDescriptor, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent) throws ObjectContentManagerException, RepositoryException, JcrMappingException { simpleFieldsHelper.storeSimpleFields(session, object, beanClassDescriptor, parentNode); }
private void storeSimpleField(Object object, Node objectNode, ValueFactory valueFactory, FieldDescriptor fieldDescriptor, String fieldName, String jcrName) throws RepositoryException, PathNotFoundException, ValueFormatException, VersionException, LockException, ConstraintViolationException { boolean protectedProperty = isProtectedProperty(objectNode, fieldDescriptor, jcrName); if (!protectedProperty) { // DO NOT TRY TO WRITE PROTECTED PROPERTIES Object fieldValue = ReflectionUtils.getNestedProperty(object, fieldName); // if the value and if there is a default value for this field => set this default value String defaultValue = fieldDescriptor.getJcrDefaultValue(); if ((fieldValue == null) && (defaultValue != null)) { //Not sure that we have the attribute with the default value in all use cases ReflectionUtils.setNestedProperty(object, fieldName, defaultValue); fieldValue = ReflectionUtils.getNestedProperty(object, fieldName); } AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, object, fieldName); Value value = converter.getValue(valueFactory, fieldValue); checkProperty(objectNode, fieldDescriptor, value); objectNode.setProperty(jcrName, value); } }
public void update(Session session, Node objectNode, Object object) { ClassDescriptor classDescriptor = mapper.getClassDescriptorByClass(ReflectionUtils.getBeanClass(object)); checkNodeType(session, classDescriptor); checkCompatiblePrimaryNodeTypes(session, objectNode, classDescriptor, false); simpleFieldsHelp.storeSimpleFields(session, object, classDescriptor, objectNode); updateBeanFields(session, object, classDescriptor, objectNode); updateCollectionFields(session, object, classDescriptor, objectNode); simpleFieldsHelp.refreshUuidPath(session, classDescriptor, objectNode, object); }
PropertyDefinition propDef = getPropertyDefinition(node, propertyName); AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, initializedBean, fieldName); Object fieldValue = (propValue != null) ? converter.getObject(propValue) : null; ReflectionUtils.setNestedProperty(initializedBean, fieldName, fieldValue);
private boolean isProtectedProperty(Node objectNode, FieldDescriptor fieldDescriptor, String jcrName) throws RepositoryException, PathNotFoundException { // Return true if the property is defined as protected in the mapping file if (fieldDescriptor.isJcrProtected()) { return true; } // Check if the property is defined as protected in the JCR repo // 1. Check if the property already exists and may be queried if (objectNode.hasProperty(jcrName)) { return objectNode.getProperty(jcrName).getDefinition().isProtected(); } // 2. Find a definition for the property and checks its protected status PropertyDefinition definition = getPropertyDefinition(objectNode, jcrName); if (definition != null) { return definition.isProtected(); } // This property is not defined in one of the node types return false; }
public void storeSimpleFields(Session session, Object object, ClassDescriptor classDescriptor, Node objectNode) { try { ValueFactory valueFactory = session.getValueFactory(); Iterator fieldDescriptorIterator = classDescriptor.getFieldDescriptors().iterator(); while (fieldDescriptorIterator.hasNext()) { FieldDescriptor fieldDescriptor = (FieldDescriptor) fieldDescriptorIterator.next(); String fieldName = fieldDescriptor.getFieldName(); String jcrName = fieldDescriptor.getJcrName(); // Of course, Path && UUID fields are not stored as property if (fieldDescriptor.isPath() || fieldDescriptor.isUuid()) { continue; } storeSimpleField(object, objectNode, valueFactory, fieldDescriptor, fieldName, jcrName); } } catch (ValueFormatException vfe) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + ". Value format exception.", vfe); } catch (VersionException ve) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + ". Versioning exception.", ve); } catch (LockException le) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + " on locked node.", le); } catch (ConstraintViolationException cve) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + ". Constraint violation.", cve); } catch (RepositoryException re) { throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Cannot persist properties of object " + object, re); } }
initializedBean = retrieveSimpleField(classDescriptor, node, initializedBean, fieldDescriptor, fieldName, propertyName);
private void storeSimpleField(Object object, Node objectNode, ValueFactory valueFactory, FieldDescriptor fieldDescriptor, String fieldName, String jcrName) throws RepositoryException, PathNotFoundException, ValueFormatException, VersionException, LockException, ConstraintViolationException { boolean protectedProperty = isProtectedProperty(objectNode, fieldDescriptor, jcrName); if (!protectedProperty) { // DO NOT TRY TO WRITE PROTECTED PROPERTIES Object fieldValue = ReflectionUtils.getNestedProperty(object, fieldName); // if the value and if there is a default value for this field => set this default value String defaultValue = fieldDescriptor.getJcrDefaultValue(); if ((fieldValue == null) && (defaultValue != null)) { //Not sure that we have the attribute with the default value in all use cases ReflectionUtils.setNestedProperty(object, fieldName, defaultValue); fieldValue = ReflectionUtils.getNestedProperty(object, fieldName); } AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, object, fieldName); Value value = converter.getValue(valueFactory, fieldValue); checkProperty(objectNode, fieldDescriptor, value); objectNode.setProperty(jcrName, value); } }
/** * * @see org.apache.jackrabbit.ocm.manager.objectconverter.ObjectConverter#update(javax.jcr.Session, * javax.jcr.Node, java.lang.Object) */ public void update(Session session, Node objectNode, Object object) { ClassDescriptor classDescriptor = mapper.getClassDescriptorByClass(ReflectionUtils.getBeanClass(object)); checkNodeType(session, classDescriptor); checkCompatiblePrimaryNodeTypes(session, objectNode, classDescriptor, false); simpleFieldsHelp.storeSimpleFields(session, object, classDescriptor, objectNode); updateBeanFields(session, object, classDescriptor, objectNode); updateCollectionFields(session, object, classDescriptor, objectNode); simpleFieldsHelp.refreshUuidPath(session, classDescriptor, objectNode, object); }
PropertyDefinition propDef = getPropertyDefinition(node, propertyName); AtomicTypeConverter converter = getAtomicTypeConverter(fieldDescriptor, initializedBean, fieldName); Object fieldValue = (propValue != null) ? converter.getObject(propValue) : null; ReflectionUtils.setNestedProperty(initializedBean, fieldName, fieldValue);
private boolean isProtectedProperty(Node objectNode, FieldDescriptor fieldDescriptor, String jcrName) throws RepositoryException, PathNotFoundException { // Return true if the property is defined as protected in the mapping file if (fieldDescriptor.isJcrProtected()) { return true; } // Check if the property is defined as protected in the JCR repo // 1. Check if the property already exists and may be queried if (objectNode.hasProperty(jcrName)) { return objectNode.getProperty(jcrName).getDefinition().isProtected(); } // 2. Find a definition for the property and checks its protected status PropertyDefinition definition = getPropertyDefinition(objectNode, jcrName); if (definition != null) { return definition.isProtected(); } // This property is not defined in one of the node types return false; }
public void storeSimpleFields(Session session, Object object, ClassDescriptor classDescriptor, Node objectNode) { try { ValueFactory valueFactory = session.getValueFactory(); Iterator fieldDescriptorIterator = classDescriptor.getFieldDescriptors().iterator(); while (fieldDescriptorIterator.hasNext()) { FieldDescriptor fieldDescriptor = (FieldDescriptor) fieldDescriptorIterator.next(); String fieldName = fieldDescriptor.getFieldName(); String jcrName = fieldDescriptor.getJcrName(); // Of course, Path && UUID fields are not stored as property if (fieldDescriptor.isPath() || fieldDescriptor.isUuid()) { continue; } storeSimpleField(object, objectNode, valueFactory, fieldDescriptor, fieldName, jcrName); } } catch (ValueFormatException vfe) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + ". Value format exception.", vfe); } catch (VersionException ve) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + ". Versioning exception.", ve); } catch (LockException le) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + " on locked node.", le); } catch (ConstraintViolationException cve) { throw new ObjectContentManagerException("Cannot persist properties of object " + object + ". Constraint violation.", cve); } catch (RepositoryException re) { throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Cannot persist properties of object " + object, re); } }
initializedBean = retrieveSimpleField(classDescriptor, node, initializedBean, fieldDescriptor, fieldName, propertyName);
public InlineBeanConverterImpl(Mapper mapper, ObjectConverter objectConverter, AtomicTypeConverterProvider atomicTypeConverterProvider) { super(mapper, objectConverter, atomicTypeConverterProvider); this.simpleFieldsHelper = new SimpleFieldsHelper(atomicTypeConverterProvider); }
simpleFieldsHelp.storeSimpleFields(session, object, classDescriptor, objectNode); insertBeanFields(session, object, classDescriptor, objectNode); insertCollectionFields(session, object, classDescriptor, objectNode); simpleFieldsHelp.refreshUuidPath(session, classDescriptor, objectNode, object);
public void update(Session session, Node parentNode, BeanDescriptor beanDescriptor, ClassDescriptor beanClassDescriptor, Object object, ClassDescriptor parentClassDescriptor, Object parent) throws ObjectContentManagerException, RepositoryException, JcrMappingException { simpleFieldsHelper.storeSimpleFields(session, object, beanClassDescriptor, parentNode); }
PropertyDefinition propDef = getPropertyDefinition(nt, propertyName); for (int i = 0; mixins != null && i < mixins.length; i++) PropertyDefinition candidate = getPropertyDefinition(mixins[i], propertyName);
public Object getObject(Session session, Node parentNode, BeanDescriptor beanDescriptor, ClassDescriptor beanClassDescriptor, Class beanClass, Object bean) throws ObjectContentManagerException, RepositoryException,JcrMappingException { return simpleFieldsHelper.retrieveSimpleFields(session, beanClassDescriptor, parentNode, bean); }