Repository: zeppelin Updated Branches: refs/heads/master 922364f36 -> b89e35e01
[ZEPPELIN-1069]Ignore implicit interpreter when user enter wrong interpreter name ### What is this PR for? Ignore implicit interpreter when user enter wrong interpreter name linked to https://github.com/apache/zeppelin/pull/806#issuecomment-227041293 This PR is related to #1113 ZEPPELIN-1069 branch was force push, so couldn't reopen that PR. ### What type of PR is it? Improvement ### What is the Jira issue? https://issues.apache.org/jira/browse/ZEPPELIN-1069 ### How should this be tested? Unit test Run-time checking ### Screenshots (if appropriate) ![zeppelin-1069-gif](https://cloud.githubusercontent.com/assets/10624086/17268431/d6d9370c-5664-11e6-9274-d0244d60a8c9.gif) ### Questions: * Does the licenses files need update? no * Is there breaking changes for older versions? no * Does this needs documentation? no Author: Minwoo Kang <minwoo.k...@outlook.com> Closes #1248 from mwkang/ZEPPELIN-1069 and squashes the following commits: 3976a96 [Minwoo Kang] Remove wild card import fa7a194 [Minwoo Kang] Fix CI failed f0eedeb [Minwoo Kang] Remove unnecessary method. 6e91dfe [Minwoo Kang] Remove unnecessary method. dd60d72 [Minwoo Kang] Fixed CI 046f5f4 [Minwoo Kang] Modify static import position. 6082e28 [Minwoo Kang] Modify that StringUtils is static import 02a1c2a [Minwoo Kang] Refactor method name 4912c5c [Minwoo Kang] Add test cases b6520be [Minwoo Kang] Add function that is replName is binding. Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/b89e35e0 Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/b89e35e0 Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/b89e35e0 Branch: refs/heads/master Commit: b89e35e01f627a7f47f0dce23d78e2558e7db7ae Parents: 922364f Author: Minwoo Kang <minwoo.k...@outlook.com> Authored: Wed Aug 17 13:42:36 2016 +0900 Committer: Alexander Bezzubov <b...@apache.org> Committed: Fri Sep 2 16:47:31 2016 +0900 ---------------------------------------------------------------------- .../java/org/apache/zeppelin/notebook/Note.java | 20 ++++++++++++++------ .../org/apache/zeppelin/notebook/NoteTest.java | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b89e35e0/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java index 5f0f7c1..1d75d10 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java @@ -32,7 +32,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import com.google.gson.Gson; -import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +57,11 @@ import org.apache.zeppelin.search.SearchService; import org.apache.zeppelin.user.AuthenticationInfo; import org.apache.zeppelin.user.Credentials; +import static org.apache.commons.lang.StringUtils.EMPTY; +import static org.apache.commons.lang.StringUtils.isEmpty; +import static org.apache.commons.lang.StringUtils.isNotEmpty; +import static org.apache.commons.lang.StringUtils.isBlank; + /** * Binded interpreters for a note */ @@ -78,7 +82,7 @@ public class Note implements Serializable, ParagraphJobListener { private String name = ""; private String id; - private AtomicReference<String> lastReplName = new AtomicReference<>(StringUtils.EMPTY); + private AtomicReference<String> lastReplName = new AtomicReference<>(EMPTY); private transient ZeppelinConfiguration conf = ZeppelinConfiguration.create(); private Map<String, List<AngularObject>> angularObjects = new HashMap<>(); @@ -124,7 +128,7 @@ public class Note implements Serializable, ParagraphJobListener { private String getDefaultInterpreterName() { InterpreterSetting setting = factory.getDefaultInterpreterSetting(getId()); - return null != setting ? setting.getName() : StringUtils.EMPTY; + return null != setting ? setting.getName() : EMPTY; } void putDefaultReplName() { @@ -295,13 +299,17 @@ public class Note implements Serializable, ParagraphJobListener { */ private void addLastReplNameIfEmptyText(Paragraph p) { String replName = lastReplName.get(); - if (StringUtils.isEmpty(p.getText()) && StringUtils.isNotEmpty(replName)) { + if (isEmpty(p.getText()) && isNotEmpty(replName) && isBinding(replName)) { p.setText(getInterpreterName(replName) + " "); } } + public boolean isBinding(String replName) { + return factory.getInterpreter(this.getId(), replName) != null; + } + private String getInterpreterName(String replName) { - return StringUtils.isBlank(replName) ? StringUtils.EMPTY : "%" + replName; + return isBlank(replName) ? EMPTY : "%" + replName; } /** @@ -600,7 +608,7 @@ public class Note implements Serializable, ParagraphJobListener { } private void setLastReplName(Paragraph lastParagraphStarted) { - if (StringUtils.isNotEmpty(lastParagraphStarted.getRequiredReplName())) { + if (isNotEmpty(lastParagraphStarted.getRequiredReplName())) { lastReplName.set(lastParagraphStarted.getRequiredReplName()); } } http://git-wip-us.apache.org/repos/asf/zeppelin/blob/b89e35e0/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java index 255e609..4917ac4 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java @@ -23,6 +23,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.zeppelin.interpreter.Interpreter; import org.apache.zeppelin.interpreter.InterpreterFactory; import org.apache.zeppelin.interpreter.InterpreterSetting; +import org.apache.zeppelin.interpreter.mock.MockInterpreter2; import org.apache.zeppelin.notebook.repo.NotebookRepo; import org.apache.zeppelin.scheduler.Scheduler; import org.apache.zeppelin.search.SearchService; @@ -117,6 +118,7 @@ public class NoteTest { Note note = new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener); note.putDefaultReplName(); //set lastReplName + when(interpreterFactory.getInterpreter(note.getId(), "spark")).thenReturn(new MockInterpreter2(null)); Paragraph p = note.addParagraph(); @@ -132,6 +134,7 @@ public class NoteTest { Note note = new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener); note.putDefaultReplName(); //set lastReplName + when(interpreterFactory.getInterpreter(note.getId(), "spark")).thenReturn(new MockInterpreter2(null)); Paragraph p = note.insertParagraph(note.getParagraphs().size()); @@ -150,4 +153,20 @@ public class NoteTest { assertEquals("spark", note.getLastReplName()); } + + @Test + public void isBindingTest() { + Note note = spy(new Note()); + when(note.getId()).thenReturn("test1"); + InterpreterFactory mockInterpreterFactory = mock(InterpreterFactory.class); + note.setInterpreterFactory(mockInterpreterFactory); + + //when is not binding + assertFalse(note.isBinding("spark")); + + //when is binding + when(mockInterpreterFactory.getInterpreter("test1", "spark")). + thenReturn(new MockInterpreter2(null)); + assertTrue(note.isBinding("spark")); + } }