@Override protected AbstractProvider<Node, JcrNodeModel> newProvider(IFieldDescriptor descriptor, ITypeDescriptor type, IModel<Node> nodeModel) { try { JcrNodeModel prototype = (JcrNodeModel) getTemplateEngine().getPrototype(type); return new ChildNodeProvider(descriptor, prototype, new JcrItemModel<>(nodeModel.getObject())); } catch (TemplateEngineException ex) { log.warn("Could not find prototype", ex); return null; } }
@Override protected void loadElements() { if (elements != null) { return; } elements = new LinkedList<>(); try { Node node = (Node) getItemModel().getObject(); if (node != null) { // expand the name-pattern NodeIterator iterator = node.getNodes(descriptor.getPath()); while (iterator.hasNext()) { Node child = iterator.nextNode(); // add child if it is not excluded. // TODO: filter on node type addTemplate(new JcrItemModel(child)); } } } catch (RepositoryException ex) { log.error(ex.getMessage()); } }
@Override public void remove(JcrNodeModel model) { load(); Iterator<JcrNodeModel> iterator = elements.iterator(); while (iterator.hasNext()) { JcrNodeModel currentModel = iterator.next(); if (model.equals(currentModel)) { iterator.remove(); try { JcrItemModel itemModel = model.getItemModel(); if (itemModel.exists()) { Item item = (Item) itemModel.getObject(); // remove the item log.info("removing item {}", item.getPath()); item.remove(); } else { log.info("item {} does not exist", itemModel.getPath()); } } catch (RepositoryException ex) { log.error(ex.getMessage(), ex); } } else { currentModel.detach(); } } }
Iterator<? extends IModel> iter; if (fieldType.isNode()) { ChildNodeProvider provider = new ChildNodeProvider(field, null, nodeModel.getItemModel()); iter = provider.iterator(element.getIndex(), 1); } else { PropertyValueProvider provider = new PropertyValueProvider(field, null, nodeModel.getItemModel());
@Override public void addNew() { load(); try { Node parent = (Node) getItemModel().getObject(); if (parent != null) { Node node; if (prototype != null) { HippoSession session = (HippoSession) UserSession.get().getJcrSession(); node = JcrUtils.copy(session, prototype.getNode().getPath(), parent.getPath() + "/" + descriptor.getPath()); } else { log.info("No prototype available to initialize child node for field {} with type {}", descriptor .getName(), descriptor.getTypeDescriptor().getType()); node = parent.addNode(descriptor.getPath(), descriptor.getTypeDescriptor().getType()); } elements.addLast(new JcrNodeModel(node)); } else { log.warn("No parent available to initialize child node"); } } catch (RepositoryException ex) { log.error("Error creating child node", ex); } }
@Override public void moveUp(JcrNodeModel model) { load(); Iterator<JcrNodeModel> iterator = elements.iterator(); JcrNodeModel predecessor = null; if (predecessor != null) { try { Node parent = (Node) getItemModel().getObject(); String srcPath = model.getNode().getName() + (model.getNode().getIndex() > 1 ? "[" + model.getNode().getIndex() + "]" : "");
AbstractProvider<?, ? extends IModel> provider; if (fieldType.isNode()) { provider = new ChildNodeProvider(field, null, nodeModel.getItemModel()); } else { JcrItemModel itemModel = new JcrItemModel(nodeModel.getItemModel().getPath() + "/" + field.getPath(), true);