All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nakedobjects.plugins.remoting.shared.ObjectEncoderDataStructure Maven / Gradle / Ivy

package org.nakedobjects.plugins.remoting.shared;

import java.util.Hashtable;
import java.util.Vector;

import org.nakedobjects.metamodel.spec.NakedObjectSpecification;
import org.nakedobjects.metamodel.spec.feature.NakedObjectAssociation;

/**
 * Caches a sorted version of the fields for a specified NakedObjectSpecification. This is used to counteract
 * any differences in field ordering that the specification might have across different tiers
 */
class ObjectEncoderDataStructure {
    
    private final Hashtable cache;

    {
        cache = new Hashtable();
    }

    public NakedObjectAssociation[] getFields(final NakedObjectSpecification specification) {
        NakedObjectAssociation[] fields = (NakedObjectAssociation[]) cache.get(specification);
        if (fields == null) {
            fields = loadFields(specification);
            cache.put(specification, fields);
        }
        return fields;
    }

    private NakedObjectAssociation[] loadFields(final NakedObjectSpecification specification) {
        final NakedObjectAssociation[] originalFields = specification.getAssociations();
        final Vector sorted = new Vector(originalFields.length);
        outer: for (int i = 0; i < originalFields.length; i++) {
            final String fieldId = originalFields[i].getId();

            for (int j = 0; j < sorted.size(); j++) {
                final NakedObjectAssociation sortedElement = (NakedObjectAssociation) sorted.elementAt(j);
                final String sortedFieldId = sortedElement.getId();
                if (sortedFieldId.compareTo(fieldId) > 0) {
                    sorted.insertElementAt(originalFields[i], j);
                    continue outer;
                }
            }
            sorted.addElement(originalFields[i]);
        }

        final NakedObjectAssociation[] fields = new NakedObjectAssociation[originalFields.length];
        sorted.copyInto(fields);

        return fields;
    }

}
// Copyright (c) Naked Objects Group Ltd.




© 2015 - 2025 Weber Informatics LLC | Privacy Policy