@Override public String getFunctionValue(final Node node, final Parameters parameters) { if (log.isDebugEnabled()) { log.debug("node #" + node.getNumber()); log.debug("params: " + parameters); } String status = getDownloadStatus(node); int timeout = 5; if (parameters.get(TIMEOUT) != null) { timeout = parameters.get(TIMEOUT); } if (status == null) { Action action = ActionRepository.getInstance().get("streams", "download_media"); if (action == null) { throw new IllegalStateException("Action could not be found"); } if (node.getCloud().may(action, null)) { synchronized (runningJobs) { Future<?> future = runningJobs.get(node.getNumber()); if (future == null) { setDownloadStatus(node, "busy: " + System.currentTimeMillis()); future = submit(node, parameters); ThreadPools.identify( future, DownloadFunction.class.getName() + " downloading... for #" + node.getNumber() + " - status: " + getDownloadStatus(node)); String fname = ThreadPools.getString(future); log.info("Future name: " + fname); try { status = (String) future.get(timeout, TimeUnit.SECONDS); log.info("status: " + status); } catch (TimeoutException te) { status = ThreadPools.getString(future); log.info("TimeoutException: " + status); } catch (Exception e) { log.error(e); } } else { status = ThreadPools.getString(future); } } log.info("status: " + status); return status; } else { throw new org.mmbase.security.SecurityException("Not allowed"); } } return status; }
/** * A real node-function (using the node argument). Returns the next newer node of same type. Also * a nice example on the difference between core and bridge. */ public Object successor() { if (node == null) throw new IllegalArgumentException("successor is a node-function"); if (cloud != null) { log.debug("Using bridge (security restrictions will be honoured)"); NodeManager nm = node.getNodeManager(); NodeQuery q = nm.createQuery(); StepField field = q.getStepField(nm.getField("number")); q.setConstraint( q.createConstraint( field, FieldCompareConstraint.GREATER, Integer.valueOf(node.getNumber()))); q.addSortOrder(field, SortOrder.ORDER_ASCENDING); q.setMaxNumber(1); NodeIterator i = nm.getList(q).nodeIterator(); return i.hasNext() ? i.nextNode() : null; } else { log.debug("Using core."); throw new UnsupportedOperationException("Core implementation was dropped. See source code."); /* This is how it would go with core objects MMObjectBuilder builder = MMBase.getMMBase().getBuilder(node.getNodeManager().getName()); NodeSearchQuery query = new NodeSearchQuery(builder); StepField field = query.getField(builder.getField("number")); BasicFieldValueConstraint cons = new BasicFieldValueConstraint(field, node.getNumber()); cons.setOperator(FieldCompareConstraint.GREATER); query.setConstraint(cons); query.addSortOrder(field); query.setMaxNumber(1); try { java.util.Iterator<MMObjectNode> i = builder.getNodes(query).iterator(); return i.hasNext() ? i.next() : null; } catch (Exception e) { return null; } */ } }
// MMB-1893 public void testDeleteNodeWitRelationsAndCancel() { Cloud cloud = getCloud(); int urlCount0 = Queries.count(cloud.getNodeManager("urls").createQuery()); int relCount0 = Queries.count(cloud.getNodeManager("insrel").createQuery()); Node url = cloud.getNodeManager("urls").createNode(); url.commit(); Node news = cloud.getNode(newNode); RelationManager rm = cloud.getRelationManager("urls", "news", "posrel"); Relation r = url.createRelation(news, rm); r.commit(); int urlCount = Queries.count(cloud.getNodeManager("urls").createQuery()); int relCount = Queries.count(cloud.getNodeManager("insrel").createQuery()); assertEquals(urlCount0 + 1, urlCount); assertEquals(relCount0 + 1, relCount); Transaction t = cloud.getTransaction("deletewithrelationsandcancel"); Node turl = t.getNode(url.getNumber()); turl.delete(true); t.cancel(); int urlCountAfter = Queries.count(cloud.getNodeManager("urls").createQuery()); assertEquals(urlCount, urlCountAfter); int relCountAfter = Queries.count(cloud.getNodeManager("insrel").createQuery()); assertEquals(relCount, relCountAfter); // MMB-1893 }
// MMB-1860 (4) public void testRelateAndDeleteRelation() { // Make a relation between two nodes. Delete the relation again. Commit the transaction. // Te relation shouldn't exist Cloud cloud = getCloud(); int urlCount = Queries.count(cloud.getNodeManager("urls").createQuery()); int relCount = Queries.count(cloud.getNodeManager("insrel").createQuery()); Node newUrl = cloud.getNodeManager("urls").createNode(); newUrl.commit(); Transaction t = cloud.getTransaction("testrelateandeleterelation"); Node news = t.getNode(newNode); Node url = t.getNode(newUrl.getNumber()); RelationManager rm = t.getRelationManager("urls", "news", "posrel"); Relation r = url.createRelation(news, rm); r.commit(); r.delete(); t.commit(); int urlCountAfter = Queries.count(cloud.getNodeManager("urls").createQuery()); assertEquals(urlCount + 1, urlCountAfter); // But the relation should not exist, because it was deleted angain int relCountAfter = Queries.count(cloud.getNodeManager("insrel").createQuery()); assertEquals(relCount, relCountAfter); }
// MMB-1889 public void testCreateRelationAndDeleteNode() { // Make a relation to an existing node. Then delete that node with the 'delete relations' // option'. Commit the transaction. // The new relations should not exist, since the node was deleted. // No errors. Cloud cloud = getCloud(); int urlCount = Queries.count(cloud.getNodeManager("urls").createQuery()); int relCount = Queries.count(cloud.getNodeManager("insrel").createQuery()); Node url = cloud.getNodeManager("urls").createNode(); url.commit(); Transaction t = cloud.getTransaction("relatedandelete"); Node turl = t.getNode(url.getNumber()); Node news = t.getNode(newNode); RelationManager rm = t.getRelationManager("urls", "news", "posrel"); Relation r = turl.createRelation(news, rm); r.commit(); turl.delete(true); t.commit(); int urlCountAfter = Queries.count(cloud.getNodeManager("urls").createQuery()); assertEquals(urlCount, urlCountAfter); int relCountAfter = Queries.count(cloud.getNodeManager("insrel").createQuery()); assertEquals(relCount, relCountAfter); }
public void testCreateAndDelete2() { // Create new node. Request the node again. Delete that. Commit the transaction. // The new node must not exist. Cloud cloud = getCloud(); int urlCount = Queries.count(cloud.getNodeManager("urls").createQuery()); Transaction t = cloud.getTransaction("testcreateandelete"); Node url = t.getNodeManager("urls").createNode(); url.commit(); assertEquals(1, t.getNodes().size()); Node reurl = t.getNode(url.getNumber()); reurl.delete(); assertEquals( 1, t.getNodes() .size()); // 0 would also be an option, but the node remaisn in the transaction as // 'NOLONGER' t.commit(); int urlCountAfter = Queries.count(cloud.getNodeManager("urls").createQuery()); assertEquals(urlCount, urlCountAfter); }
public void testSetContextSubTransaction() { Cloud cloud = getCloud(); Transaction ot = cloud.getTransaction("bar8"); Transaction t = ot.getTransaction("bar9"); Node n = t.getNodeManager("news").createNode(); n.setContext("non_default"); assertEquals("non_default", n.getContext()); t.commit(); Node n2 = ot.getNode(n.getNumber()); assertEquals("non_default", n2.getContext()); ot.commit(); Node n3 = cloud.getNode(n.getNumber()); assertEquals("non_default", n3.getContext()); }
public void setUp() { seq++; // Create some test nodes Cloud cloud = getCloud(); { Node node = cloud.getNodeManager("news").createNode(); node.setStringValue("title", "foo"); node.commit(); newNode = node.getNumber(); } { Node node = cloud.getNodeManager("news").createNode(); node.setStringValue("title", "foo"); node.createAlias("test.news." + seq); node.setContext("default"); node.commit(); newNode2 = node.getNumber(); } }
public void testAddToResultCreateTwoRelations() { Node mag = getCloud().getNodeManager("mags").createNode(); mag.commit(); Node news = getCloud().getNodeManager("news").createNode(); news.commit(); Node url = getCloud().getNodeManager("urls").createNode(); url.commit(); NodeQuery q = Queries.createRelatedNodesQuery( mag, getCloud().getNodeManager("news"), "posrel", "destination"); Queries.addPath(q, "posrel,urls", "destination"); Queries.addStartNodes(q, "" + url.getNumber()); NodeList result = Queries.addToResult(q, news); assertEquals(2, result.size()); }
public void testGetNode() { // Create new node. Request the node again. // Should work Cloud cloud = getCloud(); int urlCount = Queries.count(cloud.getNodeManager("urls").createQuery()); Transaction t = cloud.getTransaction("testgetnode"); Node url = t.getNodeManager("urls").createNode(); url.setStringValue("url", "http://bla"); url.commit(); Node reurl = t.getNode(url.getNumber()); assertEquals("http://bla", reurl.getStringValue("url")); }
public void testSetContext() { Cloud cloud = getCloud(); Transaction t = cloud.getTransaction("bar7"); Node n = t.getNodeManager("news").createNode(); assertEquals(1, t.getNodes().size()); n.setContext("non_default"); assertEquals(1, t.getNodes().size()); assertEquals("non_default", n.getStringValue("owner")); assertEquals("non_default", n.getContext()); assertEquals(1, t.getNodes().size()); t.commit(); Node n2 = cloud.getNode(n.getNumber()); assertEquals("non_default", n2.getStringValue("owner")); assertEquals("non_default", n2.getContext()); }
private Boolean sendMail(HttpServletRequest req, Node node, String email) { boolean send = false; Cloud cloud = node.getCloud(); String emailbuilder = "email"; try { Module sendmail = cloud.getCloudContext().getModule("sendmail"); emailbuilder = sendmail.getProperty("emailbuilder"); } catch (NotFoundException nfe) { log.warn("No email module " + nfe); } if (cloud.hasNodeManager(emailbuilder)) { NodeManager nm = cloud.getNodeManager(emailbuilder); Node message = nm.createNode(); String host = req.getHeader("host"); if (host == null || "".equals(host)) { try { host = java.net.InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException uhe) { log.warn("No host: " + uhe); } } String from = "downloader@" + host; // do a quick check if we've got something more or less valid Pattern p = Pattern.compile(".+@.+\\.[a-z]+"); Matcher m = p.matcher(from); if (!m.matches()) { from = "*****@*****.**"; } String mediaTitle = node.getStringValue("title"); String mediaUrl = getProperty(node, URL_KEY); StringBuilder body = new StringBuilder(); body.append("*This is an automated message / Dit is een geautomatiseerd bericht*"); body.append("\n\n*English*"); body.append("\n\nDear,"); body.append("\n\nWe have received your file belonging to media item titled '") .append(mediaTitle) .append("'. "); body.append("In about 1 hour, you can find your submission at: "); body.append("http://").append(host).append("/media/").append(node.getNumber()); body.append("\n\nKind regards,"); body.append("\n\n").append(host); body.append("\n\n\n*Nederlands*"); body.append("\n\nBeste,"); body.append("\n\nWe hebben je bestand voor het media item met de titel '") .append(mediaTitle) .append("' ontvangen. "); body.append("Je kunt je bijdrage hier over circa een uur terugvinden: "); body.append("http://").append(host).append("/media/").append(node.getNumber()); body.append("\n\nMet vriendelijke groet,"); body.append("\n\n").append(host); message.setValue("from", from); message.setValue("to", email); message.setValue("subject", "Download complete / Download voltooid"); message.setValue("body", body.toString()); message.commit(); Function mail = message.getFunction("mail"); Parameters mail_params = mail.createParameters(); mail_params.set("type", "oneshot"); mail.getFunctionValue(mail_params); if (log.isDebugEnabled()) { log.debug("Message download ready send to: " + email); } send = true; } else { log.warn("Can not send message - no emailbuilder installed."); } return send; }
protected void setDownloadStatus(Node node, String status) { log.info("Setting status of " + node.getNumber() + " to " + status); setProperty(node, STATUS_KEY, status); }