use of org.openntf.domino.graph2.builtin.search.Value in project org.openntf.domino by OpenNTF.
the class DElementStore method removeEdge.
/*public Element getElement_OLD(final Object id, final Class<? extends Element> type) throws IllegalStateException {
Element result = null;
Element chk = getCachedElement(id, Element.class);
if (chk != null) {
result = chk;
} else {
boolean isProxiedSource = false;
Object delegate = null;
if (id instanceof NoteCoordinate && isProxied()) {
NoteCoordinate nc = (NoteCoordinate) id;
if (getStoreKey().equals(nc.getReplicaLong())) {
//this is a request for a vertex out of the proxied store, not the proxy itself
Database db = (Database) getStoreDelegate();
String unid = nc.getUNID();
delegate = db.getDocumentByUNID(unid, true);
if (delegate != null) {
isProxiedSource = true;
}
}
}
if (delegate == null) {
Object localkey = localizeKey(id);
delegate = findElementDelegate(localkey);
}
if (delegate != null) {
if (delegate instanceof Element) {
result = (Element) delegate;
} else if (delegate instanceof Document) {
if (isProxiedSource) {
DVertex vertex = new DVertex(getConfiguration().getGraph(), (Document) delegate);
result = vertex;
} else if (((Document) delegate).hasItem("$Index") || ((Document) delegate).hasItem("$Collation")) {
DVertex vertex = new DVertex(getConfiguration().getGraph(), (Document) delegate);
result = vertex;
} else {
Object typeChk = ((Document) delegate).get(org.openntf.domino.graph2.DElement.TYPE_FIELD);
String strChk = org.openntf.domino.utils.TypeUtils.toString(typeChk);
if (org.openntf.domino.graph2.DVertex.GRAPH_TYPE_VALUE.equals(strChk)) {
DVertex vertex = new DVertex(getConfiguration().getGraph(), (Document) delegate);
result = vertex;
} else if (org.openntf.domino.graph2.DEdge.GRAPH_TYPE_VALUE.equals(strChk)) {
DEdge edge = new DEdge(getConfiguration().getGraph(), (Document) delegate);
result = edge;
} else {
DVertex vertex = new DVertex(getConfiguration().getGraph(), (Document) delegate);
result = vertex;
}
}
} else if (delegate instanceof ViewEntry) {
if (id instanceof ViewEntryCoordinate) {
ViewEntryCoordinate vec = (ViewEntryCoordinate) id;
String entryType = vec.getEntryType();
if (entryType.startsWith("E")) {
DEdge edge = new DEntryEdge(getConfiguration().getGraph(), (ViewEntry) delegate, (ViewEntryCoordinate) id, this);
result = edge;
} else if (entryType.startsWith("V")) {
ViewEntry entry = (ViewEntry) delegate;
if (entry.isCategory()) {
Map<String, Object> delegateMap = new LinkedHashMap<String, Object>();
delegateMap.put("value", entry.getCategoryValue());
delegateMap.put("position", entry.getPosition());
delegateMap.put("noteid", entry.getNoteID());
DCategoryVertex vertex = new DCategoryVertex(getConfiguration().getGraph(), delegateMap,
entry.getParentView());
vertex.delegateKey_ = vec;
result = vertex;
} else {
System.out.println("TEMP DEBUG ViewVertex entry is not a category");
}
}
} else {
System.out.println("TEMP DEBUG ViewEntry's id is not a ViewEntryCoordinate. It's a " + id.getClass().getName());
}
}
getElementCache().put(result.getId(), result);
getKeyMap().put(id, (NoteCoordinate) result.getId()); //TODO shouldn't force NoteCoordinate, but it covers all current use cases
}
}
return result;
}*/
// @Override
// public Element getElement(final Object id) throws IllegalStateException {
// return getElement(id, Element.class);
// }
// @Override
// public Edge getEdge(final Object id) {
// return (Edge) getElement(id, Edge.class);
// }
@Override
public void removeEdge(final Edge edge) {
if (edge instanceof DEdge) {
if (org.openntf.domino.ViewEntry.class.equals(((DEdge) edge).getDelegateType())) {
throw new UnsupportedOperationException("ViewEntry edges cannot be removed.");
}
}
startTransaction(edge);
Vertex in = edge.getVertex(Direction.IN);
if (in != null) {
((DVertex) in).removeEdge(edge);
}
Vertex out = edge.getVertex(Direction.OUT);
if (out != null) {
((DVertex) out).removeEdge(edge);
}
removeCache(edge);
((DEdge) edge)._remove();
}
use of org.openntf.domino.graph2.builtin.search.Value in project org.openntf.domino by OpenNTF.
the class FramedEdgeList method applyFilter.
public FramedEdgeList<T> applyFilter(final String key, final Object value) {
if ("lookup".equals(key) && list_ instanceof DEdgeEntryList && value instanceof List) {
// System.out.println("TEMP DEBUG dealing with DEdgeEntryList");
((DEdgeEntryList) list_).initEntryList((List<CharSequence>) value);
return this;
}
if ("filter".equals(key) && list_ instanceof DEdgeEntryList && value instanceof List) {
((DEdgeEntryList) list_).filterEntryList((List<CharSequence>) value);
return this;
}
DEdgeList edgeList = new DEdgeList((DVertex) sourceVertex_);
if (this.size() > 0) {
for (EdgeFrame edge : this) {
try {
if ("@type".equals(key)) {
if (isType(edge, TypeUtils.toString(value))) {
edgeList.add(edge.asEdge());
}
} else {
Object edgeVal = null;
Method crystal = getGetters(edge).get(new CaseInsensitiveString(key));
if (crystal != null) {
try {
edgeVal = crystal.invoke(edge, (Object[]) null);
} catch (Exception e) {
edgeVal = edge.asEdge().getProperty(key);
}
} else {
System.err.println("No method found for key " + key);
}
if (value.equals(TypeUtils.toString(edgeVal))) {
edgeList.add(edge.asEdge());
}
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
FramedEdgeList<T> result = new FramedEdgeList<T>(framedGraph, sourceVertex_, edgeList, this.kind);
return result;
}
use of org.openntf.domino.graph2.builtin.search.Value in project org.openntf.domino by OpenNTF.
the class IndexStore method saveValueLocationMap.
@Override
public void saveValueLocationMap(final Object mapKey, final Map<CharSequence, Map<CharSequence, Set<CharSequence>>> fullMap, final DocumentScanner scanner, final ScanStatus status, final long doccount, final long docstoprocess) {
setLastIndexDate(mapKey, scanner.getLastDocModDate(), status, doccount, docstoprocess);
Set<CharSequence> keySet = fullMap.keySet();
if (keySet.size() > 0) {
for (CharSequence cis : keySet) {
Map<CharSequence, Set<CharSequence>> tlValue = fullMap.get(cis);
String strValue = cis.toString();
Value valueV = (Value) getGraph().addVertex(strValue.toLowerCase(), Value.class);
// if (valueV == null) {
// valueV = (Value) getGraph().addVertex(strValue.toLowerCase(), Value.class);
// }
DVertex dv = (DVertex) valueV.asVertex();
String itemName = VALUE_MAP_PREFIX + String.valueOf(mapKey);
dv.setProperty(itemName, tlValue);
valueV.setValue(strValue);
Value.Utils.processValue(valueV, getGraph(), scanner.isCaseSensitive(), false);
}
} else {
// System.out.println("DEBUG: keyset was empty for index tokens");
}
}
use of org.openntf.domino.graph2.builtin.search.Value in project org.openntf.domino by OpenNTF.
the class JsonSearchAdapter method getJsonProperty.
@SuppressWarnings("unlikely-arg-type")
@Override
public Object getJsonProperty(final String paramKey) {
Object result = null;
Object frame = getFrame();
if (frame != null) {
CaseInsensitiveString key = new CaseInsensitiveString(paramKey);
if (key.equals("@id")) {
if (frame instanceof VertexFrame) {
result = ((VertexFrame) frame).asVertex().getId().toString();
} else if (frame instanceof EdgeFrame) {
result = ((EdgeFrame) frame).asEdge().getId().toString();
}
} else if (key.equals("@proxyid")) {
if (frame instanceof VertexFrame) {
Vertex v = ((VertexFrame) frame).asVertex();
if (v instanceof DProxyVertex) {
result = ((DProxyVertex) v).getProperty(DProxyVertex.PROXY_ITEM, String.class);
}
}
} else if (key.equals("@debug")) {
Map<String, String> debugMap = new LinkedHashMap<String, String>();
debugMap.put("frameIdentity", String.valueOf(System.identityHashCode(this)));
if (frame instanceof VertexFrame) {
Vertex v = ((VertexFrame) frame).asVertex();
debugMap.put("vertexIdentity", String.valueOf(System.identityHashCode(v)));
} else if (frame instanceof EdgeFrame) {
Edge e = ((EdgeFrame) frame).asEdge();
debugMap.put("edgeIdentity", String.valueOf(System.identityHashCode(e)));
}
result = debugMap;
} else if (key.equals("@type")) {
if (frame instanceof VertexFrame) {
result = type_;
} else if (frame instanceof EdgeFrame) {
result = type_;
}
} else if (key.equals("@in") && frame instanceof EdgeFrame) {
if (getInProperties() == null) {
// why not just make a frame adapter with the vertex?
// because that's another I/O operation. We already have the
// information needed to
DEdge dedge = (DEdge) ((EdgeFrame) frame).asEdge();
Map<String, String> minProps = new LinkedHashMap<String, String>();
minProps.put("@id", dedge.getVertexId(Direction.IN).toString());
Class<?> inType = graph_.getTypeRegistry().getInType(type_);
if (inType == null) {
minProps.put("@type", "Vertex");
} else {
minProps.put("@type", inType.getName());
}
result = minProps;
} else {
ParamMap inMap = new ParamMap();
inMap.put(Parameters.PROPS, CaseInsensitiveString.toStrings(getInProperties()));
if (getIncludeEdges()) {
inMap.put(Parameters.EDGES, EMPTY_STRINGS);
}
if (getIncludeCounts()) {
inMap.put(Parameters.COUNTS, EMPTY_STRINGS);
}
Method inMethod = graph_.getTypeRegistry().getIn(type_);
if (inMethod != null) {
try {
Object raw = inMethod.invoke(frame, (Object[]) null);
if (raw instanceof Term) {
result = new JsonSearchAdapter(graph_, (Term) raw, inMap, isCollectionRoute_);
} else if (raw instanceof Value) {
result = new JsonSearchAdapter(graph_, (Value) raw, inMap, isCollectionRoute_);
} else if (raw instanceof RichTextReference) {
result = new JsonSearchAdapter(graph_, (RichTextReference) raw, inMap, isCollectionRoute_);
} else if (raw instanceof VertexFrame) {
result = new JsonFrameAdapter(graph_, (VertexFrame) raw, inMap, isCollectionRoute_);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (key.equals("@out") && frame instanceof EdgeFrame) {
if (getOutProperties() == null) {
// why not just make a frame adapter with the vertex?
// because that's another I/O operation. We already have the
// information needed to
DEdge dedge = (DEdge) ((EdgeFrame) frame).asEdge();
Map<String, String> minProps = new LinkedHashMap<String, String>();
minProps.put("@id", dedge.getVertexId(Direction.OUT).toString());
Class<?> outType = graph_.getTypeRegistry().getOutType(type_);
if (outType == null) {
minProps.put("@type", "Vertex");
} else {
minProps.put("@type", outType.getName());
}
result = minProps;
} else {
ParamMap outMap = new ParamMap();
outMap.put(Parameters.PROPS, CaseInsensitiveString.toStrings(getOutProperties()));
if (getIncludeEdges()) {
outMap.put(Parameters.EDGES, EMPTY_STRINGS);
}
if (getIncludeCounts()) {
outMap.put(Parameters.COUNTS, EMPTY_STRINGS);
}
Method outMethod = graph_.getTypeRegistry().getOut(type_);
if (outMethod != null) {
try {
Object raw = outMethod.invoke(frame, (Object[]) null);
if (raw instanceof Term) {
result = new JsonSearchAdapter(graph_, (Term) raw, outMap, isCollectionRoute_);
} else if (raw instanceof Value) {
result = new JsonSearchAdapter(graph_, (Value) raw, outMap, isCollectionRoute_);
} else if (raw instanceof RichTextReference) {
result = new JsonSearchAdapter(graph_, (RichTextReference) raw, outMap, isCollectionRoute_);
} else if (raw instanceof VertexFrame) {
result = new JsonFrameAdapter(graph_, (VertexFrame) raw, outMap, isCollectionRoute_);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (key.equals("@edges")) {
Map<String, Integer> edgeCounts = new LinkedHashMap<String, Integer>();
Set<CaseInsensitiveString> counterKeys = getCounters().keySet();
for (CaseInsensitiveString label : counterKeys) {
Method crystal = getCounters().get(label);
if (crystal != null) {
try {
Object raw = crystal.invoke(getFrame(), (Object[]) null);
if (raw instanceof Integer) {
edgeCounts.put(label.toString(), (Integer) raw);
} else {
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
}
}
result = edgeCounts;
} else if (key.equals("@actions")) {
List<CaseInsensitiveString> actionList = new ArrayList<CaseInsensitiveString>();
Set<CaseInsensitiveString> actionNames = getActions().keySet();
for (CaseInsensitiveString name : actionNames) {
actionList.add(name);
}
result = actionList;
} else if (key.startsWith("@counts")) {
String label = key.toString().substring("@counts".length());
Method crystal = getCounters().get(new CaseInsensitiveString(label));
if (crystal != null) {
try {
Object raw = crystal.invoke(getFrame(), (Object[]) null);
if (raw instanceof Integer) {
result = raw;
} else {
}
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
}
} else if (key.equals("@columninfo")) {
if (frame instanceof ViewVertex) {
Map<String, String> columnInfo = new LinkedHashMap<String, String>();
if (frame instanceof ViewVertex) {
View view = ((ViewVertex) frame).asView();
for (ViewColumn column : view.getColumns()) {
String progName = column.getItemName();
String title = column.getTitle();
columnInfo.put(progName, title);
}
} else {
System.err.println("Frame is not a ViewVertex. It is " + DGraphUtils.findInterface(frame));
}
return columnInfo;
}
} else if (key.equals("@viewinfo")) {
if (frame instanceof DbInfoVertex) {
List viewInfo = ((DbInfoVertex) frame).getViewInfo();
return viewInfo;
}
} else if (key.startsWith("#") && frame instanceof VertexFrame) {
CharSequence label = key.subSequence(1, key.length());
Method crystal = getIncidences().get(label);
if (crystal != null) {
try {
result = crystal.invoke(frame, (Object[]) null);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (result != null) {
if (!(result instanceof Iterable)) {
if (result instanceof EdgeFrame) {
Vertex v = ((VertexFrame) frame).asVertex();
List<Edge> edges = new org.openntf.domino.graph2.impl.DEdgeList((DVertex) v);
edges.add(((EdgeFrame) result).asEdge());
result = new FramedEdgeList(getGraph(), ((VertexFrame) frame).asVertex(), edges, crystal.getReturnType());
}
}
if (getIncludeVertices()) {
if (result instanceof DEdgeList) {
result = ((DEdgeList) result).toVertexList();
} else if (result instanceof FramedEdgeList) {
result = ((FramedEdgeList<?>) result).toVertexList();
} else {
System.err.println("TEMP DEBUG: Expected a DEdgeList but got a " + result.getClass().getName());
}
}
if (getFilterKeys() != null && !isCollectionRoute_) {
List<CharSequence> filterKeys = getFilterKeys();
List<CharSequence> filterValues = getFilterValues();
Map<CharSequence, Set<CharSequence>> filterMap = new HashMap<CharSequence, Set<CharSequence>>();
for (int i = 0; i < filterKeys.size(); i++) {
String curkey = filterKeys.get(i).toString();
String curvalue = filterValues.get(i).toString();
if (Value.REPLICA_KEY.equalsIgnoreCase(curkey)) {
Set<CharSequence> replicas = filterMap.get(Value.REPLICA_KEY);
if (replicas == null) {
replicas = new HashSet<CharSequence>();
filterMap.put(Value.REPLICA_KEY, replicas);
}
replicas.add(new CaseInsensitiveString(curvalue));
} else if (Value.FORM_KEY.equalsIgnoreCase(curkey)) {
Set<CharSequence> forms = filterMap.get(Value.FORM_KEY);
if (forms == null) {
forms = new HashSet<CharSequence>();
filterMap.put(Value.FORM_KEY, forms);
}
forms.add(new CaseInsensitiveString(curvalue));
} else if (Value.FIELD_KEY.equalsIgnoreCase(curkey)) {
Set<CharSequence> forms = filterMap.get(Value.FIELD_KEY);
if (forms == null) {
forms = new HashSet<CharSequence>();
filterMap.put(Value.FIELD_KEY, forms);
}
forms.add(new CaseInsensitiveString(curvalue));
}
}
if (result instanceof FramedVertexList) {
// this should always be the case
FramedVertexList fvl = (FramedVertexList) result;
List<Vertex> vertList = new ArrayList<Vertex>();
FramedVertexList filterList = new FramedVertexList<VertexFrame>(fvl.getGraph(), fvl.getSourceVertex(), vertList, null);
for (Object raw : fvl) {
if (raw instanceof Value) {
Map hits = ((Value) raw).getHits(filterMap);
if (hits.size() > 0) {
filterList.add((Value) raw);
}
} else if (raw instanceof RichTextReference) {
if (((RichTextReference) raw).isFilterMatch(filterMap)) {
filterList.add((RichTextReference) raw);
}
}
}
result = filterList;
}
}
if (getStartsValues() != null) {
if (result instanceof DEdgeEntryList) {
((DEdgeEntryList) result).initEntryList(getStartsValues());
} else if (result instanceof FramedEdgeList) {
((FramedEdgeList) result).applyFilter("lookup", getStartsValues());
}
}
if (getFilterValues() != null && getFilterKeys() == null) {
if (result instanceof DEdgeEntryList) {
((DEdgeEntryList) result).filterEntryList(getFilterValues());
} else if (result instanceof FramedEdgeList) {
((FramedEdgeList) result).applyFilter("filter", getFilterValues());
}
}
if (getOrderBys() != null) {
if (result instanceof FramedEdgeList) {
result = ((FramedEdgeList<?>) result).sortBy(getOrderBys(), getDescending());
} else if (result instanceof FramedVertexList) {
result = ((FramedVertexList<?>) result).sortBy(getOrderBys(), getDescending());
}
}
if (getStart() >= 0) {
if (getCount() > 0) {
int end = getStart() + getCount();
if (result instanceof FramedEdgeList) {
// System.out.println("TEMP DEBUG Sublisting
// a FramedEdgeList...");
int size = ((FramedEdgeList<?>) result).size();
result = ((FramedEdgeList<?>) result).subList(getStart(), (end > size ? size : end));
} else if (result instanceof FramedVertexList) {
int size = ((FramedVertexList<?>) result).size();
result = ((FramedVertexList<?>) result).subList(getStart(), (end > size ? size : end));
} else if (result instanceof DEdgeEntryList) {
// System.out.println("TEMP DEBUG Sublisting
// a DEdgeEntryList...");
int size = ((DEdgeEntryList) result).size();
result = ((DEdgeEntryList) result).subList(getStart() + 1, (end > size ? size : end));
}
} else {
if (result instanceof FramedEdgeList) {
result = ((FramedEdgeList<?>) result).subList(getStart(), ((FramedEdgeList<?>) result).size());
} else if (result instanceof FramedVertexList) {
result = ((FramedVertexList<?>) result).subList(getStart(), ((FramedVertexList<?>) result).size());
} else if (result instanceof DEdgeEntryList) {
// System.out.println("TEMP DEBUG Sublisting
// a DEdgeEntryList...");
result = ((DEdgeEntryList) result).subList(getStart() + 1, ((DEdgeEntryList) result).size());
}
}
}
if (result instanceof FramedVertexList) {
ParamMap listMap = new ParamMap();
if (getIncludeEdges()) {
listMap.put(Parameters.EDGES, EMPTY_STRINGS);
}
if (getIncludeCounts()) {
listMap.put(Parameters.COUNTS, EMPTY_STRINGS);
}
listMap.put(Parameters.PROPS, CaseInsensitiveString.toStrings(this.getProperties()));
listMap.put(Parameters.HIDEPROPS, CaseInsensitiveString.toStrings(this.getHideProperties()));
result = new JsonFrameListAdapter(getGraph(), (FramedVertexList<?>) result, listMap, isCollectionRoute_);
}
}
} else {
// NTF actually, this is a perfectly normal outcome.
}
} else {
Method crystal = getGetters().get(key);
if (crystal != null) {
try {
result = crystal.invoke(frame, (Object[]) null);
} catch (UserAccessException uae) {
throw uae;
} catch (Throwable t) {
if (frame instanceof EdgeFrame) {
result = ((EdgeFrame) frame).asEdge().getProperty(paramKey);
} else if (frame instanceof VertexFrame) {
result = ((VertexFrame) frame).asVertex().getProperty(paramKey);
} else {
System.err.println("Trying to get property " + paramKey + " from an object " + frame.getClass().getName());
}
}
} else {
if (frame instanceof ViewVertex.Contains) {
result = ((EdgeFrame) frame).asEdge().getProperty(paramKey);
} else if (frame instanceof VertexFrame) {
result = ((VertexFrame) frame).asVertex().getProperty(paramKey);
} else if (frame instanceof EdgeFrame) {
result = ((EdgeFrame) frame).asEdge().getProperty(paramKey);
} else {
System.err.println("No method found for key " + paramKey);
}
}
}
} else {
System.err.println("Unable to get property " + paramKey + " on a null object");
}
return result;
}
use of org.openntf.domino.graph2.builtin.search.Value in project org.openntf.domino by OpenNTF.
the class SearchResource method getSearchObject.
@SuppressWarnings("unchecked")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getSearchObject(@Context final UriInfo uriInfo, @PathParam(Routes.NAMESPACE) final String namespace, @Context final Request request) throws JsonException, IOException {
@SuppressWarnings("rawtypes") DFramedTransactionalGraph graph = this.getGraph(namespace);
ParamMap pm = Parameters.toParamMap(uriInfo);
StringWriter sw = new StringWriter();
JsonGraphWriter writer = new JsonGraphWriter(sw, graph, pm, false, true, false);
Date lastModified = new Date();
boolean getLastMod = false;
try {
if (pm.get(Parameters.ID) != null) {
List<String> ids = pm.get(Parameters.ID);
if (ids.size() == 0) {
writer.outNull();
} else if (ids.size() == 1) {
String id = ids.get(0).trim();
NoteCoordinate nc = null;
if (id.startsWith("E")) {
nc = ViewEntryCoordinate.Utils.getViewEntryCoordinate(id);
} else if (id.startsWith("V")) {
nc = ViewEntryCoordinate.Utils.getViewEntryCoordinate(id);
} else {
nc = NoteCoordinate.Utils.getNoteCoordinate(id);
getLastMod = true;
}
Object elem = graph.getElement(nc, null);
if (elem == null) {
throw new WebApplicationException(ErrorHelper.createErrorResponse("Graph element not found for id " + id, Response.Status.NOT_FOUND));
}
if (elem instanceof DVertexFrame && getLastMod) {
lastModified = ((DVertexFrame) elem).getModified();
}
if (elem instanceof DEdgeFrame && getLastMod) {
lastModified = ((DEdgeFrame) elem).getModified();
}
writer.outObject(elem);
} else {
List<Value> valueResults = null;
List<RichTextReference> rtRefResults = null;
for (String id : ids) {
NoteCoordinate nc = NoteCoordinate.Utils.getNoteCoordinate(id.trim());
Object rawterm = graph.getElement(nc, null);
// System.out.println("TEMP DEBUG got a " + DGraphUtils.getInterfaceList(rawterm) + " from id " + nc);
Term term = null;
if (rawterm instanceof Term) {
term = (Term) rawterm;
} else {
// System.out.println("TEMP DEBUG didn't get a Term!");
}
List<Value> values = term.getValues();
// System.out.println("TEMP DEBUG found " + values.size() + " values for term " + term.getValue() + " in a " + values.getClass().getName());
List<RichTextReference> rtRefs = term.getRichTextReferences();
// System.out.println("TEMP DEBUG found " + rtRefs.size() + " rtrefs for term " + term.getValue() + " in a " + rtRefs.getClass().getName());
if (valueResults == null) {
valueResults = values;
} else {
valueResults.retainAll(values);
// System.out.println("TEMP DEBUG retained " + valueResults.size() + " values for term " + term.getValue());
}
if (rtRefResults == null) {
rtRefResults = rtRefs;
} else {
rtRefResults.retainAll(rtRefs);
// System.out.println("TEMP DEBUG retained " + rtRefResults.size() + " rtrefs for term " + term.getValue());
}
}
List<Object> combinedResults = new ArrayList<Object>();
combinedResults.addAll(valueResults);
combinedResults.addAll(rtRefResults);
writer.outArrayLiteral(combinedResults);
}
} else if (pm.getKeys() != null) {
Class<?> type = Term.class;
DKeyResolver resolver = graph.getKeyResolver(type);
List<CharSequence> keys = pm.getKeys();
if (keys.size() == 0) {
writer.outNull();
} else {
List<Value> valueResults = null;
List<RichTextReference> rtRefResults = null;
String key = URLDecoder.decode(String.valueOf(keys.get(0)), "UTF-8");
String[] array = key.split(" ");
for (String cur : array) {
NoteCoordinate nc = resolver.resolveKey(type, cur);
Object rawterm = graph.getElement(nc, null);
Term term = null;
if (rawterm instanceof Term) {
term = (Term) rawterm;
} else {
}
List<Value> values = term.getValues();
List<RichTextReference> rtRefs = term.getRichTextReferences();
if (valueResults == null) {
valueResults = values;
} else {
valueResults.retainAll(values);
}
if (rtRefResults == null) {
rtRefResults = rtRefs;
} else {
rtRefResults.retainAll(rtRefs);
}
}
List<Object> combinedResults = new ArrayList<Object>();
combinedResults.addAll(valueResults);
combinedResults.addAll(rtRefResults);
writer.outArrayLiteral(combinedResults);
}
graph.rollback();
} else {
// MultivaluedMap<String, String> mvm = uriInfo.getQueryParameters();
Map<String, Object> jsonMap = new LinkedHashMap<String, Object>();
jsonMap.put("namespace", namespace);
jsonMap.put("status", "active");
writer.outObject(jsonMap);
}
} catch (UserAccessException uae) {
return ErrorHelper.createErrorResponse("User " + Factory.getSession(SessionType.CURRENT).getEffectiveUserName() + " is not authorized to access this resource", Response.Status.UNAUTHORIZED);
} catch (KeyNotFoundException knfe) {
ResponseBuilder rb = Response.noContent();
return rb.build();
} catch (Exception e) {
throw new WebApplicationException(ErrorHelper.createErrorResponse(e, Response.Status.INTERNAL_SERVER_ERROR));
}
String jsonEntity = sw.toString();
ResponseBuilder berg = getBuilder(jsonEntity, lastModified, true, request);
Response response = berg.build();
return response;
}
Aggregations