public JdbcObjectReferenceFieldMapping(final ObjectAssociation field) { super(columnName(field), field.getSpecification()); this.field = field; }
protected String determineColumnName(final ObjectAssociation objectAssociation) { return objectAssociation.getSpecification().getShortIdentifier(); }
@Override public ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) { final String encodedValue = results.getString(columnName); if (encodedValue == null) { return null; } // convert date to yyyymmddhhmm final String year = encodedValue.substring(0, 4); final String month = encodedValue.substring(5, 7); final String day = encodedValue.substring(8, 10); final String hour = encodedValue.substring(11, 13); final String minute = encodedValue.substring(14, 16); final String valueString = year + month + day + "T" + hour + minute + "00000"; return field.getSpecification().getFacet(EncodableFacet.class).fromEncodedString(valueString); }
public ReversedAutoAssociationMapper(final String elemenType, final ObjectAssociation field, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectLookup) { super(elemenType, parameterBase, lookup, objectLookup); this.field = field; idMapping = lookup.createMapping(field.getSpecification()); versionMapping = lookup.createVersionMapping(); setUpFieldMappers(); }
@Override public ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) { final String encodedValue = results.getString(columnName); if (encodedValue == null) { return null; } final EncodableFacet facet = field.getSpecification().getFacet(EncodableFacet.class); return facet.fromEncodedString(encodedValue); }
@Override protected String determineColumnName(final ObjectAssociation objectAssociation) { if (objectAssociation instanceof OneToManyAssociationImpl) { final OneToManyAssociationImpl fkAssoc = (OneToManyAssociationImpl) objectAssociation; final FacetedMethod peer = fkAssoc.getFacetedMethod(); final String fullClassName = peer.getIdentifier().getClassName(); final int lastPos = fullClassName.lastIndexOf('.'); return fullClassName.substring(lastPos + 1) + "_" + fkAssoc.getId(); } else { return objectAssociation.getSpecification().getShortIdentifier(); } } }
@Override public void resolveField(final ObjectAdapter adapter, final ObjectAssociation field) { if (field.getSpecification().isCollectionOrIsAggregated()) { return; } final ObjectAdapter referenceAdapter = field.get(adapter); if (referenceAdapter != null && referenceAdapter.getResolveState().isResolved()) { return; } if (referenceAdapter == null || !referenceAdapter.isPersistent()) { return; } if (LOG.isInfoEnabled()) { LOG.info("resolveField on server: " + adapter + "/" + field.getId()); } resolveFieldFromPersistenceLayer(adapter, field); }
private void updateField(final ObjectAdapter objectAdapter, final ObjectData objectData, final ObjectAssociation objectAssoc) { final Object fieldData = objectData.getEntry(objectAssoc.getId()); if (objectAssoc.isOneToManyAssociation()) { updateOneToManyAssociation(objectAdapter, (OneToManyAssociation) objectAssoc, (CollectionData) fieldData); } else if (objectAssoc.getSpecification().containsFacet(EncodableFacet.class)) { final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = facet.fromEncodedString((String) fieldData); ((OneToOneAssociation) objectAssoc).initAssociation(objectAdapter, value); } else if (objectAssoc.isOneToOneAssociation()) { updateOneToOneAssociation(objectAdapter, (OneToOneAssociation) objectAssoc, (Data) fieldData); } }
private void updateField(final ObjectAdapter object, final ObjectData od, final ObjectAssociation field) { final Object fieldData = od.getEntry(field.getId()); if (field.isOneToManyAssociation()) { updateOneToManyAssociation(object, (OneToManyAssociation) field, (CollectionData) fieldData); } else if (field.getSpecification().containsFacet(EncodableFacet.class)) { final EncodableFacet facet = field.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = facet.fromEncodedString((String) fieldData); ((OneToOneAssociation) field).initAssociation(object, value); } else if (field.isOneToOneAssociation()) { updateOneToOneAssociation(object, (OneToOneAssociation) field, (Data) fieldData); } }
@Override public ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) { ObjectAdapter restoredValue; final java.util.Date javaDateValue = results.getJavaDateOnly(columnName); final Class<?> correspondingClass = field.getSpecification().getCorrespondingClass(); if (correspondingClass == java.util.Date.class || correspondingClass == java.sql.Date.class) { // 2011-04-08 = 1270684800000 restoredValue = adapterManager.adapterFor(javaDateValue); } else if (correspondingClass == Date.class) { // 2010-03-05 = 1267747200000 Date dateValue; dateValue = new Date(javaDateValue); restoredValue = adapterManager.adapterFor(dateValue); } else { throw new PersistFailedException("Unhandled date type: " + correspondingClass.getCanonicalName()); } return restoredValue; }
@Override public FieldMapping createFieldMapping(final ObjectSpecification object, final ObjectAssociation field) { if (field.getSpecification().isAbstract()) { final String dataType = getTypeOverride(object, field, Defaults.TYPE_LONG_STRING()); return new JdbcAbstractReferenceFieldMapping(field, dataType); } return new JdbcObjectReferenceFieldMapping(field); } }
@Override public ObjectAdapter setFromDBColumn(final Results results, final String columnName, final ObjectAssociation field) { /* * Long hour = Long.decode(encodedValue.substring(0, 2)); Long minute = * Long.decode(encodedValue.substring(3, 5)); Long millis = (minute + * hour * 60) * 60 * 1000; String valueString = "T" + * Long.toString(millis); return * field.getSpecification().getFacet(EncodableFacet.class) * .fromEncodedString(valueString); */ ObjectAdapter restoredValue; final Class<?> correspondingClass = field.getSpecification().getCorrespondingClass(); if (correspondingClass == Time.class) { final Time timeValue = results.getTime(columnName); restoredValue = IsisContext.getPersistenceSession().getAdapterManager().adapterFor(timeValue); } else { throw new PersistFailedException("Unhandled time type: " + correspondingClass.getCanonicalName()); } return restoredValue; }
public FieldMapping createMapping(final ObjectSpecification object, final ObjectAssociation field) { final ObjectSpecification spec = field.getSpecification(); FieldMappingFactory factory = fieldMappings.get(spec); if (factory != null) { return factory.createFieldMapping(object, field); } else if (spec.isEncodeable()) { factory = new JdbcGeneralValueMapper.Factory(Defaults.TYPE_DEFAULT()); addFieldMappingFactory(spec, factory); return factory.createFieldMapping(object, field); } else {// if (true /* TODO test for reference */) { factory = referenceFieldMappingfactory; addFieldMappingFactory(spec, factory); return factory.createFieldMapping(object, field); // } else { // throw new IsisException("No mapper for " + spec + // " (no default mapper)"); } }
private void createFieldData(final ObjectAdapter object, final ObjectData data, final ObjectAssociation field) { Object fieldData; if (field.isOneToManyAssociation()) { final ObjectAdapter coll = field.get(object); fieldData = createCollectionData(coll); } else if (field.getSpecification().isEncodeable()) { final EncodableFacet facet = field.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = field.get(object); fieldData = facet.toEncodedString(value); } else if (field.isOneToOneAssociation()) { final ObjectAdapter ref = ((OneToOneAssociation) field).get(object); fieldData = createReferenceData(ref); } else { throw new UnknownTypeException(field); } data.addField(field.getId(), fieldData); }
private void createAssociationData(final ObjectAdapter adapter, final ObjectData data, final ObjectAssociation objectAssoc) { Object assocData; if (objectAssoc.isOneToManyAssociation()) { final ObjectAdapter collAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK); assocData = createCollectionData(collAdapter); } else if (objectAssoc.getSpecification().isEncodeable()) { final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class); final ObjectAdapter value = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK); assocData = facet.toEncodedString(value); } else if (objectAssoc.isOneToOneAssociation()) { final ObjectAdapter referencedAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK); assocData = createReferenceData(referencedAdapter); } else { throw new UnknownTypeException(objectAssoc); } data.addField(objectAssoc.getId(), assocData); }
protected ForeignKeyCollectionMapper(final FieldMappingLookup lookup, final AbstractAutoMapper abstractAutoMapper, final ObjectAssociation field) { super(lookup, abstractAutoMapper, field.getSpecification().getFullIdentifier()); this.field = field; objectMapperLookup2 = null; idMapping = lookup.createIdMapping(); versionMapping = lookup.createVersionMapping(); setColumnName(determineColumnName(field)); foreignKeyName = Sql.sqlName("fk_" + getColumnName()); foreignKeyName = Sql.identifier(foreignKeyName); foreignKeyMapping = lookup.createMapping(columnName, specification); }
public ForeignKeyCollectionMapper(final ObjectAssociation objectAssociation, final String parameterBase, final FieldMappingLookup lookup, final ObjectMappingLookup objectMapperLookup) { super(objectAssociation.getSpecification().getFullIdentifier(), parameterBase, lookup, objectMapperLookup); this.field = objectAssociation; objectMapperLookup2 = objectMapperLookup; idMapping = lookup.createIdMapping(); versionMapping = lookup.createVersionMapping(); setColumnName(determineColumnName(objectAssociation)); foreignKeyName = Sql.sqlName("fk_" + getColumnName()); foreignKeyName = Sql.identifier(foreignKeyName); foreignKeyMapping = lookup.createMapping(columnName, specification); }
@Override public void process(final Request request) { final RequestContext context = request.getContext(); if (context.isDebugDisabled()) { return; } if (request.isRequested("always") || context.getDebug() == RequestContext.Debug.ON) { request.appendHtml("<div class=\"debug\">"); request.appendHtml("<pre>"); final String id = request.getOptionalProperty("object"); final ObjectAdapter object = context.getMappedObjectOrResult(id); final ObjectSpecification specification = object.getSpecification(); request.appendHtml(specification.getSingularName() + " (" + specification.getFullIdentifier() + ") \n"); final List<ObjectAssociation> fields = specification.getAssociations(); for (int i = 0; i < fields.size(); i++) { request.appendHtml(" " + fields.get(i).getName() + " (" + fields.get(i).getSpecification().getSingularName() + ") \n"); } request.appendHtml("</pre>"); request.appendHtml("</div>"); } }
private void addObjectAndAssociates(final ObjectAdapter adapter) { if (objects.contains(adapter.getObject())) { return; } objects.add(adapter.getObject()); final ObjectSpecification adapterSpec = adapter.getSpecification(); final List<ObjectAssociation> associations = adapterSpec.getAssociations(); for (final ObjectAssociation association : associations) { if (association.isNotPersisted()) { continue; } final ObjectAdapter associatedObject = association.get(adapter); final boolean isEmpty = association.isEmpty(adapter); if (isEmpty) { continue; } if (association.isOneToManyAssociation()) { final CollectionFacet facet = associatedObject.getSpecification().getFacet(CollectionFacet.class); for (final ObjectAdapter element : facet.iterable(associatedObject)) { addObjectAndAssociates(element); } } else if (association.isOneToOneAssociation() && !association.getSpecification().isParseable()) { addObjectAndAssociates(associatedObject); } } }
@Override public void resolveField(final ObjectAdapter objectAdapter, final ObjectAssociation field) { if (field.isNotPersisted() || field.isOneToManyAssociation() || field.getSpecification().isCollectionOrIsAggregated()) { return; } final ObjectAdapter referenceAdapter = field.get(objectAdapter); if (referenceAdapter == null || referenceAdapter.getResolveState().isResolved()) { return; } if (!referenceAdapter.isPersistent()) { return; } if (LOG.isInfoEnabled()) { // don't log object - it's toString() may use the unresolved field // or unresolved collection LOG.info("resolve field " + objectAdapter.getSpecification().getShortIdentifier() + "." + field.getId() + ": " + referenceAdapter.getSpecification().getShortIdentifier() + " " + referenceAdapter.getResolveState().code() + " " + referenceAdapter.getOid()); } resolveFieldFromPersistenceLayer(objectAdapter, field); }