@SuppressWarnings("unchecked") public final <T> T instance(String item, Object index) { ExtendedObject object; ComplexDocument document; ComplexModelItem cmodelitem = cmodel.getItems().get(item); if (cmodelitem.model != null) { object = new ExtendedObject(cmodelitem.model); if (cmodelitem.index != null) { if (index == null) throw new RuntimeException("indexed item can't have null key"); object.set(cmodelitem.index, index); } add(object); return (T) object; } document = new ComplexDocument(cmodelitem.cmodel); if (cmodelitem.index != null) { document.set(cmodelitem.index, index); } else for (DocumentModelKey key : cmodelitem.cmodel.getHeader().getKeys()) { document.set(key.getModelItemName(), index); break; } add(document); return (T) document; }
private final Object getKey( ComplexModel cmodel, DocumentModel model, ExtendedObject object, String alias) { ComplexModelItem citem = cmodel.getItems().get(alias); if (citem.index != null) return object.get(citem.index); for (DocumentModelKey modelkey : model.getKeys()) return object.get(modelkey.getModelItemName()); return null; }
public ComplexDocument(ComplexModel cmodel) { Map<String, ComplexModelItem> models; this.cmodel = cmodel; header = new ExtendedObject(cmodel.getHeader()); items = new HashMap<>(); models = cmodel.getItems(); for (String name : models.keySet()) items.put(name, new ComplexDocumentItems(models.get(name))); }
public final void add(ComplexDocument document) { String alias; Object key; ComplexModelItem citem; ComplexDocumentItems cdocitems; if (document == null) return; alias = cmodel.getModelItemName(document.getModel().getName()); if (alias == null) throw new RuntimeException("Invalid object model."); citem = cmodel.getItems().get(alias); key = (citem.index == null) ? document.getKey() : document.getHeader().get(citem.index); cdocitems = items.get(alias); if (key == null) key = cdocitems.documents.size(); cdocitems.documents.put(key, document); }
/** * Adds an item to the document * * @param object extended object */ public final void add(ExtendedObject object) { String alias; Object key; DocumentModel model; ComplexModelItem citem; ComplexDocumentItems cdocitems; if (object == null) return; model = object.getModel(); alias = cmodel.getModelItemName(model.getName()); if (alias == null) throw new RuntimeException("Invalid object model."); citem = cmodel.getItems().get(alias); key = (citem.index == null) ? getKey(cmodel, model, object, alias) : object.get(citem.index); cdocitems = items.get(alias); if (key == null) key = cdocitems.objects.size(); items.get(alias).objects.put(key, object); }