mirror of
https://github.com/apache/zeppelin
synced 2026-05-24 09:38:26 +00:00
Move getEditorSetting to InterpreterFactory class
This commit is contained in:
parent
2d56222140
commit
c66fb0ed06
7 changed files with 95 additions and 82 deletions
|
|
@ -251,7 +251,7 @@ public class NotebookServer extends WebSocketServlet implements
|
|||
saveInterpreterBindings(conn, messagereceived);
|
||||
break;
|
||||
case EDITOR_SETTING:
|
||||
getEditorSetting(conn, notebook, messagereceived);
|
||||
getEditorSetting(conn, messagereceived);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -1581,13 +1581,12 @@ public class NotebookServer extends WebSocketServlet implements
|
|||
}
|
||||
}
|
||||
|
||||
private void getEditorSetting(NotebookSocket conn, Notebook notebook, Message fromMessage)
|
||||
private void getEditorSetting(NotebookSocket conn, Message fromMessage)
|
||||
throws IOException {
|
||||
String replName = (String) fromMessage.get("magic");
|
||||
String noteId = getOpenNoteId(conn);
|
||||
Note note = notebook.getNote(noteId);
|
||||
Message resp = new Message(OP.EDITOR_SETTING);
|
||||
resp.put("editor", note.getEditorSetting(replName));
|
||||
resp.put("editor", notebook().getInterpreterFactory().getEditorSetting(noteId, replName));
|
||||
conn.send(serializeMessage(resp));
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ import java.util.Set;
|
|||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
|
@ -1283,6 +1284,35 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
this.env = env;
|
||||
}
|
||||
|
||||
public Map<String, Object> getEditorSetting(String noteId, String replName) {
|
||||
Interpreter intp = getInterpreter(noteId, replName);
|
||||
Map<String, Object> editor = Maps.newHashMap(
|
||||
ImmutableMap.<String, Object>builder()
|
||||
.put("language", "text").build());
|
||||
String defaultSettingName = getDefaultInterpreterSetting(noteId).getName();
|
||||
String group = StringUtils.EMPTY;
|
||||
try {
|
||||
List<InterpreterSetting> intpSettings = getInterpreterSettings(noteId);
|
||||
for (InterpreterSetting intpSetting : intpSettings) {
|
||||
String[] replNameSplit = replName.split("\\.");
|
||||
if (replNameSplit.length == 2) {
|
||||
group = replNameSplit[0];
|
||||
}
|
||||
// when replName is 'name' of interpreter
|
||||
if (defaultSettingName.equals(intpSetting.getName())) {
|
||||
editor = getEditorFromSettingByClassName(intpSetting, intp.getClassName());
|
||||
}
|
||||
// when replName is 'alias name' of interpreter or 'group' of interpreter
|
||||
if (replName.equals(intpSetting.getName()) || group.equals(intpSetting.getName())) {
|
||||
editor = getEditorFromSettingByClassName(intpSetting, intp.getClassName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
logger.warn("Couldn't get interpreter editor language");
|
||||
}
|
||||
return editor;
|
||||
}
|
||||
|
||||
private Interpreter getDevInterpreter() {
|
||||
if (devInterpreter == null) {
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@ import java.util.concurrent.ScheduledFuture;
|
|||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
|
|
@ -652,40 +650,6 @@ public class Note implements Serializable, ParagraphJobListener {
|
|||
this.info = info;
|
||||
}
|
||||
|
||||
public Interpreter getRepl(String name) {
|
||||
return factory.getInterpreter(getId(), name);
|
||||
}
|
||||
|
||||
public Map<String, Object> getEditorSetting(String replName) {
|
||||
Interpreter intp = getRepl(replName);
|
||||
Map<String, Object> editor = Maps.newHashMap(
|
||||
ImmutableMap.<String, Object>builder()
|
||||
.put("language", "text").build());
|
||||
String defaultSettingName = factory.getDefaultInterpreterSetting(this.getId()).getName();
|
||||
String group = StringUtils.EMPTY;
|
||||
try {
|
||||
List<InterpreterSetting> intpSettings = factory.getInterpreterSettings(this.getId());
|
||||
for (InterpreterSetting intpSetting : intpSettings) {
|
||||
String[] replNameSplit = replName.split("\\.");
|
||||
if (replNameSplit.length == 2) {
|
||||
group = replNameSplit[0];
|
||||
}
|
||||
// when replName is 'name' of interpreter
|
||||
if (defaultSettingName.equals(intpSetting.getName())) {
|
||||
editor = factory.getEditorFromSettingByClassName(intpSetting, intp.getClassName());
|
||||
}
|
||||
// when replName is 'alias name' of interpreter or 'group' of interpreter
|
||||
if (replName.equals(intpSetting.getName()) || group.equals(intpSetting.getName())) {
|
||||
editor = factory.getEditorFromSettingByClassName(intpSetting, intp.getClassName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (NullPointerException e) {
|
||||
logger.warn("Couldn't get interpreter editor language");
|
||||
}
|
||||
return editor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeStatusChange(Job job, Status before, Status after) {
|
||||
if (jobListenerFactory != null) {
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ public class Paragraph extends Job implements Serializable, Cloneable {
|
|||
}
|
||||
|
||||
public Interpreter getRepl(String name) {
|
||||
return note.getRepl(name);
|
||||
return factory.getInterpreter(note.getId(), name);
|
||||
}
|
||||
|
||||
public Interpreter getCurrentRepl() {
|
||||
|
|
|
|||
|
|
@ -34,12 +34,22 @@ import org.apache.zeppelin.dep.DependencyResolver;
|
|||
import org.apache.zeppelin.interpreter.mock.MockInterpreter1;
|
||||
import org.apache.zeppelin.interpreter.mock.MockInterpreter2;
|
||||
import org.apache.zeppelin.interpreter.remote.RemoteInterpreter;
|
||||
import org.apache.zeppelin.notebook.JobListenerFactory;
|
||||
import org.apache.zeppelin.notebook.Note;
|
||||
import org.apache.zeppelin.notebook.Notebook;
|
||||
import org.apache.zeppelin.notebook.repo.NotebookRepo;
|
||||
import org.apache.zeppelin.notebook.repo.VFSNotebookRepo;
|
||||
import org.apache.zeppelin.scheduler.SchedulerFactory;
|
||||
import org.apache.zeppelin.search.SearchService;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.sonatype.aether.RepositoryException;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import org.mockito.Mock;
|
||||
|
||||
public class InterpreterFactoryTest {
|
||||
|
||||
|
|
@ -47,13 +57,19 @@ public class InterpreterFactoryTest {
|
|||
private File tmpDir;
|
||||
private ZeppelinConfiguration conf;
|
||||
private InterpreterContext context;
|
||||
private Notebook notebook;
|
||||
private NotebookRepo notebookRepo;
|
||||
private DependencyResolver depResolver;
|
||||
private SchedulerFactory schedulerFactory;
|
||||
@Mock
|
||||
private JobListenerFactory jobListenerFactory;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
tmpDir = new File(System.getProperty("java.io.tmpdir")+"/ZeppelinLTest_"+System.currentTimeMillis());
|
||||
tmpDir.mkdirs();
|
||||
new File(tmpDir, "conf").mkdirs();
|
||||
FileUtils.copyDirectory(new File("src/test/resources/interpreter"), new File(tmpDir, "interpreter"));
|
||||
|
||||
Map<String, InterpreterProperty> propertiesMockInterpreter1 = new HashMap<String, InterpreterProperty>();
|
||||
propertiesMockInterpreter1.put("PROPERTY_1", new InterpreterProperty("PROPERTY_1", "", "VALUE_1", "desc"));
|
||||
|
|
@ -62,11 +78,22 @@ public class InterpreterFactoryTest {
|
|||
MockInterpreter2.register("mock2", "org.apache.zeppelin.interpreter.mock.MockInterpreter2");
|
||||
|
||||
System.setProperty(ConfVars.ZEPPELIN_HOME.getVarName(), tmpDir.getAbsolutePath());
|
||||
System.setProperty(ConfVars.ZEPPELIN_INTERPRETERS.getVarName(), "org.apache.zeppelin.interpreter.mock.MockInterpreter1,org.apache.zeppelin.interpreter.mock.MockInterpreter2");
|
||||
System.setProperty(ConfVars.ZEPPELIN_INTERPRETERS.getVarName(),
|
||||
"org.apache.zeppelin.interpreter.mock.MockInterpreter1," +
|
||||
"org.apache.zeppelin.interpreter.mock.MockInterpreter2," +
|
||||
"org.apache.zeppelin.interpreter.mock.MockInterpreter11");
|
||||
System.setProperty(ConfVars.ZEPPELIN_INTERPRETER_GROUP_ORDER.getVarName(),
|
||||
"mock1,mock2,mock11,dev");
|
||||
conf = new ZeppelinConfiguration();
|
||||
schedulerFactory = new SchedulerFactory();
|
||||
depResolver = new DependencyResolver(tmpDir.getAbsolutePath() + "/local-repo");
|
||||
factory = new InterpreterFactory(conf, new InterpreterOption(false), null, null, null, depResolver);
|
||||
context = new InterpreterContext("note", "id", "title", "text", null, null, null, null, null, null, null);
|
||||
|
||||
SearchService search = mock(SearchService.class);
|
||||
notebookRepo = new VFSNotebookRepo(conf);
|
||||
notebook = new Notebook(conf, notebookRepo, schedulerFactory, factory, jobListenerFactory, search,
|
||||
null, null);
|
||||
}
|
||||
|
||||
@After
|
||||
|
|
@ -128,7 +155,7 @@ public class InterpreterFactoryTest {
|
|||
public void testFactoryDefaultList() throws IOException, RepositoryException {
|
||||
// get default settings
|
||||
List<String> all = factory.getDefaultInterpreterSettingList();
|
||||
assertTrue(factory.getRegisteredInterpreterList().size() >= all.size());
|
||||
assertTrue(factory.get().size() >= all.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -196,4 +223,29 @@ public class InterpreterFactoryTest {
|
|||
assertEquals("'.' is invalid for InterpreterSetting name.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getEditorSetting() throws IOException, RepositoryException, SchedulerException {
|
||||
List<String> intpIds = new ArrayList<>();
|
||||
for(InterpreterSetting intpSetting: factory.get()) {
|
||||
if (intpSetting.getName().startsWith("mock1")) {
|
||||
intpIds.add(intpSetting.getId());
|
||||
}
|
||||
}
|
||||
Note note = notebook.createNote(intpIds, null);
|
||||
|
||||
// get editor setting from interpreter-setting.json
|
||||
Map<String, Object> editor = factory.getEditorSetting(note.getId(), "mock11");
|
||||
assertEquals("java", editor.get("language"));
|
||||
|
||||
// when interpreter is not loaded via interpreter-setting.json
|
||||
// or editor setting doesn't exit
|
||||
editor = factory.getEditorSetting(note.getId(), "mock1");
|
||||
assertEquals(null, editor.get("language"));
|
||||
|
||||
// when interpreter is not bound to note
|
||||
editor = factory.getEditorSetting(note.getId(), "mock2");
|
||||
assertEquals("text", editor.get("language"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ package org.apache.zeppelin.notebook;
|
|||
|
||||
import org.apache.zeppelin.interpreter.Interpreter;
|
||||
import org.apache.zeppelin.interpreter.InterpreterFactory;
|
||||
import org.apache.zeppelin.interpreter.InterpreterSetting;
|
||||
import org.apache.zeppelin.notebook.repo.NotebookRepo;
|
||||
import org.apache.zeppelin.scheduler.Scheduler;
|
||||
import org.apache.zeppelin.search.SearchService;
|
||||
|
|
@ -28,7 +27,6 @@ import org.junit.Test;
|
|||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
|
|
|||
|
|
@ -74,17 +74,11 @@ public class NotebookTest implements JobListenerFactory{
|
|||
new File(tmpDir, "conf").mkdirs();
|
||||
notebookDir = new File(tmpDir + "/notebook");
|
||||
notebookDir.mkdirs();
|
||||
FileUtils.copyDirectory(new File("src/test/resources/interpreter"), new File(tmpDir, "interpreter"));
|
||||
|
||||
System.setProperty(ConfVars.ZEPPELIN_CONF_DIR.getVarName(), tmpDir.toString() + "/conf");
|
||||
System.setProperty(ConfVars.ZEPPELIN_HOME.getVarName(), tmpDir.getAbsolutePath());
|
||||
System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_DIR.getVarName(), notebookDir.getAbsolutePath());
|
||||
System.setProperty(ConfVars.ZEPPELIN_INTERPRETERS.getVarName(),
|
||||
"org.apache.zeppelin.interpreter.mock.MockInterpreter1," +
|
||||
"org.apache.zeppelin.interpreter.mock.MockInterpreter2," +
|
||||
"org.apache.zeppelin.interpreter.mock.MockInterpreter11");
|
||||
System.setProperty(ConfVars.ZEPPELIN_INTERPRETER_GROUP_ORDER.getVarName(),
|
||||
"mock1,mock2,mock11,dev");
|
||||
System.setProperty(ConfVars.ZEPPELIN_INTERPRETERS.getVarName(), "org.apache.zeppelin.interpreter.mock.MockInterpreter1,org.apache.zeppelin.interpreter.mock.MockInterpreter2");
|
||||
|
||||
conf = ZeppelinConfiguration.create();
|
||||
|
||||
|
|
@ -238,7 +232,7 @@ public class NotebookTest implements JobListenerFactory{
|
|||
p1.setText("hello world");
|
||||
note.run(p1.getId());
|
||||
|
||||
while(p1.isTerminated()==false || p1.getResult()==null) Thread.yield();
|
||||
while(p1.isTerminated() == false || p1.getResult() == null) Thread.yield();
|
||||
assertEquals("repl1: hello world", p1.getResult().message());
|
||||
|
||||
// clear paragraph output/result
|
||||
|
|
@ -273,7 +267,7 @@ public class NotebookTest implements JobListenerFactory{
|
|||
note.runAll();
|
||||
|
||||
// wait for finish
|
||||
while(p3.isTerminated()==false) {
|
||||
while(p3.isTerminated() == false) {
|
||||
Thread.yield();
|
||||
}
|
||||
|
||||
|
|
@ -285,7 +279,7 @@ public class NotebookTest implements JobListenerFactory{
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testSchedule() throws InterruptedException, IOException{
|
||||
public void testSchedule() throws InterruptedException, IOException {
|
||||
// create a note and a paragraph
|
||||
Note note = notebook.createNote(null);
|
||||
factory.setInterpreters(note.getId(), factory.getDefaultInterpreterSettingList());
|
||||
|
|
@ -482,8 +476,8 @@ public class NotebookTest implements JobListenerFactory{
|
|||
p2.setText("%mock2 world");
|
||||
|
||||
note.runAll();
|
||||
while(p1.isTerminated()==false || p1.getResult()==null) Thread.yield();
|
||||
while(p2.isTerminated()==false || p2.getResult()==null) Thread.yield();
|
||||
while (p1.isTerminated() == false || p1.getResult() == null) Thread.yield();
|
||||
while (p2.isTerminated() == false || p2.getResult() == null) Thread.yield();
|
||||
|
||||
assertEquals(2, ResourcePoolUtils.getAllResources().size());
|
||||
|
||||
|
|
@ -622,7 +616,7 @@ public class NotebookTest implements JobListenerFactory{
|
|||
assertEquals(notebookAuthorization.isWriter(note.getId(),
|
||||
new HashSet<String>(Arrays.asList("user2"))), false);
|
||||
assertEquals(notebookAuthorization.isWriter(note.getId(),
|
||||
new HashSet<String>(Arrays.asList("user1"))), true);
|
||||
new HashSet<String>(Arrays.asList("user1"))), true);
|
||||
|
||||
// Test clearing of permssions
|
||||
notebookAuthorization.setReaders(note.getId(), Sets.<String>newHashSet());
|
||||
|
|
@ -892,30 +886,6 @@ public class NotebookTest implements JobListenerFactory{
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getEditorSetting() throws IOException, RepositoryException, SchedulerException {
|
||||
List<String> intpIds = new ArrayList<>();
|
||||
for(InterpreterSetting intpSetting: factory.get()) {
|
||||
if (intpSetting.getName().startsWith("mock1")) {
|
||||
intpIds.add(intpSetting.getId());
|
||||
}
|
||||
}
|
||||
Note note = notebook.createNote(intpIds, null);
|
||||
|
||||
// get editor setting from interpreter-setting.json
|
||||
Map<String, Object> editor = note.getEditorSetting("mock11");
|
||||
assertEquals("java", editor.get("language"));
|
||||
|
||||
// when interpreter is not loaded via interpreter-setting.json
|
||||
// or editor setting doesn't exit
|
||||
editor = note.getEditorSetting("mock1");
|
||||
assertEquals(null, editor.get("language"));
|
||||
|
||||
// when interpreter is not bound to note
|
||||
editor = note.getEditorSetting("mock2");
|
||||
assertEquals("text", editor.get("language"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParagraphJobListener getParagraphJobListener(Note note) {
|
||||
return new ParagraphJobListener(){
|
||||
|
|
|
|||
Loading…
Reference in a new issue