use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.
the class BatchTest method testMultiValuedProperty.
public void testMultiValuedProperty() throws RepositoryException {
NodeId nid = getNodeId(testPath);
Name propName = resolver.getQName("mvProperty2");
QValue[] vs = new QValue[] { rs.getQValueFactory().create(111), rs.getQValueFactory().create(222), rs.getQValueFactory().create(333) };
Batch b = rs.createBatch(si, nid);
b.addProperty(nid, propName, vs);
rs.submit(b);
PropertyInfo pi = rs.getPropertyInfo(si, getPropertyId(nid, propName));
assertTrue(pi.isMultiValued());
assertEquals(Arrays.asList(vs), Arrays.asList(pi.getValues()));
assertEquals(PropertyType.LONG, pi.getType());
}
use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.
the class BatchTest method testSetWeakReferenceValue.
public void testSetWeakReferenceValue() throws RepositoryException {
NodeId nid = getNodeId(testPath);
NodeInfo nInfo = rs.getNodeInfo(si, nid);
if (!Arrays.asList(nInfo.getMixins()).contains(NameConstants.MIX_REFERENCEABLE)) {
Batch b = rs.createBatch(si, nid);
b.setMixins(nid, new Name[] { NameConstants.MIX_REFERENCEABLE });
rs.submit(b);
}
String ref = rs.getNodeInfo(si, nid).getId().getUniqueID();
Name propName = resolver.getQName("weakRefProp");
QValue v = rs.getQValueFactory().create(ref, PropertyType.WEAKREFERENCE);
Batch b = rs.createBatch(si, nid);
b.addProperty(nid, propName, v);
rs.submit(b);
PropertyInfo pi = rs.getPropertyInfo(si, getPropertyId(nid, propName));
assertFalse(pi.isMultiValued());
assertEquals(v, pi.getValues()[0]);
assertEquals(PropertyType.WEAKREFERENCE, pi.getType());
pi = getPropertyInfo(nid, propName);
assertEquals(v, pi.getValues()[0]);
assertEquals(PropertyType.WEAKREFERENCE, pi.getType());
}
use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.
the class RepositoryServiceImpl method getParentId.
private NodeId getParentId(String baseUri, DavPropertySet propSet, SessionInfo sessionInfo) throws RepositoryException {
NodeId parentId = null;
DavProperty<?> p = propSet.get(JcrRemotingConstants.JCR_PARENT_LN, ItemResourceConstants.NAMESPACE);
if (p != null) {
HrefProperty parentProp = new HrefProperty(p);
String parentHref = parentProp.getHrefs().get(0);
if (parentHref != null && parentHref.length() > 0) {
parentId = uriResolver.getNodeId(resolve(baseUri, parentHref), sessionInfo);
}
}
return parentId;
}
use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.
the class RepositoryServiceImpl method buildEventList.
private List<Event> buildEventList(Element bundleElement, SessionInfoImpl sessionInfo, String baseUri) throws RepositoryException {
List<Event> events = new ArrayList<Event>();
ElementIterator eventElementIterator = DomUtil.getChildren(bundleElement, ObservationConstants.N_EVENT);
String userId = null;
// get user id from enclosing Atom entry element in case this was a feed
if (DomUtil.matches(bundleElement, AtomFeedConstants.N_ENTRY)) {
Element authorEl = DomUtil.getChildElement(bundleElement, AtomFeedConstants.N_AUTHOR);
Element nameEl = authorEl != null ? DomUtil.getChildElement(authorEl, AtomFeedConstants.N_NAME) : null;
if (nameEl != null) {
userId = DomUtil.getTextTrim(nameEl);
}
}
while (eventElementIterator.hasNext()) {
Element evElem = eventElementIterator.nextElement();
Element typeEl = DomUtil.getChildElement(evElem, ObservationConstants.N_EVENTTYPE);
EventType[] et = DefaultEventType.createFromXml(typeEl);
if (et.length == 0 || et.length > 1) {
// should not occur.
log.error("Ambiguous event type definition: expected one single event type.");
continue;
}
String href = DomUtil.getChildTextTrim(evElem, XML_HREF, NAMESPACE);
int type = EventUtil.getJcrEventType(et[0].getName());
Path eventPath = null;
ItemId eventId = null;
NodeId parentId = null;
if (href != null) {
href = resolve(baseUri, href);
try {
eventPath = uriResolver.getQPath(href, sessionInfo);
} catch (RepositoryException e) {
// should not occur
log.error("Internal error while building Event: ()", e.getMessage());
continue;
}
boolean isForNode = (type == Event.NODE_ADDED || type == Event.NODE_REMOVED || type == Event.NODE_MOVED);
try {
if (isForNode) {
eventId = uriResolver.getNodeIdAfterEvent(href, sessionInfo, type == Event.NODE_REMOVED);
} else {
eventId = uriResolver.getPropertyId(href, sessionInfo);
}
} catch (RepositoryException e) {
if (isForNode) {
eventId = idFactory.createNodeId((String) null, eventPath);
} else {
try {
eventId = idFactory.createPropertyId(idFactory.createNodeId((String) null, eventPath.getAncestor(1)), eventPath.getName());
} catch (RepositoryException e1) {
log.warn("Unable to build event itemId: {}", e.getMessage());
}
}
}
String parentHref = Text.getRelativeParent(href, 1, true);
try {
parentId = uriResolver.getNodeId(parentHref, sessionInfo);
} catch (RepositoryException e) {
log.warn("Unable to build event parentId: {}", e.getMessage());
}
}
if (userId == null) {
// user id not retrieved from container
userId = DomUtil.getChildTextTrim(evElem, ObservationConstants.N_EVENTUSERID);
}
events.add(new EventImpl(eventId, eventPath, parentId, type, userId, evElem, getNamePathResolver(sessionInfo), getQValueFactory()));
}
return events;
}
use of org.apache.jackrabbit.spi.NodeId in project jackrabbit by apache.
the class RepositoryServiceImpl method getItemInfos.
/**
* @see RepositoryService#getItemInfos(SessionInfo, ItemId)
*/
@Override
public Iterator<? extends ItemInfo> getItemInfos(SessionInfo sessionInfo, ItemId itemId) throws RepositoryException {
if (!itemId.denotesNode()) {
PropertyInfo propertyInfo = getPropertyInfo(sessionInfo, (PropertyId) itemId);
return Iterators.singleton(propertyInfo);
} else {
NodeId nodeId = (NodeId) itemId;
Path path = getPath(itemId, sessionInfo);
String uri = getURI(path, sessionInfo);
int depth = batchReadConfig.getDepth(path, this.getNamePathResolver(sessionInfo));
HttpGet request = new HttpGet(uri + "." + depth + ".json");
HttpResponse response = null;
try {
response = executeRequest(sessionInfo, request);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == DavServletResponse.SC_OK) {
HttpEntity entity = response.getEntity();
if (entity.getContentLength() == 0) {
// no JSON response -> no such node on the server
throw new ItemNotFoundException("No such item " + nodeId);
}
NamePathResolver resolver = getNamePathResolver(sessionInfo);
NodeInfoImpl nInfo = new NodeInfoImpl(nodeId, path);
ItemInfoJsonHandler handler = new ItemInfoJsonHandler(resolver, nInfo, getRootURI(sessionInfo), getQValueFactory(sessionInfo), getPathFactory(), getIdFactory());
JsonParser ps = new JsonParser(handler);
ps.parse(entity.getContent(), ContentType.get(entity).getCharset().name());
Iterator<? extends ItemInfo> it = handler.getItemInfos();
if (!it.hasNext()) {
throw new ItemNotFoundException("No such node " + uri);
}
return handler.getItemInfos();
} else {
throw ExceptionConverter.generate(new DavException(statusCode, "Unable to retrieve NodeInfo for " + uri), request);
}
} catch (IOException e) {
log.error("Internal error while retrieving NodeInfo.", e);
throw new RepositoryException(e.getMessage());
} finally {
request.releaseConnection();
}
}
}
Aggregations