最近我在修改zeppelin(0.7版本)的源码相关的知识,目前做的工作是修改zeppelin的代码,为了让zeppelin可以可以在页面中显示数据集,并且在其数据库中存储式真实的路径1.如果我们要运行paragraph的代码的时候,我们要修改

我们要修改NotebookServer.setParagraphUsingMessage(Note note, Message fromMessage, String paragraphId, String text, String title, Map<String, Object> params, Map<String, Object> config)方法,
目的让你在zeppelin上面写数据集但是存储在zeppelin的代码里面是真实路径
代码:

Paragraph p = note.getParagraph(paragraphId);
//修改text的值
if(text != null){
if(text.contains("#mydata")){
text = text.replaceAll("#mydata","/tmp/xjdx.txt");
}
}
p.setText(text);
p.setTitle(title);
AuthenticationInfo subject =
new AuthenticationInfo(fromMessage.principal, fromMessage.ticket);
p.setAuthenticationInfo(subject);
p.settings.setParams(params);
p.setConfig(config);

return p;

-----------------------------------------------------------

修改页面或者换其他的notebook

private void updateParagraph(NotebookSocket conn, HashSet<String> userAndRoles,
Notebook notebook, Message fromMessage) throws IOException {
LOG.info("----------------------------------updateParagraph-------------------------------");
String paragraphId = (String) fromMessage.get("id");
if (paragraphId == null) {
return;
}

Map<String, Object> params = (Map<String, Object>) fromMessage.get("params");
Map<String, Object> config = (Map<String, Object>) fromMessage.get("config");
String noteId = getOpenNoteId(conn);
final Note note = notebook.getNote(noteId);
NotebookAuthorization notebookAuthorization = notebook.getNotebookAuthorization();
AuthenticationInfo subject = new AuthenticationInfo(fromMessage.principal);
if (!notebookAuthorization.isWriter(noteId, userAndRoles)) {
permissionError(conn, "write", fromMessage.principal, userAndRoles,
notebookAuthorization.getWriters(noteId));
return;
}

Paragraph p = note.getParagraph(paragraphId);

if (note.isPersonalizedMode()) {
p = p.getUserParagraphMap().get(subject.getUser());
}

p.settings.setParams(params);
p.setConfig(config);
p.setTitle((String) fromMessage.get("title"));

// p.setText((String) fromMessage.get("paragraph"));
//修改text的值
String myText = (String) fromMessage.get("paragraph");
if(myText != null){
if(myText.contains("#mydata")){
myText = myText.replaceAll("#mydata","/tmp/xjdx.txt");
}
}
p.setText(myText);

note.persist(subject);

if (note.isPersonalizedMode()) {
Map<String, Paragraph> userParagraphMap =
note.getParagraph(paragraphId).getUserParagraphMap();
broadcastParagraphs(userParagraphMap, p);
} else {
broadcastParagraph(note, p);
}
}

------------------------------------------------------------

整体刷新页面或者是换notebook的显示模式

private void sendNote(NotebookSocket conn, HashSet<String> userAndRoles, Notebook notebook,
Message fromMessage) throws IOException {

LOG.info("New operation from {} : {} : {} : {} : {}", conn.getRequest().getRemoteAddr(),
conn.getRequest().getRemotePort(), fromMessage.principal, fromMessage.op,
fromMessage.get("id"));

String noteId = (String) fromMessage.get("id");
if (noteId == null) {
return;
}

String user = fromMessage.principal;

Note note = notebook.getNote(noteId);
NotebookAuthorization notebookAuthorization = notebook.getNotebookAuthorization();
if (note != null) {
if (!notebookAuthorization.isReader(noteId, userAndRoles)) {
permissionError(conn, "read", fromMessage.principal, userAndRoles,
notebookAuthorization.getReaders(noteId));
return;
}
addConnectionToNote(note.getId(), conn);

if (note.isPersonalizedMode()) {
note = note.getUserNote(user);
}

String msg2 = serializeMessage(new Message(OP.NOTE).put("note", note));
Message message2 = deserializeMessage(msg2);

Map note2 = message2.getType("note");
if (note2 != null) {
List<Map> paragraphs2 = (List<Map>)note2.get("paragraphs");
for (Map m : paragraphs2) {
String text2 = (String)m.get("text");
if(text2 != null){
if(text2.contains("/tmp/xjdx.txt")){
text2 = text2.replaceAll("/tmp/xjdx.txt","#mydata");
}
}
m.put("text", text2);
}
}
conn.send(serializeMessage(message2));
sendAllAngularObjects(note, user, conn);
} else {
conn.send(serializeMessage(new Message(OP.NOTE).put("note", null)));
}
}

------------------------------------------------------

旁边的一些辅助功能以及run后面的访问流程,例如copy以及showline的方法

public void broadcastParagraph(Note note, Paragraph p) {
Paragraph p2 = p;
if (p.settings != null) {
//clone()方法
p2 = p.cloneParagraphForUser(p.getId());

String text = p2.getText();
if (text != null) {
if (text.contains("/tmp/xjdx.txt")) {
text = text.replaceAll("/tmp/xjdx.txt", "#mydata");
p2.setText(text);
}
}
}
if (note.isPersonalizedMode()) {
broadcastParagraphs(p.getUserParagraphMap(), p2);
} else {
broadcast(note.getId(), new Message(OP.PARAGRAPH).put("paragraph", p2));
}
}

