@Override public QName getRecordTypeName() { return delegate.getRecordTypeName(); }
@Override public Object eval(Record record, TypeManager typeManager) { return formatName(record.getRecordTypeName()); } },
@Override public QName getRecordTypeName(Scope scope) { return delegate.getRecordTypeName(scope); }
@Override public QName getRecordTypeName() { return record.getRecordTypeName(); }
@Override public QName getRecordTypeName(Scope scope) { return record.getRecordTypeName(scope); }
@Override public Object eval(Record record, TypeManager typeManager) { return record.getRecordTypeName().getNamespace(); } },
@Override public Object eval(Record record, TypeManager typeManager) { return record.getRecordTypeName().getName(); } },
@Override public Object eval(Record record, TypeManager typeManager) { return formatNameVersion(record.getRecordTypeName(), record.getRecordTypeVersion()); } },
private static void printRecordType(Record record, Scope scope, PrintStream out) { out.println(" Record type = " + record.getRecordTypeName(scope) + ", version " + record.getRecordTypeVersion(scope)); }
/** * Checks if the given record is an instance of the given record type. This does an "instance of" check, * thus also searches the supertypes for a match. */ public static boolean instanceOf(Record record, SchemaId requestedRecordTypeId, TypeManager typeManager) throws InterruptedException, RepositoryException { if (record.getRecordTypeName() == null) { throw new NullPointerException("record type of record is null"); } RecordType recordType = typeManager.getRecordTypeByName(record.getRecordTypeName(), record.getRecordTypeVersion()); if (recordType.getId().equals(requestedRecordTypeId)) { return true; } // Check the ancestor record types return searchParents(recordType, requestedRecordTypeId, typeManager); }
private Record merge(Record record, Record original) { Record result = original.clone(); if (record.getRecordTypeName() != null) { result.setRecordType(record.getRecordTypeName()); } // TODO merge meta map for(Map.Entry<QName,Object> entry : record.getFields().entrySet()) { result.setField(entry.getKey(), entry.getValue()); } for (QName toDelete : record.getFieldsToDelete()) { result.getFields().remove(toDelete); } return result; }
private static void printRecordValue(PrintStream out, int indent, Record record) { println(out, indent, "Record of type " + record.getRecordTypeName() + ", version " + record.getRecordTypeVersion()); for (Map.Entry<QName, Object> field : record.getFields().entrySet()) { printField(out, indent, field.getKey(), field.getValue()); } }
protected QName resolveNamespace(String name) { if (defaultNamespace != null) { return new QName(defaultNamespace, name); } QName recordTypeName = record.getRecordTypeName(); if (recordTypeName != null) { return new QName(recordTypeName.getNamespace(), name); } throw new IllegalStateException("Namespace could not be resolved for name '" + name + "' since no default namespace was given and no record type is set."); } }
/** * Checks if the given record is an instance of the given record type. This does an "instance of" check, * thus also searches the supertypes for a match. */ public static boolean instanceOf(Record record, QName requestedRecordTypeName, TypeManager typeManager) throws InterruptedException, RepositoryException { if (record.getRecordTypeName() == null) { throw new NullPointerException("record type of record is null"); } if (record.getRecordTypeName().equals(requestedRecordTypeName)) { return true; } // Check the ancestor record types SchemaId searchedRecordType = typeManager.getRecordTypeByName(requestedRecordTypeName, null).getId(); RecordType recordType = typeManager.getRecordTypeByName(record.getRecordTypeName(), record.getRecordTypeVersion()); return searchParents(recordType, searchedRecordType, typeManager); }
private void setRecordTypesAfterUpdate(Record record, Record originalRecord, Set<Scope> changedScopes) { // The returned record object after an update should always contain complete record type information for // all the scopes for (Scope scope : Scope.values()) { // For any unchanged or non-existing scope, we reset the record type information to the one of the // original record, so that the returned record object corresponds to the repository state (= same // as when one would do a fresh read) // // Copy over the original record type of a scope if: // - the scope was unchanged. If it was changed, the record type will already have been filled in // by calculateRecordChanges. // - for the non-versioned scope, only copy it over if none of the scopes changed, because the // record type of the non-versioned scope is always brought up to date in case any scope is changed if (!changedScopes.contains(scope) && (scope != Scope.NON_VERSIONED || changedScopes.isEmpty())) { record.setRecordType(scope, originalRecord.getRecordTypeName(scope), originalRecord.getRecordTypeVersion(scope)); } } }
@Override public RecordBuilder add() throws RecordException { if (mode == Mode.NESTED_RECORD_LIST) { if (records == null) { records = new ArrayList<Record>(); } records.add(createRecord()); // Reset, but keep the record type setting (and the default namespace) QName prevRecordTypeName = record.getRecordTypeName(); Long prevRecordTypeVersion = record.getRecordTypeVersion(); reset(); recordType(prevRecordTypeName, prevRecordTypeVersion); return this; } else { throw new IllegalStateException("add should only be called for a nested list of records, current mode is " + mode); } }
private static void forEachSupertype(Record record, TypeManager typeManager, boolean includeRecordType, SupertypeCallback callback) throws RepositoryException, InterruptedException { RecordType recordType = typeManager.getRecordTypeByName(record.getRecordTypeName(), record.getRecordTypeVersion()); if (includeRecordType) { callback.handle(recordType); } for (Map.Entry<SchemaId, Long> supertype : recordType.getSupertypes().entrySet()) { RecordType supertypeRt = typeManager.getRecordTypeById(supertype.getKey(), supertype.getValue()); callback.handle(supertypeRt); } }
private void checkCreatePreconditions(Record record) throws InvalidRecordException { ArgumentValidator.notNull(record, "record"); if (record.getRecordTypeName() == null) { throw new InvalidRecordException("The recordType cannot be null for a record to be created.", record.getId()); } if (record.getFields().isEmpty()) { throw new InvalidRecordException("Creating an empty record is not allowed", record.getId()); } }
@Override public IdRecord readWithIds(RecordId recordId, Long aLong, List<SchemaId> schemaIds) throws RepositoryException, InterruptedException { Record record = getRecord(recordId); TypeManager typeManager = this.getTypeManager(); Map<SchemaId, QName> map = Maps.newHashMap(); for (QName qname : record.getFields().keySet()) { map.put(typeManager.getFieldTypeByName(qname).getId(), qname); } Map<Scope,SchemaId> recordTypeIds = Maps.newHashMap(); for (Scope scope : Scope.values()) { RecordType recordType = typeManager.getRecordTypeByName(record.getRecordTypeName(scope), record.getVersion()); if (recordType != null) { recordTypeIds.put(scope, recordType.getId()); } } IdRecord idRecord = new IdRecordImpl(record, map, recordTypeIds); return idRecord; }
private Record writeRecord(Record record) throws RepositoryException, InterruptedException{ record = record.cloneRecord(); Record originalRecord = record; ResponseStatus status = ResponseStatus.UP_TO_DATE; if (records.containsKey(record.getId())) { originalRecord = records.get(record.getId()); record = merge(record, originalRecord); if (!originalRecord.equals(record)) { status = ResponseStatus.UPDATED; } } else { status = ResponseStatus.CREATED; } QName recordTypeName = record.getRecordTypeName(); Long recordTypeVersion = getTypeManager().getRecordTypeByName(recordTypeName, null).getVersion(); record.setRecordType(recordTypeName, recordTypeVersion); validateRecord(record, originalRecord, getTypeManager().getRecordTypeByName(recordTypeName, null)); Long version = record.getVersion() == null ? 0l : record.getVersion(); record.setVersion(version + 1); records.put(record.getId(), record.cloneRecord()); record.setResponseStatus(status); return record; }