关于修改zeppelin的代码显示的更多相关文章

  1. WPF DatePicker只显示年和月 修改:可以只显示年

    最近的项目,查询时只需要年和月,不需要日,因此需要对原有的DatePicker进行修改,查询了网上的内容,最终从一篇帖子里看到了添加附加属性的方法,地址是http://stackoverflow.co ...

  2. 修改woocommerce列表产品显示数量

    WooCommerce列表产品数量默认显示为10,如果是显示3列或4列,则最后一行会有空白留出,为了美观,往往我们要设置显示合适的产品数量.因此,只要把如下代码复制到当前主题的functions.ph ...

  3. 修改LiveChart的提示显示位置

    问题:修改LiveChart的提示显示位置 摘要:相信WPF开发者在用LiveCharts的时候会有遇到这个需求.就是产品要求折线图的提示要显示的正常点. 需求:如下图所示.原本显示是在下方并且没有小 ...

  4. 【HOW】用PowerShell脚本修改用户配置文件属性显示次序

    首先将如下脚本保存为PowerShell文件,如:ReorderUserProfileProperty.ps1. 在执行此脚本时,如果不输入任何参数,将列出所有用户配置文件属性的名称和显示次序:如果只 ...

  5. Bootstrap系列 -- 8. 代码显示

    一. Bootstrap中的代码块 代码块一般在博客中使用的较多,比较博客园中提供的贴代码. 在Bootstrap中提供了三种形式的代码显示 1. 使用<code></code> ...

  6. C# 反编译-Reflector 反混淆-De4Dot 修改dll/exe代码-reflexil

    反编译工具 Reflector 破解版下载地址:http://pan.baidu.com/s/15UwJo 使用方法:略 反混淆工具De4Dot 开源软件 下载地址http://pan.baidu.c ...

  7. 修改一行SQL代码 性能提升了N倍

    在PostgreSQL中修改了一行不明显的代码,把(ANY(ARRAY[...]) 改成 ANY(VALUES(...))),结果查询时间从20s变为0.2s.最初我们学习使用EXPLAN ANALY ...

  8. thinkphp从数据库里的html代码显示页面不解析

    首先,这个问题不应该出现在这里,因为以前在用ThinkPHP3.1.2的时候,利用富文本编辑器保存文本后,直接从数据库里面取出的数据都能正常显示,改用ThinkPHP3.2.3之后,thinkphp从 ...

  9. Android开发技巧——TextView加载HTML的图片及代码显示问题

    前几天在做一个Gradle用户指南的应用程序,使用的是TextView来加载HTML内容(至于为什么不用WebView,我也没有认真使用并比较过,也许以后会换吧),其中遇见了一些纠结的问题,所幸主要的 ...

随机推荐

  1. Android 设置软键盘搜索键以及监听搜索键点击事件

    如图所示,有时候为了布局美观,在搜索时没有搜索按钮,而是调用软件盘上的按钮.调用的实现只需要在XML在输入框中加入android:imeOptions="actionSearch" ...

  2. sharepoint 2010 FieldLookup 的更新方法

    网上有,但是是错误的,稍微改一下,就可以了 第一个方法是要更新的item,其中 _fieldname 为要更新的lookup字段名字,_lookupValue为要更新的值. public void S ...

  3. JS兼用IE8的通过class名获取CSS对象组

    转自:Garon_InE 原生js方法“document.getElementsByClassName”在ie8及其以下浏览器中不能使用,所以写了一个兼容IE的方法. 完整的页面代码如下: testJ ...

  4. 笨办法学Python(二十五)

    习题 25: 更多更多的练习 我们将做一些关于函数和变量的练习,以确认你真正掌握了这些知识.这节练习对你来说可以说是一本道:写程序,逐行研究,弄懂它. 不过这节练习还是有些不同,你不需要运行它,取而代 ...

  5. java集合框架——List

    一.List接口概述 List有个很大的特点就是可以操作角标. 下面开始介绍List接口中相对于Collection接口比较特别的方法.在Collection接口中已经介绍的方法此处就不再赘述. 1. ...

  6. 请教Nutzwk项目,在beetl页面怎么用shiro标签呢?

    请教Nutzwk项目,在beetl页面怎么用shiro标签呢?  发布于 381天前  作者 WenTao-Love  195 次浏览  复制  上一个帖子  下一个帖子  标签: nutzwk 如题 ...

  7. cgi程序报 Premature end of script headers:

    这段时间写了一个CGI,也是为了应付工作,挺简单的一个程序,总是在调用的时候报:Premature end of script headers: 很让人头疼!   在网上找了些资料,按资料 ---- ...

  8. RPC&ORM

  9. Better exception message for missing @RequestBody method parameter

    https://jira.spring.io/browse/SPR-12888 Description When I use @RequestBody on one of my controllers ...

  10. 重设SVN 的GNOME keyring [(null)] 的密码

    在ubuntu里如果改了登录密码,那么在使用svn是会要求GNOME keyring [(null)] 的密码: 去掉这个只需:rm -f ~/.gnome2/keyrings/login.keyri ...