jalview/analysis/AAFrequency.js
jalview/analysis/AlignSeq.js
+jalview/analysis/AlignmentAnnotationUtils.js
+jalview/analysis/AlignmentUtils.js
jalview/analysis/AnnotationSorter.js
jalview/analysis/Conservation.js
jalview/analysis/CrossRef.js
+jalview/analysis/NJTree.js
+jalview/analysis/SeqsetUtils.js
+jalview/analysis/TreeBuilder.js
+jalview/analysis/TreeModel.js
jalview/analysis/scoremodels/DistanceScoreModel.js
jalview/analysis/scoremodels/FeatureDistanceModel.js
jalview/analysis/scoremodels/PIDModel.js
jalview/analysis/scoremodels/ScoreMatrix.js
jalview/analysis/scoremodels/ScoreModels.js
+jalview/analysis/scoremodels/SimilarityParams.js
jalview/analysis/scoremodels/SimilarityScoreModel.js
jalview/api/AlignCalcManagerI.js
jalview/api/AlignCalcWorkerI.js
jalview/api/ViewStyleI.js
jalview/api/analysis/PairwiseScoreModelI.js
jalview/api/analysis/ScoreModelI.js
+jalview/api/analysis/SimilarityParamsI.js
jalview/bin/ArgsParser.js
jalview/bin/BuildDetails.js
jalview/bin/Cache.js
jalview/datamodel/Alignment.js
jalview/datamodel/AlignmentAnnotation.js
jalview/datamodel/AlignmentI.js
+jalview/datamodel/AlignmentView.js
jalview/datamodel/AnnotatedCollectionI.js
jalview/datamodel/Annotation.js
+jalview/datamodel/BinaryNode.js
+jalview/datamodel/CigarArray.js
+jalview/datamodel/CigarBase.js
+jalview/datamodel/CigarSimple.js
jalview/datamodel/ColumnSelection.js
jalview/datamodel/ContiguousI.js
jalview/datamodel/DBRefSource.js
jalview/datamodel/Profiles.js
jalview/datamodel/ProfilesI.js
jalview/datamodel/Range.js
+jalview/datamodel/RangeIterator.js
jalview/datamodel/ResidueCount.js
jalview/datamodel/SearchResults.js
jalview/datamodel/SearchResultsI.js
+jalview/datamodel/SeqCigar.js
jalview/datamodel/Sequence.js
jalview/datamodel/SequenceCollectionI.js
jalview/datamodel/SequenceCursor.js
jalview/datamodel/SequenceFeature.js
jalview/datamodel/SequenceGroup.js
jalview/datamodel/SequenceI.js
+jalview/datamodel/SequenceNode.js
jalview/datamodel/features/FeatureLocationI.js
jalview/datamodel/features/FeatureMatcher.js
jalview/datamodel/features/FeatureMatcherI.js
jalview/gui/AlignmentPanel.js
jalview/gui/AnnotationLabels.js
jalview/gui/AnnotationPanel.js
+jalview/gui/CalculationChooser.js
jalview/gui/ColourMenuHelper.js
+jalview/gui/ComboBoxTooltipRenderer.js
jalview/gui/Desktop.js
jalview/gui/FeatureRenderer.js
jalview/gui/IProgressIndicator.js
jalview/gui/JalviewChangeSupport.js
jalview/gui/JvSwingUtils.js
jalview/gui/PaintRefresher.js
+jalview/gui/PopupMenu.js
+jalview/gui/Preferences.js
jalview/gui/ProgressBar.js
jalview/gui/ScalePanel.js
jalview/gui/SeqCanvas.js
jalview/gui/SeqPanel.js
jalview/gui/SequenceRenderer.js
+jalview/gui/TreeCanvas.js
+jalview/gui/TreePanel.js
jalview/gui/ViewSelectionMenu.js
jalview/io/AlignFile.js
jalview/io/AlignmentFileReaderI.js
jalview/jbgui/GAlignFrame.js
jalview/jbgui/GAlignmentPanel.js
jalview/jbgui/GDesktop.js
+jalview/jbgui/GPreferences.js
+jalview/jbgui/GTreePanel.js
+jalview/math/Matrix.js
+jalview/math/MatrixI.js
jalview/project/Jalview2XML.js
jalview/renderer/AnnotationRenderer.js
jalview/renderer/AwtRenderPanelI.js
jalview/structure/StructureImportSettings.js
jalview/structure/StructureSelectionManager.js
jalview/structure/VamsasSource.js
+jalview/urls/CustomUrlProvider.js
jalview/urls/IdOrgSettings.js
+jalview/urls/IdentifiersUrlProvider.js
+jalview/urls/UrlLinkDisplay.js
+jalview/urls/UrlLinkTableModel.js
+jalview/urls/UrlProvider.js
+jalview/urls/UrlProviderImpl.js
+jalview/urls/api/UrlProviderFactoryI.js
+jalview/urls/api/UrlProviderI.js
+jalview/urls/desktop/DesktopUrlProviderFactory.js
jalview/util/ColorUtils.js
jalview/util/Comparison.js
jalview/util/DBRefUtils.js
jalview/util/MessageManager.js
jalview/util/Platform.js
jalview/util/QuickSort.js
+jalview/util/StringUtils.js
+jalview/util/UrlLink.js
jalview/util/jarInputStreamProvider.js
jalview/util/matcher/Condition.js
jalview/util/matcher/Matcher.js
jalview/xml/binding/jalview/SequenceType.js
jalview/xml/binding/jalview/VAMSAS.js
jalview/xml/binding/jalview/WebServiceParameterSet.js
+java/applet/AppletContext.js
+java/applet/AppletStub.js
+java/applet/JSApplet.js
+java/awt/AWTEvent.js
+java/awt/AWTEventMulticaster.js
java/awt/AWTKeyStroke.js
+java/awt/ActiveEvent.js
+java/awt/Adjustable.js
java/awt/AlphaComposite.js
+java/awt/BasicStroke.js
+java/awt/BorderLayout.js
+java/awt/Color.js
+java/awt/Component.js
+java/awt/ComponentOrientation.js
java/awt/Composite.js
+java/awt/Container.js
java/awt/ContainerOrderFocusTraversalPolicy.js
+java/awt/Cursor.js
java/awt/DefaultFocusTraversalPolicy.js
java/awt/DefaultKeyboardFocusManager.js
+java/awt/Dialog.js
+java/awt/Dimension.js
+java/awt/EventDispatchThread.js
+java/awt/EventFilter.js
+java/awt/EventQueue.js
+java/awt/EventQueueItem.js
+java/awt/FlowLayout.js
java/awt/FocusTraversalPolicy.js
+java/awt/Font.js
+java/awt/FontMetrics.js
+java/awt/GraphicsCallback.js
+java/awt/GraphicsConfiguration.js
+java/awt/GraphicsDevice.js
+java/awt/GraphicsEnvironment.js
java/awt/GridLayout.js
java/awt/Image.js
+java/awt/Insets.js
+java/awt/ItemSelectable.js
+java/awt/JSComponent.js
+java/awt/JSDialog.js
+java/awt/JSFrame.js
+java/awt/JSPanel.js
java/awt/KeyEventDispatcher.js
java/awt/KeyEventPostProcessor.js
java/awt/KeyboardFocusManager.js
+java/awt/LayoutManager.js
+java/awt/LayoutManager2.js
+java/awt/LightweightDispatcher.js
+java/awt/Paint.js
+java/awt/Point.js
+java/awt/Queue.js
+java/awt/Rectangle.js
+java/awt/RenderingHints.js
+java/awt/SentEvent.js
+java/awt/Shape.js
+java/awt/Stroke.js
+java/awt/Toolkit.js
+java/awt/Transparency.js
java/awt/VKCollection.js
+java/awt/Window.js
+java/awt/color/ColorSpace.js
java/awt/datatransfer/ClipboardOwner.js
java/awt/datatransfer/FlavorMap.js
java/awt/datatransfer/FlavorTable.js
java/awt/dnd/DropTargetContext.js
java/awt/dnd/DropTargetListener.js
java/awt/dnd/peer/DropTargetPeer.js
+java/awt/event/AWTEventListener.js
+java/awt/event/ActionEvent.js
+java/awt/event/ActionListener.js
+java/awt/event/AdjustmentEvent.js
+java/awt/event/AdjustmentListener.js
java/awt/event/ComponentAdapter.js
+java/awt/event/ComponentEvent.js
+java/awt/event/ComponentListener.js
java/awt/event/ContainerEvent.js
+java/awt/event/ContainerListener.js
java/awt/event/FocusAdapter.js
+java/awt/event/FocusEvent.js
+java/awt/event/FocusListener.js
+java/awt/event/HierarchyBoundsListener.js
+java/awt/event/HierarchyListener.js
+java/awt/event/InputEvent.js
+java/awt/event/InputMethodListener.js
+java/awt/event/InvocationEvent.js
+java/awt/event/ItemEvent.js
+java/awt/event/ItemListener.js
java/awt/event/KeyAdapter.js
+java/awt/event/KeyEvent.js
+java/awt/event/KeyListener.js
java/awt/event/MouseAdapter.js
+java/awt/event/MouseEvent.js
+java/awt/event/MouseListener.js
java/awt/event/MouseMotionAdapter.js
+java/awt/event/MouseMotionListener.js
+java/awt/event/MouseWheelListener.js
+java/awt/event/TextListener.js
+java/awt/event/WindowAdapter.js
+java/awt/event/WindowEvent.js
+java/awt/event/WindowFocusListener.js
+java/awt/event/WindowListener.js
+java/awt/event/WindowStateListener.js
+java/awt/font/FontRenderContext.js
+java/awt/geom/AffineTransform.js
+java/awt/geom/Dimension2D.js
java/awt/geom/Path2D.js
java/awt/geom/PathIterator.js
+java/awt/geom/Point2D.js
java/awt/geom/RectIterator.js
+java/awt/geom/Rectangle2D.js
+java/awt/geom/RectangularShape.js
java/awt/image/BufferedImage.js
java/awt/image/ColorModel.js
java/awt/image/DataBuffer.js
java/awt/image/DataBufferInt.js
java/awt/image/DirectColorModel.js
+java/awt/image/ImageObserver.js
java/awt/image/PackedColorModel.js
java/awt/image/Raster.js
java/awt/image/RenderedImage.js
java/awt/image/SampleModel.js
java/awt/image/SinglePixelPackedSampleModel.js
java/awt/image/WritableRaster.js
+java/awt/peer/ComponentPeer.js
+java/awt/peer/ContainerPeer.js
+java/awt/peer/FramePeer.js
java/awt/peer/KeyboardFocusManagerPeer.js
+java/awt/peer/LightweightPeer.js
+java/awt/peer/WindowPeer.js
java/awt/print/Printable.js
+java/beans/ChangeListenerMap.js
+java/beans/PropertyChangeEvent.js
+java/beans/PropertyChangeListener.js
+java/beans/PropertyChangeSupport.js
java/io/BufferedInputStream.js
java/io/BufferedReader.js
java/io/ByteArrayInputStream.js
java/io/File.js
java/io/FileDescriptor.js
java/io/FileInputStream.js
+java/io/FileReader.js
java/io/FileSystem.js
java/io/FilterInputStream.js
java/io/InputStream.js
java/io/InputStreamReader.js
java/io/PushbackInputStream.js
java/io/Reader.js
+java/lang/AbstractStringBuilder.js
java/lang/AutoCloseable.js
+java/lang/Class.js
+java/lang/Enum.js
java/lang/Iterable.js
java/lang/Readable.js
java/lang/Runtime.js
+java/lang/StringBuffer.js
java/lang/StringBuilder.js
+java/lang/Thread.js
+java/lang/ThreadGroup.js
java/lang/reflect/Constructor.js
java/lang/reflect/Method.js
java/math/BigDecimal.js
java/math/RoundingMode.js
java/net/HttpURLConnection.js
java/net/MalformedURLException.js
+java/net/URL.js
java/net/URLConnection.js
java/net/URLDecoder.js
java/net/URLStreamHandler.js
+java/net/URLStreamHandlerFactory.js
+java/nio/Bits.js
+java/nio/Buffer.js
+java/nio/ByteBuffer.js
+java/nio/ByteOrder.js
+java/nio/CharBuffer.js
+java/nio/HeapByteBuffer.js
+java/nio/HeapCharBuffer.js
+java/nio/charset/Charset.js
+java/nio/charset/CharsetDecoder.js
+java/nio/charset/CoderResult.js
+java/nio/charset/CodingErrorAction.js
java/security/AccessControlContext.js
java/security/AccessController.js
java/security/PrivilegedAction.js
java/text/MessageFormat.js
java/text/NumberFormat.js
java/text/SimpleDateFormat.js
+java/util/AbstractCollection.js
+java/util/AbstractList.js
+java/util/AbstractMap.js
java/util/AbstractQueue.js
java/util/AbstractSequentialList.js
+java/util/AbstractSet.js
java/util/ArrayDeque.js
+java/util/ArrayList.js
+java/util/Arrays.js
java/util/BitSet.js
java/util/Calendar.js
java/util/Collection.js
+java/util/Collections.js
java/util/Comparator.js
java/util/Deque.js
+java/util/Dictionary.js
+java/util/DualPivotQuicksort.js
java/util/Enumeration.js
+java/util/EventListener.js
+java/util/EventObject.js
java/util/GregorianCalendar.js
+java/util/HashMap.js
+java/util/HashSet.js
+java/util/Hashtable.js
+java/util/IdentityHashMap.js
java/util/Iterator.js
java/util/LinkedHashMap.js
java/util/LinkedList.js
java/util/List.js
java/util/ListIterator.js
java/util/ListResourceBundle.js
+java/util/Locale.js
java/util/Map.js
java/util/NavigableMap.js
java/util/NavigableSet.js
java/util/TimSort.js
java/util/TimeZone.js
java/util/TreeMap.js
+java/util/TreeSet.js
+java/util/Vector.js
java/util/concurrent/AbstractExecutorService.js
java/util/concurrent/BlockingQueue.js
java/util/concurrent/ConcurrentHashMap.js
java/util/jar/JarInputStream.js
java/util/logging/Level.js
java/util/logging/Logger.js
+java/util/regex/MatchResult.js
+java/util/regex/Matcher.js
java/util/regex/Pattern.js
java/util/zip/CRC32.js
java/util/zip/Inflater.js
java/util/zip/ZipEntry.js
java/util/zip/ZipInputStream.js
javajs/api/GenericLineReader.js
+javajs/api/JSFunction.js
javajs/api/JSONEncodable.js
+javajs/util/AU.js
+javajs/util/AjaxURLConnection.js
javajs/util/AjaxURLStreamHandler.js
+javajs/util/AjaxURLStreamHandlerFactory.js
javajs/util/Encoding.js
+javajs/util/JSThread.js
+javajs/util/Lst.js
+javajs/util/PT.js
javajs/util/Rdr.js
javajs/util/SB.js
javax/swing/AbstractAction.js
+javax/swing/AbstractButton.js
+javax/swing/AbstractListModel.js
javax/swing/Action.js
+javax/swing/ActionMap.js
+javax/swing/AncestorNotifier.js
+javax/swing/ArrayTable.js
+javax/swing/BorderFactory.js
+javax/swing/BoundedRangeModel.js
+javax/swing/BoxLayout.js
+javax/swing/ButtonGroup.js
+javax/swing/ButtonModel.js
+javax/swing/ClientPropertyKey.js
+javax/swing/ComboBoxModel.js
javax/swing/ComponentInputMap.js
+javax/swing/DefaultBoundedRangeModel.js
+javax/swing/DefaultButtonModel.js
+javax/swing/DefaultComboBoxModel.js
javax/swing/DefaultDesktopManager.js
+javax/swing/DefaultListCellRenderer.js
+javax/swing/DefaultSingleSelectionModel.js
javax/swing/DesktopManager.js
javax/swing/InputMap.js
+javax/swing/JApplet.js
+javax/swing/JButton.js
+javax/swing/JCheckBox.js
+javax/swing/JCheckBoxMenuItem.js
+javax/swing/JComboBox.js
+javax/swing/JComponent.js
javax/swing/JDesktopPane.js
javax/swing/JDialog.js
+javax/swing/JFrame.js
javax/swing/JInternalFrame.js
+javax/swing/JLabel.js
+javax/swing/JLayeredPane.js
+javax/swing/JMenu.js
+javax/swing/JMenuBar.js
+javax/swing/JMenuItem.js
+javax/swing/JPanel.js
+javax/swing/JPopupMenu.js
javax/swing/JProgressBar.js
+javax/swing/JRadioButton.js
+javax/swing/JRadioButtonMenuItem.js
+javax/swing/JRootPane.js
+javax/swing/JScrollBar.js
javax/swing/JScrollPane.js
+javax/swing/JSeparator.js
javax/swing/JTabbedPane.js
+javax/swing/JToggleButton.js
javax/swing/JToolTip.js
javax/swing/JViewport.js
+javax/swing/JWindow.js
javax/swing/KeyStroke.js
+javax/swing/KeyboardManager.js
+javax/swing/ListCellRenderer.js
+javax/swing/ListModel.js
+javax/swing/LookAndFeel.js
+javax/swing/MenuElement.js
+javax/swing/MenuSelectionManager.js
+javax/swing/MutableComboBoxModel.js
+javax/swing/Popup.js
+javax/swing/PopupFactory.js
+javax/swing/RepaintManager.js
+javax/swing/RootPaneContainer.js
javax/swing/ScrollPaneConstants.js
javax/swing/ScrollPaneLayout.js
javax/swing/Scrollable.js
+javax/swing/SingleSelectionModel.js
+javax/swing/SizeRequirements.js
+javax/swing/SwingConstants.js
+javax/swing/SwingPaintEventDispatcher.js
+javax/swing/SwingUtilities.js
javax/swing/Timer.js
javax/swing/ToolTipManager.js
+javax/swing/UIDefaults.js
+javax/swing/UIManager.js
javax/swing/ViewportLayout.js
+javax/swing/WindowConstants.js
+javax/swing/border/AbstractBorder.js
+javax/swing/border/BevelBorder.js
+javax/swing/border/Border.js
+javax/swing/border/EmptyBorder.js
+javax/swing/border/EtchedBorder.js
javax/swing/border/LineBorder.js
+javax/swing/border/TitledBorder.js
+javax/swing/event/AncestorEvent.js
+javax/swing/event/AncestorListener.js
+javax/swing/event/ChangeEvent.js
+javax/swing/event/ChangeListener.js
+javax/swing/event/EventListenerList.js
javax/swing/event/InternalFrameAdapter.js
javax/swing/event/InternalFrameEvent.js
javax/swing/event/InternalFrameListener.js
+javax/swing/event/ListDataListener.js
+javax/swing/event/MenuKeyListener.js
javax/swing/event/MenuListener.js
+javax/swing/event/TableModelListener.js
+javax/swing/plaf/ActionMapUIResource.js
+javax/swing/plaf/BorderUIResource.js
+javax/swing/plaf/ColorUIResource.js
javax/swing/plaf/ComponentInputMapUIResource.js
+javax/swing/plaf/ComponentUI.js
+javax/swing/plaf/DimensionUIResource.js
+javax/swing/plaf/FontUIResource.js
+javax/swing/plaf/InsetsUIResource.js
+javax/swing/plaf/UIResource.js
+javax/swing/plaf/basic/BasicBorders.js
+javax/swing/table/AbstractTableModel.js
+javax/swing/table/TableModel.js
javax/xml/bind/ContextFinder.js
javax/xml/bind/GetPropertyAction.js
javax/xml/bind/JAXBContext.js
javax/xml/stream/XMLInputFactory.js
javax/xml/stream/XMLStreamReader.js
org/apache/xerces/jaxp/datatype/XMLGregorianCalendarImpl.js
+org/json/simple/parser/JSONParser.js
+org/json/simple/parser/ParseException.js
+org/json/simple/parser/Yylex.js
org/xml/sax/AttributeList.js
org/xml/sax/Attributes.js
org/xml/sax/ContentHandler.js
org/xml/sax/XMLReader.js
org/xml/sax/ext/Attributes2.js
sun/awt/AWTAccessor.js
+sun/awt/AWTAutoShutdown.js
+sun/awt/AppContext.js
sun/awt/CausedFocusEvent.js
+sun/awt/ComponentFactory.js
+sun/awt/EventQueueItem.js
sun/awt/KeyboardFocusManagerPeerProvider.js
+sun/awt/MostRecentKeyValue.js
+sun/awt/MostRecentThreadAppContext.js
+sun/awt/PaintEventDispatcher.js
+sun/awt/PostEventQueue.js
+sun/awt/RequestFocusController.js
sun/awt/SunGraphicsCallback.js
+sun/awt/SunToolkit.js
+sun/awt/WindowClosingListener.js
+sun/awt/WindowClosingSupport.js
sun/awt/image/DataStealer.js
sun/awt/image/IntegerComponentRaster.js
sun/awt/image/IntegerInterleavedRaster.js
sun/font/FontDesignMetrics.js
sun/java2d/StateTrackable.js
sun/java2d/StateTrackableDelegate.js
+sun/nio/cs/ArrayDecoder.js
+sun/nio/cs/HistoricallyNamedCharset.js
+sun/nio/cs/StandardCharsets.js
+sun/nio/cs/ThreadLocalCoders.js
+sun/nio/cs/UTF_8.js
+sun/nio/cs/Unicode.js
sun/swing/DefaultLookup.js
+sun/swing/SwingLazyValue.js
+sun/swing/UIAction.js
sun/text/resources/FormatData.js
sun/text/resources/FormatData_en.js
sun/util/calendar/AbstractCalendar.js
sun/util/calendar/Gregorian.js
sun/util/calendar/ZoneInfo.js
sun/util/resources/LocaleData.js
-swingjs/JSFocusManager.js
+swingjs/JSApp.js
+swingjs/JSApplet.js
+swingjs/JSAppletThread.js
+swingjs/JSAppletViewer.js
+swingjs/JSCharSet.js
+swingjs/JSFocusPeer.js
+swingjs/JSFontMetrics.js
+swingjs/JSFrameViewer.js
+swingjs/JSGraphics2D.js
+swingjs/JSGraphicsConfiguration.js
+swingjs/JSGraphicsEnvironment.js
+swingjs/JSKeyEvent.js
+swingjs/JSMenuManager.js
+swingjs/JSMouse.js
+swingjs/JSScreenDevice.js
+swingjs/JSThreadGroup.js
+swingjs/JSToolkit.js
+swingjs/JSUtil.js
swingjs/a2s/Dialog.js
+swingjs/api/Interface.js
+swingjs/api/js/DOMNode.js
+swingjs/api/js/HTML5CanvasContext2D.js
+swingjs/api/js/JSInterface.js
+swingjs/jquery/JQueryUI.js
swingjs/jzlib/Adler32.js
swingjs/jzlib/CRC32.js
swingjs/jzlib/Checksum.js
swingjs/jzlib/Inflater.js
swingjs/jzlib/InflaterInputStream.js
swingjs/jzlib/ZStream.js
+swingjs/plaf/ButtonListener.js
+swingjs/plaf/DefaultMenuLayout.js
+swingjs/plaf/HTML5LookAndFeel.js
swingjs/plaf/JSAppletUI.js
+swingjs/plaf/JSButtonUI.js
+swingjs/plaf/JSCheckBoxMenuItemUI.js
+swingjs/plaf/JSCheckBoxUI.js
+swingjs/plaf/JSComboBoxUI.js
+swingjs/plaf/JSComponentUI.js
swingjs/plaf/JSDesktopIconUI.js
swingjs/plaf/JSDesktopPaneUI.js
+swingjs/plaf/JSEventHandler.js
+swingjs/plaf/JSFrameUI.js
swingjs/plaf/JSGraphicsUtils.js
swingjs/plaf/JSInternalFrameUI.js
+swingjs/plaf/JSLabelUI.js
+swingjs/plaf/JSLayeredPaneUI.js
+swingjs/plaf/JSLightweightUI.js
+swingjs/plaf/JSMenuBarUI.js
+swingjs/plaf/JSMenuItemUI.js
+swingjs/plaf/JSMenuUI.js
+swingjs/plaf/JSPanelUI.js
+swingjs/plaf/JSPopupMenuSeparatorUI.js
+swingjs/plaf/JSPopupMenuUI.js
+swingjs/plaf/JSPopupUI.js
swingjs/plaf/JSProgressBarUI.js
+swingjs/plaf/JSRadioButtonMenuItemUI.js
+swingjs/plaf/JSRadioButtonUI.js
+swingjs/plaf/JSRootPaneUI.js
+swingjs/plaf/JSScrollBarUI.js
swingjs/plaf/JSScrollPaneUI.js
+swingjs/plaf/JSSeparatorUI.js
+swingjs/plaf/JSSliderUI.js
swingjs/plaf/JSTabbedPaneUI.js
swingjs/plaf/JSToolTipUI.js
swingjs/plaf/JSViewportUI.js
+swingjs/plaf/JSWindowUI.js
+swingjs/plaf/LazyActionMap.js
+swingjs/plaf/Resizer.js
swingjs/xml/JSJAXBClass.js
swingjs/xml/JSJAXBContext.js
swingjs/xml/JSJAXBContextFactory.js
swingjs/xml/JSSAXParser.js
swingjs/xml/JSXMLGregorianCalendarImpl.js
swingjs/xml/JSXMLInputFactory.js
-swingjs/xml/JSXMLStreamReader.js
\ No newline at end of file
+swingjs/xml/JSXMLStreamReader.js
--- /dev/null
+Java version: 1.8.0_191
+amd64 Windows 10 10.0
+Error reading author details: java.io.FileNotFoundException: C:\Users\hansonr\git\jalview1\classes (Access is denied)
+Error reading build details: java.io.FileNotFoundException: C:\Users\hansonr\git\jalview1\classes (Access is denied)
+Jalview Version: Test
+INFO - Getting messages for lang: en_US
+Platform: timer mark 0.0 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/lookup/id/ENSG00000157764?content-type=application/json
+Platform: timer mark 0.618 0.618 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.619 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.619 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 0.749 0.13 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.749 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.749 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/rest?content-type=application/json
+Platform: timer mark 0.881 0.132 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.881 0.0 EnsembleRestClient.getJSON2 ...done
+EnsemblRestClient expected ENSEMBL REST version 7.0 but found 9.0, see https://github.com/Ensembl/ensembl-rest/wiki/Change-log
+Platform: timer mark 0.885 0.004 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/data?content-type=application/json
+Platform: timer mark 1.017 0.132 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 1.018 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 1.018 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 1.018 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENSG00000157764?type=genomic&Accept=application/json&content-type=application/json&object_type=Gene
+Platform: timer mark 1.298 0.28 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 2.225 0.927 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 2.258 0.033 EnsembleRestClient.getJSON0 https://rest.ensembl.org/overlap/id/ENSG00000157764?content-type=application/json&object_type=Gene&feature=gene&feature=transcript&feature=exon&feature=cds&feature=variation
+Platform: timer mark 7.331 5.073 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 49.341 42.01 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 51.216 1.875 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSG00000157764?content-type=application/json&all_levels=1
+Platform: timer mark 52.088 0.872 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 52.552 0.464 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 52.581 0.029 EnsembleRestClient.getJSON0 https://rest.ensembl.org/lookup/id/ENSG00000157764?content-type=application/json&object_type=Gene
+Platform: timer mark 52.716 0.135 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 52.716 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 52.769 0.053 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646891?content-type=application/json&all_levels=1
+Platform: timer mark 53.223 0.454 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 53.344 0.121 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646891
+Platform: timer mark 53.353 0.009 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 53.486 0.133 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 53.486 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 53.487 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 53.487 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646891?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 53.68 0.193 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 53.68 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 53.681 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493543?content-type=application/json&all_levels=1
+Platform: timer mark 53.893 0.212 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 54.004 0.111 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 54.152 0.148 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000496384?content-type=application/json&all_levels=1
+Platform: timer mark 54.317 0.165 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 54.318 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000496384
+Platform: timer mark 54.318 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 54.318 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000496384?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 54.482 0.164 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 54.482 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 54.482 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000419060?content-type=application/json&all_levels=1
+Platform: timer mark 54.627 0.145 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 54.628 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 54.646 0.018 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000469930?content-type=application/json&all_levels=1
+Platform: timer mark 54.821 0.175 EnsembleRestClient.getJSON1 parsing...
+Adding protein product for ENST00000469930
+Platform: timer mark 54.821 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 54.821 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 54.821 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000469930?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 54.965 0.144 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 54.965 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 54.965 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000495858?content-type=application/json&all_levels=1
+Platform: timer mark 55.112 0.147 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 55.112 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 55.134 0.022 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000288602?content-type=application/json&all_levels=1
+Platform: timer mark 55.304 0.17 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 55.304 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000288602
+Platform: timer mark 55.304 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 55.304 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000288602?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 55.455 0.151 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 55.456 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 55.456 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000288602?content-type=application/json&all_levels=1
+Platform: timer mark 55.599 0.143 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 55.599 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 55.622 0.023 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642272?content-type=application/json&all_levels=1
+Platform: timer mark 55.758 0.136 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 55.758 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 55.758 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 55.758 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642272?type=protein&Accept=application/json&content-type=application/json
+Adding protein product for ENST00000642272
+Response code 400
+No protein product found for ENST00000642272
+Platform: timer mark 55.9 0.142 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 55.9 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 55.91 0.01 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000643790?content-type=application/json&all_levels=1
+Platform: timer mark 56.292 0.382 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 56.292 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000643790
+Platform: timer mark 56.292 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 56.292 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000643790?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 56.438 0.146 EnsembleRestClient.getJSON1 parsing...
+No protein product found for ENST00000643790
+Platform: timer mark 56.438 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 56.447 0.009 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646427?content-type=application/json&all_levels=1
+Platform: timer mark 56.816 0.369 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 56.816 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646427
+Platform: timer mark 56.816 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 56.816 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646427?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 56.956 0.14 EnsembleRestClient.getJSON1 parsing...
+No protein product found for ENST00000646427
+Platform: timer mark 56.956 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 56.965 0.009 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642808?content-type=application/json&all_levels=1
+Platform: timer mark 57.343 0.378 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 57.344 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642808
+Platform: timer mark 57.344 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 57.344 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642808?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 57.483 0.139 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 57.483 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642808
+Platform: timer mark 57.491 0.008 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000643356?content-type=application/json&all_levels=1
+Platform: timer mark 57.873 0.382 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 57.873 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 57.873 0.0 EnsemblSeqProx.fetchSeq
+Adding protein product for ENST00000643356
+Platform: timer mark 57.873 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000643356?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 58.018 0.145 EnsembleRestClient.getJSON1 parsing... No protein product found for ENST00000643356
+
+Platform: timer mark 58.018 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 58.034 0.016 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000497784?content-type=application/json&all_levels=1
+Platform: timer mark 58.413 0.379 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 58.413 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000497784
+Platform: timer mark 58.413 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 58.414 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000497784?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 58.599 0.185 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 58.599 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 58.6 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000420119?content-type=application/json&all_levels=1
+Platform: timer mark 58.745 0.145 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 58.745 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 58.759 0.014 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646334?content-type=application/json&all_levels=1
+Platform: timer mark 58.896 0.137 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 58.896 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646334
+Platform: timer mark 58.896 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 58.896 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646334?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 59.037 0.141 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 59.037 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000646334
+Platform: timer mark 59.054 0.017 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646730?content-type=application/json&all_levels=1
+Platform: timer mark 59.499 0.445 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 59.499 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646730
+Platform: timer mark 59.5 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 59.5 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646730?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 59.659 0.159 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 59.659 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 59.659 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000494784?content-type=application/json&all_levels=1
+Platform: timer mark 59.803 0.144 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 59.804 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 59.819 0.015 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644650?content-type=application/json&all_levels=1
+Platform: timer mark 59.989 0.17 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 59.989 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644650
+Platform: timer mark 59.989 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 59.989 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644650?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 60.151 0.162 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 60.151 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 60.151 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493783?content-type=application/json&all_levels=1
+Platform: timer mark 60.301 0.15 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 60.301 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 60.316 0.015 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000647434?content-type=application/json&all_levels=1
+Platform: timer mark 60.469 0.153 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 60.469 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000647434
+Platform: timer mark 60.47 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 60.47 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000647434?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 60.615 0.145 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 60.615 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 60.615 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000495132?content-type=application/json&all_levels=1
+Platform: timer mark 60.765 0.15 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 60.765 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 60.779 0.014 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000479537?content-type=application/json&all_levels=1
+Platform: timer mark 60.935 0.156 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 60.935 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 60.935 0.0 EnsemblSeqProx.fetchSeq
+Adding protein product for ENST00000479537
+Platform: timer mark 60.935 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000479537?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 61.352 0.417 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 61.353 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 61.357 0.004 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000418033?content-type=application/json&all_levels=1
+Platform: timer mark 61.506 0.149 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 61.507 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 61.519 0.012 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000645443?content-type=application/json&all_levels=1
+Platform: timer mark 61.706 0.187 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 61.706 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000645443
+Platform: timer mark 61.706 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 61.706 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000645443?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 61.845 0.139 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 61.845 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000645443
+Platform: timer mark 61.863 0.018 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644905?content-type=application/json&all_levels=1
+Platform: timer mark 62.242 0.379 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 62.242 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644905
+Platform: timer mark 62.243 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 62.243 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644905?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 62.382 0.139 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 62.382 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000644905
+Platform: timer mark 62.398 0.016 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642228?content-type=application/json&all_levels=1
+Platform: timer mark 62.792 0.394 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 62.792 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642228
+Platform: timer mark 62.793 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 62.793 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642228?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 62.962 0.169 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 62.962 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 62.962 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493678?content-type=application/json&all_levels=1
+Platform: timer mark 63.117 0.155 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 63.117 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 63.137 0.02 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644969?content-type=application/json&all_levels=1
+Platform: timer mark 63.311 0.174 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 63.311 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644969
+Platform: timer mark 63.312 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 63.312 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644969?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 63.467 0.155 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 63.467 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 63.467 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000496776?content-type=application/json&all_levels=1
+Platform: timer mark 63.622 0.155 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 63.622 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 63.641 0.019 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644120?content-type=application/json&all_levels=1
+Platform: timer mark 63.79 0.149 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 63.79 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644120
+Platform: timer mark 63.79 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 63.925 0.135 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 63.925 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 63.925 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 63.925 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644120?type=protein&Accept=application/json&content-type=application/json
+No protein product found for ENST00000644120
+Response code 400
+Platform: timer mark 64.069 0.144 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 64.069 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 64.112 0.043 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642875?content-type=application/json&all_levels=1
+Platform: timer mark 64.483 0.371 EnsembleRestClient.getJSON1 parsing...
+Adding protein product for ENST00000642875
+Platform: timer mark 64.483 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 64.483 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 64.483 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642875?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 64.626 0.143 EnsembleRestClient.getJSON1 parsing...
+No protein product found for ENST00000642875
+Platform: timer mark 64.626 0.0 EnsembleRestClient.getJSON2 ...done
--- /dev/null
+Platform: timer mark 0.0 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/lookup/id/ENSG00000157764?content-type=application/json
+Platform: timer mark 0.575 0.575 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.579 0.004 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.585 0.006 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 0.799 0.214 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.8 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.8 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/rest?content-type=application/json
+Platform: timer mark 0.999 0.199 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 1.0 0.001 EnsembleRestClient.getJSON2 ...done
+EnsemblRestClient expected ENSEMBL REST version 7.0 but found 9.0, see https://github.com/Ensembl/ensembl-rest/wiki/Change-log
+Platform: timer mark 1.017 0.017 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/data?content-type=application/json
+Platform: timer mark 1.198 0.181 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 1.198 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 1.199 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 1.2 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENSG00000157764?type=genomic&Accept=application/json&content-type=application/json&object_type=Gene
+Platform: timer mark 4.001 2.801 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 4.001 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 4.569 0.568 EnsembleRestClient.getJSON0 https://rest.ensembl.org/overlap/id/ENSG00000157764?content-type=application/json&object_type=Gene&feature=gene&feature=transcript&feature=exon&feature=cds&feature=variation
+Platform: timer mark 19.839 15.27 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 19.839 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 20.13 0.291 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSG00000157764?content-type=application/json&all_levels=1
+Platform: timer mark 20.898 0.768 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 20.899 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 71.77 50.871 EnsembleRestClient.getJSON0 https://rest.ensembl.org/lookup/id/ENSG00000157764?content-type=application/json&object_type=Gene
+Platform: timer mark 72.199 0.429 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 72.199 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 72.6 0.401 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646891?content-type=application/json&all_levels=1
+Platform: timer mark 73.692 1.092 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 73.694 0.002 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646891
+Platform: timer mark 73.797 0.103 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 74.009 0.212 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 74.009 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 74.01 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 74.011 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646891?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 74.215 0.204 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 74.216 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 74.219 0.003 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493543?content-type=application/json&all_levels=1
+Platform: timer mark 74.697 0.478 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 74.697 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 74.924 0.227 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000496384?content-type=application/json&all_levels=1
+Platform: timer mark 75.12 0.196 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 75.12 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000496384
+Platform: timer mark 75.144 0.024 EnsemblSeqProx.fetchSeq
+Platform: timer mark 75.145 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000496384?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 75.325 0.18 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 75.326 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 75.331 0.005 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000419060?content-type=application/json&all_levels=1
+Platform: timer mark 75.535 0.204 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 75.535 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 75.65 0.115 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000469930?content-type=application/json&all_levels=1
+Platform: timer mark 75.826 0.176 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 75.827 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000469930
+Platform: timer mark 75.831 0.004 EnsemblSeqProx.fetchSeq
+Platform: timer mark 75.832 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000469930?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 76.027 0.195 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 76.028 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 76.028 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000495858?content-type=application/json&all_levels=1
+Platform: timer mark 76.223 0.195 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 76.224 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 76.331 0.107 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000288602?content-type=application/json&all_levels=1
+Platform: timer mark 76.541 0.21 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 76.541 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000288602
+Platform: timer mark 76.55 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 76.55 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000288602?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 76.733 0.183 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 76.734 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 76.736 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000288602?content-type=application/json&all_levels=1
+Platform: timer mark 76.928 0.192 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 76.93 0.002 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 77.047 0.117 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642272?content-type=application/json&all_levels=1
+Platform: timer mark 77.239 0.192 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 77.239 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642272
+Platform: timer mark 77.246 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 77.247 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642272?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 77.45 0.203 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 77.45 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642272
+Platform: timer mark 77.551 0.101 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000643790?content-type=application/json&all_levels=1
+Platform: timer mark 77.947 0.396 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 77.948 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000643790
+Platform: timer mark 77.95 0.002 EnsemblSeqProx.fetchSeq
+Platform: timer mark 77.952 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000643790?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 78.148 0.196 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 78.149 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000643790
+Platform: timer mark 78.247 0.098 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646427?content-type=application/json&all_levels=1
+Platform: timer mark 78.656 0.409 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 78.656 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646427
+Platform: timer mark 78.662 0.006 EnsemblSeqProx.fetchSeq
+Platform: timer mark 78.664 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646427?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 78.866 0.202 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 78.866 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000646427
+Platform: timer mark 78.966 0.1 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642808?content-type=application/json&all_levels=1
+Platform: timer mark 79.365 0.399 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 79.366 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642808
+Platform: timer mark 79.368 0.002 EnsemblSeqProx.fetchSeq
+Platform: timer mark 79.369 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642808?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 79.554 0.185 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 79.555 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642808
+Platform: timer mark 79.653 0.098 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000643356?content-type=application/json&all_levels=1
+Platform: timer mark 80.065 0.412 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 80.066 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000643356
+Platform: timer mark 80.069 0.003 EnsemblSeqProx.fetchSeq
+Platform: timer mark 80.07 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000643356?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 80.252 0.182 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 80.253 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000643356
+Platform: timer mark 80.354 0.101 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000497784?content-type=application/json&all_levels=1
+Platform: timer mark 80.761 0.407 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 80.762 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000497784
+Platform: timer mark 80.769 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 80.769 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000497784?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 80.964 0.195 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 80.966 0.002 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 80.967 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000420119?content-type=application/json&all_levels=1
+Platform: timer mark 81.159 0.192 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 81.16 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 81.266 0.106 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646334?content-type=application/json&all_levels=1
+Platform: timer mark 81.464 0.198 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 81.465 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646334
+Platform: timer mark 81.47 0.005 EnsemblSeqProx.fetchSeq
+Platform: timer mark 81.471 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646334?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 81.664 0.193 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 81.665 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000646334
+Platform: timer mark 81.77 0.105 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646730?content-type=application/json&all_levels=1
+Platform: timer mark 82.281 0.511 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 82.283 0.002 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646730
+Platform: timer mark 82.29 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 82.291 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646730?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 82.459 0.168 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 82.46 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 82.461 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000494784?content-type=application/json&all_levels=1
+Platform: timer mark 82.664 0.203 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 82.664 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 82.777 0.113 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644650?content-type=application/json&all_levels=1
+Platform: timer mark 82.99 0.213 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 82.991 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644650
+Platform: timer mark 82.996 0.005 EnsemblSeqProx.fetchSeq
+Platform: timer mark 82.997 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644650?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 83.186 0.189 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.187 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 83.188 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493783?content-type=application/json&all_levels=1
+Platform: timer mark 83.389 0.201 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.389 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 83.497 0.108 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000647434?content-type=application/json&all_levels=1
+Platform: timer mark 83.795 0.298 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.796 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000647434
+Platform: timer mark 83.802 0.006 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 83.993 0.191 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.994 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 83.995 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 83.996 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000647434?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 84.293 0.297 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.294 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 84.296 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000495132?content-type=application/json&all_levels=1
+Platform: timer mark 84.491 0.195 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.491 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 84.598 0.107 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000479537?content-type=application/json&all_levels=1
+Platform: timer mark 84.791 0.193 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.792 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000479537
+Platform: timer mark 84.797 0.005 EnsemblSeqProx.fetchSeq
+Platform: timer mark 84.797 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000479537?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 84.991 0.194 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.992 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 84.993 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000418033?content-type=application/json&all_levels=1
+Platform: timer mark 85.187 0.194 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.188 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 85.29 0.102 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000645443?content-type=application/json&all_levels=1
+Platform: timer mark 85.471 0.181 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.473 0.002 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000645443
+Platform: timer mark 85.478 0.005 EnsemblSeqProx.fetchSeq
+Platform: timer mark 85.48 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000645443?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 85.693 0.213 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.694 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000645443
+Platform: timer mark 85.804 0.11 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644905?content-type=application/json&all_levels=1
+Platform: timer mark 86.175 0.371 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 86.176 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644905
+Platform: timer mark 86.187 0.011 EnsemblSeqProx.fetchSeq
+Platform: timer mark 86.188 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644905?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 86.389 0.201 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 86.389 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000644905
+Platform: timer mark 86.526 0.137 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642228?content-type=application/json&all_levels=1
+Platform: timer mark 86.989 0.463 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 86.989 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642228
+Platform: timer mark 86.998 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 86.998 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642228?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 87.219 0.221 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 87.219 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 87.221 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493678?content-type=application/json&all_levels=1
+Platform: timer mark 87.392 0.171 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 87.393 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 87.508 0.115 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644969?content-type=application/json&all_levels=1
+Platform: timer mark 87.708 0.2 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 87.709 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644969
+Platform: timer mark 87.718 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 87.719 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644969?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 87.917 0.198 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 87.918 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 87.919 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000496776?content-type=application/json&all_levels=1
+Platform: timer mark 88.093 0.174 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 88.094 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 88.205 0.111 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644120?content-type=application/json&all_levels=1
+Platform: timer mark 88.392 0.187 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 88.393 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644120
+Platform: timer mark 88.402 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 88.403 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644120?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 88.592 0.189 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 88.592 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000644120
+Platform: timer mark 88.698 0.106 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642875?content-type=application/json&all_levels=1
+Platform: timer mark 89.091 0.393 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 89.092 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642875
+Platform: timer mark 89.1 0.008 EnsemblSeqProx.fetchSeq
+Platform: timer mark 89.101 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642875?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 89.293 0.192 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 89.293 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642875
--- /dev/null
+Platform: timer mark 0.0 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/lookup/id/ENSG00000157764?content-type=application/json
+Platform: timer mark 0.494 0.494 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.497 0.003 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.504 0.007 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 0.644 0.14 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.644 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.646 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/rest?content-type=application/json
+Platform: timer mark 0.79 0.144 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.791 0.001 EnsembleRestClient.getJSON2 ...done
+EnsemblRestClient expected ENSEMBL REST version 7.0 but found 9.0, see https://github.com/Ensembl/ensembl-rest/wiki/Change-log
+Platform: timer mark 0.807 0.016 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/data?content-type=application/json
+Platform: timer mark 0.948 0.141 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 0.948 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 0.949 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 0.95 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENSG00000157764?type=genomic&Accept=application/json&content-type=application/json&object_type=Gene
+Platform: timer mark 2.818 1.868 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 2.819 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 3.466 0.647 EnsembleRestClient.getJSON0 https://rest.ensembl.org/overlap/id/ENSG00000157764?content-type=application/json&object_type=Gene&feature=gene&feature=transcript&feature=exon&feature=cds&feature=variation
+Platform: timer mark 35.082 31.616 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 35.082 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 35.602 0.52 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSG00000157764?content-type=application/json&all_levels=1
+Platform: timer mark 36.379 0.777 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 36.379 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 78.898 42.519 EnsembleRestClient.getJSON0 https://rest.ensembl.org/lookup/id/ENSG00000157764?content-type=application/json&object_type=Gene
+Platform: timer mark 79.373 0.475 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 79.373 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 79.937 0.564 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646891?content-type=application/json&all_levels=1
+Platform: timer mark 81.009 1.072 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 81.01 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646891
+Platform: timer mark 81.194 0.184 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 81.342 0.148 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 81.342 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 81.343 0.001 EnsemblSeqProx.fetchSeq
+Platform: timer mark 81.345 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646891?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 81.698 0.353 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 81.699 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 81.702 0.003 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493543?content-type=application/json&all_levels=1
+Platform: timer mark 82.213 0.511 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 82.213 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 82.757 0.544 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000496384?content-type=application/json&all_levels=1
+Platform: timer mark 83.001 0.244 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.002 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000496384
+Platform: timer mark 83.026 0.024 EnsemblSeqProx.fetchSeq
+Platform: timer mark 83.026 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000496384?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 83.204 0.178 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.204 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 83.207 0.003 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000419060?content-type=application/json&all_levels=1
+Platform: timer mark 83.359 0.152 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.359 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 83.727 0.368 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000469930?content-type=application/json&all_levels=1
+Platform: timer mark 83.89 0.163 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 83.89 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000469930
+Platform: timer mark 83.897 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 83.897 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000469930?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 84.061 0.164 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.062 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 84.063 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000495858?content-type=application/json&all_levels=1
+Platform: timer mark 84.311 0.248 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.311 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 84.667 0.356 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000288602?content-type=application/json&all_levels=1
+Platform: timer mark 84.911 0.244 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 84.912 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000288602
+Platform: timer mark 84.922 0.01 EnsemblSeqProx.fetchSeq
+Platform: timer mark 84.922 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000288602?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 85.109 0.187 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.11 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 85.115 0.005 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000288602?content-type=application/json&all_levels=1
+Platform: timer mark 85.266 0.151 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.267 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 85.64 0.373 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642272?content-type=application/json&all_levels=1
+Platform: timer mark 85.78 0.14 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.78 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642272
+Platform: timer mark 85.787 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 85.788 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642272?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 85.966 0.178 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 85.967 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642272
+Platform: timer mark 86.336 0.369 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000643790?content-type=application/json&all_levels=1
+Platform: timer mark 86.838 0.502 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 86.838 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000643790
+Platform: timer mark 86.842 0.004 EnsemblSeqProx.fetchSeq
+Platform: timer mark 86.843 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000643790?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 86.991 0.148 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 86.992 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000643790
+Platform: timer mark 87.335 0.343 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646427?content-type=application/json&all_levels=1
+Platform: timer mark 87.803 0.468 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 87.804 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646427
+Platform: timer mark 87.811 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 87.811 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646427?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 87.999 0.188 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 87.999 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000646427
+Platform: timer mark 88.337 0.338 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642808?content-type=application/json&all_levels=1
+Platform: timer mark 88.735 0.398 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 88.735 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642808
+Platform: timer mark 88.739 0.004 EnsemblSeqProx.fetchSeq
+Platform: timer mark 88.74 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642808?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 88.904 0.164 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 88.904 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642808
+Platform: timer mark 89.263 0.359 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000643356?content-type=application/json&all_levels=1
+Platform: timer mark 89.649 0.386 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 89.65 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000643356
+Platform: timer mark 89.654 0.004 EnsemblSeqProx.fetchSeq
+Platform: timer mark 89.655 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000643356?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 89.842 0.187 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 89.842 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000643356
+Platform: timer mark 90.199 0.357 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000497784?content-type=application/json&all_levels=1
+Platform: timer mark 90.622 0.423 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 90.623 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000497784
+Platform: timer mark 90.63 0.007 EnsemblSeqProx.fetchSeq
+Platform: timer mark 90.632 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000497784?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 90.817 0.185 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 90.817 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 90.82 0.003 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000420119?content-type=application/json&all_levels=1
+Platform: timer mark 91.017 0.197 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 91.018 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 91.373 0.355 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646334?content-type=application/json&all_levels=1
+Platform: timer mark 91.522 0.149 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 91.522 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646334
+Platform: timer mark 91.529 0.007 EnsembleRestClient.getJSON0 https://rest.ensembl.org/info/ping?content-type=application/json
+Platform: timer mark 91.719 0.19 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 91.72 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 91.72 0.0 EnsemblSeqProx.fetchSeq
+Platform: timer mark 91.721 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646334?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 91.92 0.199 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 91.92 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000646334
+Platform: timer mark 92.305 0.385 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000646730?content-type=application/json&all_levels=1
+Platform: timer mark 92.728 0.423 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 92.728 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000646730
+Platform: timer mark 92.74 0.012 EnsemblSeqProx.fetchSeq
+Platform: timer mark 92.741 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000646730?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 92.927 0.186 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 92.928 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 92.929 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000494784?content-type=application/json&all_levels=1
+Platform: timer mark 93.166 0.237 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 93.167 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 93.528 0.361 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644650?content-type=application/json&all_levels=1
+Platform: timer mark 93.772 0.244 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 93.773 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644650
+Platform: timer mark 93.781 0.008 EnsemblSeqProx.fetchSeq
+Platform: timer mark 93.782 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644650?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 93.949 0.167 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 93.95 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 93.951 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493783?content-type=application/json&all_levels=1
+Platform: timer mark 94.171 0.22 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 94.172 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 94.534 0.362 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000647434?content-type=application/json&all_levels=1
+Platform: timer mark 94.783 0.249 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 94.784 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000647434
+Platform: timer mark 94.79 0.006 EnsemblSeqProx.fetchSeq
+Platform: timer mark 94.791 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000647434?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 94.958 0.167 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 94.959 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 94.96 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000495132?content-type=application/json&all_levels=1
+Platform: timer mark 95.137 0.177 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 95.137 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 95.573 0.436 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000479537?content-type=application/json&all_levels=1
+Platform: timer mark 95.753 0.18 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 95.753 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000479537
+Platform: timer mark 95.759 0.006 EnsemblSeqProx.fetchSeq
+Platform: timer mark 95.76 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000479537?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 95.943 0.183 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 95.944 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 95.947 0.003 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000418033?content-type=application/json&all_levels=1
+Platform: timer mark 96.142 0.195 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 96.144 0.002 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 96.489 0.345 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000645443?content-type=application/json&all_levels=1
+Platform: timer mark 96.687 0.198 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 96.688 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000645443
+Platform: timer mark 96.694 0.006 EnsemblSeqProx.fetchSeq
+Platform: timer mark 96.696 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000645443?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 96.846 0.15 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 96.846 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000645443
+Platform: timer mark 97.211 0.365 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644905?content-type=application/json&all_levels=1
+Platform: timer mark 97.686 0.475 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 97.686 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644905
+Platform: timer mark 97.698 0.012 EnsemblSeqProx.fetchSeq
+Platform: timer mark 97.699 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644905?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 97.849 0.15 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 97.85 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000644905
+Platform: timer mark 98.268 0.418 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642228?content-type=application/json&all_levels=1
+Platform: timer mark 98.663 0.395 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 98.663 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642228
+Platform: timer mark 98.672 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 98.672 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642228?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 98.851 0.179 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 98.851 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 98.853 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000493678?content-type=application/json&all_levels=1
+Platform: timer mark 99.008 0.155 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 99.008 0.0 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 99.374 0.366 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644969?content-type=application/json&all_levels=1
+Platform: timer mark 99.553 0.179 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 99.554 0.001 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644969
+Platform: timer mark 99.565 0.011 EnsemblSeqProx.fetchSeq
+Platform: timer mark 99.565 0.0 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644969?type=protein&Accept=application/json&content-type=application/json
+Platform: timer mark 99.752 0.187 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 99.753 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 99.757 0.004 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENSP00000496776?content-type=application/json&all_levels=1
+Platform: timer mark 99.915 0.158 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 99.916 0.001 EnsembleRestClient.getJSON2 ...done
+Platform: timer mark 100.28 0.364 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000644120?content-type=application/json&all_levels=1
+Platform: timer mark 100.454 0.174 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 100.456 0.002 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000644120
+Platform: timer mark 100.465 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 100.467 0.002 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000644120?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 100.608 0.141 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 100.609 0.001 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000644120
+Platform: timer mark 101.06 0.451 EnsembleRestClient.getJSON0 https://rest.ensembl.org/xrefs/id/ENST00000642875?content-type=application/json&all_levels=1
+Platform: timer mark 101.46 0.4 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 101.46 0.0 EnsembleRestClient.getJSON2 ...done
+Adding protein product for ENST00000642875
+Platform: timer mark 101.469 0.009 EnsemblSeqProx.fetchSeq
+Platform: timer mark 101.47 0.001 EnsembleRestClient.getJSON0 https://rest.ensembl.org/sequence/id/ENST00000642875?type=protein&Accept=application/json&content-type=application/json
+Response code 400
+Platform: timer mark 101.616 0.146 EnsembleRestClient.getJSON1 parsing...
+Platform: timer mark 101.616 0.0 EnsembleRestClient.getJSON2 ...done
+No protein product found for ENST00000642875
getClassList = function(){J2S._saveFile('_j2sclasslist.txt', Clazz.ClassFilesLoaded.sort().join('\n'))}
</script>
<div style="position:absolute;left:900px;top:30px;width:600px;height:300px;">
-<div id="sysoutdiv" style="border:1px solid green;width:100%;height:95%;overflow:auto"></div>
+<div id="sysoutdiv" contenteditable="true" style="border:1px solid green;width:100%;height:95%;overflow:auto"></div>
This is System.out. <a href="javascript:testApplet._clearConsole()">clear it</a> <br>Add ?j2snocore to URL to see full class list; ?j2sdebug to use uncompressed j2s/core files <br><a href="javascript:getClassList()">get _j2sClassList.txt</a>
</div>
</body>
int phase = 0;
try
{
- phase = Integer.parseInt(sf.getPhase());
+ String s = sf.getPhase();
+ if (s != null)
+ {
+ phase = Integer.parseInt(s);
+ }
} catch (NumberFormatException e)
{
- // ignore
+ // SwingJS -- need to avoid these.
}
/*
* phase > 0 on first codon means 5' incomplete - skip to the start
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
// TODO: use a vararg String... for getSequenceRecords instead?
List<String> queries = new ArrayList<>();
queries.add(query);
- BufferedReader fp = getSequenceReader(queries);
- if (fp == null)
- {
- return null;
- }
-
- SequenceI seq = parseFeaturesJson(fp);
+ SequenceI seq = parseFeaturesJson(queries);
+ if (seq == null)
+ return null;
return new Alignment(new SequenceI[] { seq });
}
* @param br
* @return
*/
- private SequenceI parseFeaturesJson(BufferedReader br)
+ @SuppressWarnings("unchecked")
+private SequenceI parseFeaturesJson(List<String> queries)
{
+
+
SequenceI seq = new Sequence("Dummy", "");
- JSONParser jp = new JSONParser();
try
{
- JSONArray responses = (JSONArray) jp.parse(br);
- Iterator rvals = responses.iterator();
+
+ Iterator<Object> rvals = (Iterator<Object>) getJSON(null, queries, -1, MODE_ITERATOR, null);
+ if (rvals == null)
+ return null;
while (rvals.hasNext())
{
try
{
- JSONObject obj = (JSONObject) rvals.next();
+ Map<String, Object> obj = (Map<String, Object>) rvals.next();
String type = obj.get("feature_type").toString();
int start = Integer.parseInt(obj.get("start").toString());
int end = Integer.parseInt(obj.get("end").toString());
String source = obj.get("source").toString();
String strand = obj.get("strand").toString();
String alleles = JSONUtils
- .arrayToList((JSONArray) obj.get("alleles"));
+ .arrayToStringList((List<Object>) obj.get("alleles"));
String clinSig = JSONUtils
- .arrayToList(
- (JSONArray) obj.get("clinical_significance"));
+ .arrayToStringList(
+ (List<Object>) obj.get("clinical_significance"));
/*
* convert 'variation' to 'sequence_variant', and 'cds' to 'CDS'
}
} catch (ParseException | IOException e)
{
+ e.printStackTrace();
// ignore
}
return seq;
}
- /**
+
+/**
* Returns the first non-null attribute found (if any) as a string
*
* @param obj
* @param keys
* @return
*/
- protected String getFirstNotNull(JSONObject obj, String... keys)
+ protected String getFirstNotNull(Map<String, Object> obj, String... keys)
{
String desc = null;
* @param obj
* @param key
*/
- protected void setFeatureAttribute(SequenceFeature sf, JSONObject obj,
+ protected void setFeatureAttribute(SequenceFeature sf, Map<String, Object> obj,
String key)
{
Object object = obj.get(key);
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefSource;
+import jalview.util.JSONUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
-import org.json.simple.JSONArray;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class EnsemblInfo extends EnsemblRestClient
* for convenience, pre-fill ensembl.org as the domain for "ENSEMBL"
*/
divisions.put(DBRefSource.ENSEMBL.toUpperCase(), ensemblDomain);
-
- BufferedReader br = null;
try
{
- URL url = getDivisionsUrl(ensemblGenomesDomain);
- if (url != null)
- {
- br = getHttpResponse(url, null);
- }
- parseResponse(br, ensemblGenomesDomain);
- } catch (IOException e)
- {
- // ignore
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
- }
- }
-
- /**
- * Parses the JSON response to /info/divisions, and add each to the lookup map
- *
- * @param br
- * @param domain
- */
- void parseResponse(BufferedReader br, String domain)
- {
- JSONParser jp = new JSONParser();
-
- try
- {
- JSONArray parsed = (JSONArray) jp.parse(br);
-
- Iterator rvals = parsed.iterator();
+ @SuppressWarnings("unchecked")
+ Iterator<Object> rvals = (Iterator<Object>) getJSON(getDivisionsUrl(ensemblGenomesDomain), null, -1, MODE_ITERATOR, null);
+ if (rvals == null)
+ return;
while (rvals.hasNext())
{
String division = rvals.next().toString();
- divisions.put(division.toUpperCase(), domain);
+ divisions.put(division.toUpperCase(), ensemblGenomesDomain);
}
} catch (IOException | ParseException | NumberFormatException e)
{
import jalview.datamodel.GeneLociI;
import jalview.util.MapList;
-import java.io.BufferedReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
* @param br
* @return
*/
- protected String parseGeneId(JSONObject val)
+ protected String parseGeneId(Map<String, Object> val)
{
if (val == null)
{
public String getSpecies(String identifier)
{
String species = null;
- JSONObject json = getResult(identifier, null);
+ Map<String, Object> json = getResult(identifier, null);
if (json != null)
{
Object o = json.get(SPECIES);
}
/**
- * Calls the /lookup/id rest service and returns the response as a JSONObject,
+ * Calls the /lookup/id rest service and returns the response as a Map<String, Object>,
* or null if any error
*
* @param identifier
* (optional)
* @return
*/
- protected JSONObject getResult(String identifier, String objectType)
+ @SuppressWarnings("unchecked")
+ protected Map<String, Object> getResult(String identifier, String objectType)
{
List<String> ids = Arrays.asList(new String[] { identifier });
- BufferedReader br = null;
try
{
- URL url = getUrl(identifier, objectType);
-
- if (url != null)
- {
- br = getHttpResponse(url, ids);
- }
- return br == null ? null : (JSONObject) (new JSONParser().parse(br));
- } catch (IOException | ParseException e)
+ return (Map<String, Object>) getJSON(getUrl(identifier, objectType), ids, -1, MODE_MAP, null);
+ }
+ catch (IOException | ParseException e)
{
System.err.println("Error parsing " + identifier + " lookup response "
+ e.getMessage());
return null;
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
}
}
* @param json
* @return
*/
- GeneLociI parseGeneLoci(JSONObject json)
+ GeneLociI parseGeneLoci(Map<String, Object> json)
{
if (json == null)
{
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.GeneLociI;
+import jalview.util.JSONUtils;
import jalview.util.MapList;
import java.io.BufferedReader;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class EnsemblMap extends EnsemblRestClient
String fromRef, String toRef, int[] queryRange)
{
URL url = null;
- BufferedReader br = null;
-
try
{
url = getAssemblyMapUrl(species, chromosome, fromRef, toRef, queryRange[0],
queryRange[1]);
- br = getHttpResponse(url, null);
- return (parseAssemblyMappingResponse(br));
+ return (parseAssemblyMappingResponse(url));
} catch (Throwable t)
{
System.out.println("Error calling " + url + ": " + t.getMessage());
return null;
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
}
}
* @param br
* @return
*/
- protected int[] parseAssemblyMappingResponse(BufferedReader br)
+ @SuppressWarnings("unchecked")
+ protected int[] parseAssemblyMappingResponse(URL url)
{
int[] result = null;
- JSONParser jp = new JSONParser();
try
{
- JSONObject parsed = (JSONObject) jp.parse(br);
- JSONArray mappings = (JSONArray) parsed.get(MAPPINGS);
-
- Iterator rvals = mappings.iterator();
+ Iterator<Object> rvals = (Iterator<Object>) getJSON(url, null, -1, MODE_ITERATOR, MAPPINGS);
+ if (rvals == null)
+ return null;
while (rvals.hasNext())
{
// todo check for "mapped"
- JSONObject val = (JSONObject) rvals.next();
- JSONObject mapped = (JSONObject) val.get(MAPPED);
+ Map<String, Object> val = (Map<String, Object>) rvals.next();
+ Map<String, Object> mapped = (Map<String, Object>) val.get(MAPPED);
int start = Integer.parseInt(mapped.get("start").toString());
int end = Integer.parseInt(mapped.get("end").toString());
String strand = mapped.get("strand").toString();
int end, String cdsOrCdna)
{
URL url = null;
- BufferedReader br = null;
-
try
{
String domain = new EnsemblInfo().getDomain(division);
if (domain != null)
{
url = getIdMapUrl(domain, accession, start, end, cdsOrCdna);
- br = getHttpResponse(url, null);
- if (br != null)
- {
- return (parseIdMappingResponse(br, accession, domain));
- }
+ return (parseIdMappingResponse(url, accession, domain));
}
return null;
} catch (Throwable t)
{
System.out.println("Error calling " + url + ": " + t.getMessage());
return null;
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
}
}
* @param domain
* @return
*/
- GeneLociI parseIdMappingResponse(BufferedReader br, String accession,
+ @SuppressWarnings("unchecked")
+GeneLociI parseIdMappingResponse(URL url, String accession,
String domain)
{
- JSONParser jp = new JSONParser();
try
{
- JSONObject parsed = (JSONObject) jp.parse(br);
- JSONArray mappings = (JSONArray) parsed.get(MAPPINGS);
-
- Iterator rvals = mappings.iterator();
+ Iterator<Object> rvals = (Iterator<Object>) getJSON(url, null, -1, MODE_ITERATOR, MAPPINGS);
+ if (rvals == null)
+ return null;
String assembly = null;
String chromosome = null;
int fromEnd = 0;
while (rvals.hasNext())
{
- JSONObject val = (JSONObject) rvals.next();
- JSONObject original = (JSONObject) val.get("original");
+ Map<String, Object> val = (Map<String, Object>) rvals.next();
+ Map<String, Object> original = (Map<String, Object>) val.get("original");
fromEnd = Integer.parseInt(original.get("end").toString());
- JSONObject mapped = (JSONObject) val.get(MAPPED);
+ Map<String, Object> mapped = (Map<String, Object>) val.get(MAPPED);
int start = Integer.parseInt(mapped.get("start").toString());
int end = Integer.parseInt(mapped.get("end").toString());
String ass = mapped.get("assembly_name").toString();
package jalview.ext.ensembl;
import jalview.bin.Cache;
-import jalview.bin.Jalview;
+import jalview.javascript.json.JSON;
+import jalview.util.JSONUtils;
+import jalview.util.Platform;
import jalview.util.StringUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import javax.ws.rs.HttpMethod;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
/**
* Base class for Ensembl REST service clients
* @see http://rest.ensembl.org/documentation/info/ping
* @return
*/
- boolean checkEnsembl()
+ @SuppressWarnings("unchecked")
+boolean checkEnsembl()
{
BufferedReader br = null;
String pingUrl = getDomain() + "/info/ping" + CONTENT_TYPE_JSON;
{
// note this format works for both ensembl and ensemblgenomes
// info/ping.json works for ensembl only (March 2016)
- URL ping = new URL(pingUrl);
-
+
+
+
+
/*
* expect {"ping":1} if ok
* if ping takes more than 2 seconds to respond, treat as if unavailable
*/
- br = getHttpResponse(ping, null, 2 * 1000);
- if (br == null)
- {
- // error reponse status
- return false;
- }
- JSONParser jp = new JSONParser();
- JSONObject val = (JSONObject) jp.parse(br);
+ Map<String, Object> val = (Map<String, Object>) getJSON(new URL(pingUrl), null, 2 * 1000, MODE_MAP, null);
+ if (val == null)
+ return false;
String pingString = val.get("ping").toString();
return pingString != null;
} catch (Throwable t)
return false;
}
- /**
- * Returns a reader to a (Json) response from the Ensembl sequence endpoint.
- * If the request failed the return value may be null.
- *
- * @param ids
- * @return
- * @throws IOException
- */
- protected BufferedReader getSequenceReader(List<String> ids)
- throws IOException
- {
- URL url = getUrl(ids);
-
- BufferedReader reader = getHttpResponse(url, ids);
- return reader;
- }
-
- /**
- * Gets a reader to the HTTP response, using the default read timeout of 5
- * minutes
- *
- * @param url
- * @param ids
- * @return
- * @throws IOException
- */
- protected BufferedReader getHttpResponse(URL url, List<String> ids)
- throws IOException
- {
- return getHttpResponse(url, ids, DEFAULT_READ_TIMEOUT);
- }
+
+ protected final static int MODE_ARRAY = 0;
+ protected final static int MODE_MAP = 1;
+ protected final static int MODE_ITERATOR = 2;
+
+// /**
+// * Returns a reader to a (Json) response from the Ensembl sequence endpoint.
+// * If the request failed the return value may be null.
+// *
+// * @param ids
+// * @return
+// * @throws IOException
+// * @throws ParseException
+// */
+// protected Object getSequenceJSON(List<String> ids, int mode)
+// throws IOException, ParseException
+// {
+// URL url = getUrl(ids);
+// return getJSON(url, ids, -1, mode);
+// }
+//
+// /**
+// * Gets a reader to the HTTP response, using the default read timeout of 5
+// * minutes
+// *
+// * @param url
+// * @param ids
+// * @return
+// * @throws IOException
+// */
+// protected BufferedReader getHttpResponse(URL url, List<String> ids)
+// throws IOException
+// {
+// return getHttpResponse(url, ids, DEFAULT_READ_TIMEOUT);
+// }
/**
* Sends the HTTP request and gets the response as a reader. Returns null if
* @return
* @throws IOException
*/
- protected BufferedReader getHttpResponse(URL url, List<String> ids,
+ private BufferedReader getHttpResponse(URL url, List<String> ids,
int readTimeout) throws IOException
{
+ if (readTimeout < 0)
+ readTimeout = DEFAULT_READ_TIMEOUT;
int retriesLeft = MAX_RETRIES;
HttpURLConnection connection = null;
int responseCode = 0;
-
+
+ if (Platform.isJS()) {
+ JSON.setAjax(url);
+ }
+
while (retriesLeft > 0)
{
connection = tryConnection(url, ids, readTimeout);
* note: a GET request for an invalid id returns an error code e.g. 415
* but POST request returns 200 and an empty Fasta response
*/
- System.err.println("Response code " + responseCode + " for " + url);
+ System.err.println("Response code " + responseCode);// + " for " + url);
return null;
}
+
InputStream response = connection.getInputStream();
+
+ if (Platform.isJS()) {
+ return JSON.getJSONReader(response);
+ }
// System.out.println(getClass().getName() + " took "
// + (System.currentTimeMillis() - now) + "ms to fetch");
- BufferedReader reader = null;
- reader = new BufferedReader(new InputStreamReader(response, "UTF-8"));
- return reader;
+ return new BufferedReader(new InputStreamReader(response, "UTF-8"));
}
/**
int readTimeout) throws IOException, ProtocolException
{
// System.out.println(System.currentTimeMillis() + " " + url);
+
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
/*
wr.close();
}
+ /**
+ * Primary access point to parsed JSON data, including the call to retrieve and
+ * parsing.
+ *
+ * @param url request url; if null, getUrl(ids) will be used
+ * @param ids optional; may be null
+ * @param msDelay -1 for default delay
+ * @param mode map, array, or array iterator
+ * @param mapKey an optional key for an outer map
+ * @return a Map, List, Iterator, or null
+ * @throws IOException
+ * @throws ParseException
+ *
+ * @author Bob Hanson 2019
+ */
+ @SuppressWarnings("unchecked")
+ protected Object getJSON(URL url, List<String> ids, int msDelay, int mode, String mapKey) throws IOException, ParseException {
+
+ if (url == null)
+ url = getUrl(ids);
+
+ Platform.timeCheck("EnsembleRestClient.getJSON0 " + url, Platform.TIME_MARK);
+
+ Reader br = null;
+ try {
+ br = (url == null ? null : getHttpResponse(url, ids, msDelay));
+
+ Platform.timeCheck("EnsembleRestClient.getJSON1 parsing... ", Platform.TIME_MARK);
+
+ Object ret = (br == null ? null : JSONUtils.parse(br));
+
+ Platform.timeCheck("EnsembleRestClient.getJSON2 ...done ", Platform.TIME_MARK);
+
+ if (ret != null && mapKey != null)
+ ret = ((Map<String, Object>) ret).get(mapKey);
+ if (ret == null)
+ {
+ return null;
+ }
+ switch (mode) {
+ case MODE_ARRAY:
+ case MODE_MAP:
+ break;
+ case MODE_ITERATOR:
+ ret = ((List<Object>) ret).iterator();
+ break;
+ }
+ return ret;
+
+ } finally
+ {
+ if (br != null)
+ {
+ try
+ {
+ br.close();
+ } catch (IOException e)
+ {
+ // ignore
+ }
+ }
+ }
+ }
+
+
+
/**
* Fetches and checks Ensembl's REST version number
*
* @return
*/
+ @SuppressWarnings("unchecked")
private void checkEnsemblRestVersion()
{
EnsemblData info = domainData.get(getDomain());
- JSONParser jp = new JSONParser();
- URL url = null;
try
{
- url = new URL(getDomain() + "/info/rest" + CONTENT_TYPE_JSON);
- BufferedReader br = getHttpResponse(url, null);
- if (br == null)
- {
- return;
- }
- JSONObject val = (JSONObject) jp.parse(br);
+ Map<String, Object> val = (Map<String, Object>) getJSON(new URL(getDomain() + "/info/rest" + CONTENT_TYPE_JSON), null, -1, MODE_MAP, null);
+ if (val == null)
+ return;
String version = val.get("release").toString();
String majorVersion = version.substring(0, version.indexOf("."));
String expected = info.expectedRestVersion;
*
* @return
*/
+ @SuppressWarnings("unchecked")
private void checkEnsemblDataVersion()
{
- JSONParser jp = new JSONParser();
- URL url = null;
- BufferedReader br = null;
-
- try
- {
- url = new URL(getDomain() + "/info/data" + CONTENT_TYPE_JSON);
- br = getHttpResponse(url, null);
- if (br != null)
- {
- JSONObject val = (JSONObject) jp.parse(br);
- JSONArray versions = (JSONArray) val.get("releases");
- domainData.get(getDomain()).dataVersion = versions.get(0)
- .toString();
- }
- } catch (Throwable t)
- {
- System.err.println(
- "Error checking Ensembl data version: " + t.getMessage());
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
- }
+ Map<String, Object> val;
+ try
+ {
+ val = (Map<String, Object>) getJSON(
+ new URL(getDomain() + "/info/data" + CONTENT_TYPE_JSON), null, -1, MODE_MAP, null);
+ if (val == null)
+ return;
+ List<Object> versions = (List<Object>) val.get("releases");
+ domainData.get(getDomain()).dataVersion = versions.get(0).toString();
+ } catch (Throwable e) {//could be IOException | ParseException e) {
+ System.err.println("Error checking Ensembl data version: " + e.getMessage());
+ }
}
public String getEnsemblDataVersion()
import jalview.util.DBRefUtils;
import jalview.util.IntRangeComparator;
import jalview.util.MapList;
+import jalview.util.Platform;
-import java.io.BufferedReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
String accId = querySeq.getName();
try
{
+ System.out.println("Adding protein product for " + accId);
AlignmentI protein = new EnsemblProtein(getDomain())
.getSequenceRecords(accId);
if (protein == null || protein.getHeight() == 0)
inProgress = false;
throw new JalviewException("ENSEMBL Rest API not available.");
}
- BufferedReader br = getSequenceReader(ids);
- if (br == null)
- {
- return alignment;
- }
+ Platform.timeCheck("EnsemblSeqProx.fetchSeq ", Platform.TIME_MARK);
- List<SequenceI> seqs = parseSequenceJson(br);
+ List<SequenceI> seqs = parseSequenceJson(ids);
+ if (seqs == null)
+ return alignment;
if (seqs.isEmpty())
{
* @return a single jalview.datamodel.Sequence
* @see http://rest.ensembl.org/documentation/info/sequence_id
*/
- protected List<SequenceI> parseSequenceJson(BufferedReader br)
+ @SuppressWarnings("unchecked")
+ protected List<SequenceI> parseSequenceJson(List<String> ids)
{
- JSONParser jp = new JSONParser();
List<SequenceI> result = new ArrayList<>();
try
{
* for now, assumes only one sequence returned; refactor if needed
* in future to handle a JSONArray with more than one
*/
- final JSONObject val = (JSONObject) jp.parse(br);
+ Map<String, Object> val = (Map<String, Object>) getJSON(null, ids, -1, MODE_MAP, null);
+ if (val == null)
+ return null;
Object s = val.get("desc");
String desc = s == null ? null : s.toString();
s = val.get("id");
*/
package jalview.ext.ensembl;
-import java.io.BufferedReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
super(domain, dbName, dbVersion);
}
- /**
- * Returns the first "id" value in gene identifier format from the JSON
- * response, or null if none found
- *
- * @param br
- * @return
- * @throws IOException
- */
- protected String parseSymbolResponse(BufferedReader br) throws IOException
- {
- JSONParser jp = new JSONParser();
- String result = null;
- try
- {
- JSONArray responses = (JSONArray) jp.parse(br);
- Iterator rvals = responses.iterator();
- while (rvals.hasNext())
- {
- JSONObject val = (JSONObject) rvals.next();
- String id = val.get(JSON_ID).toString();
- String type = val.get(TYPE).toString();
- if (id != null && GENE.equals(type))
- {
- result = id;
- break;
- }
- }
- } catch (ParseException e)
- {
- // ignore
- }
- return result;
- }
+// /**
+// * Returns the first "id" value in gene identifier format from the JSON
+// * response, or null if none found
+// *
+// * @param br
+// * @return
+// * @throws IOException
+// */
+// @SuppressWarnings("unchecked")
+//protected String parseSymbolResponse(BufferedReader br) throws IOException
+// {
+// }
/**
* Constructs the URL for the REST symbol endpoint
* @param identifier
* @return
*/
+ @SuppressWarnings("unchecked")
public List<String> getGeneIds(String identifier)
{
List<String> result = new ArrayList<String>();
ids.add(identifier);
String[] queries = identifier.split(getAccessionSeparator());
- BufferedReader br = null;
try
{
for (String query : queries)
{
for (Species taxon : Species.getModelOrganisms())
{
- URL url = getUrl(query, taxon, GENE);
- if (url != null)
+ String geneId = null;///parseSymbolResponse(br);
+ try
{
- br = getHttpResponse(url, ids);
- if (br != null)
+ Iterator<Object> rvals = (Iterator<Object>) getJSON(getUrl(query, taxon, GENE), ids, -1, MODE_ITERATOR, null);
+ if (rvals == null)
+ continue;
+ while (rvals.hasNext())
{
- String geneId = parseSymbolResponse(br);
- if (geneId != null && !result.contains(geneId))
+ Map<String, Object> val = (Map<String, Object>) rvals.next();
+ String id = val.get(JSON_ID).toString();
+ String type = val.get(TYPE).toString();
+ if (id != null && GENE.equals(type))
{
- result.add(geneId);
+ geneId = id;
+ break;
}
}
+ } catch (ParseException e)
+ {
+ // ignore
+ }
+
+ if (geneId != null && !result.contains(geneId))
+ {
+ result.add(geneId);
}
}
}
} catch (IOException e)
{
// ignore
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
}
return result;
}
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.util.DBRefUtils;
+import jalview.util.JSONUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
* an Ensembl stable identifier
* @return
*/
+ @SuppressWarnings("unchecked")
public List<DBRefEntry> getCrossReferences(String identifier)
{
List<DBRefEntry> result = new ArrayList<>();
List<String> ids = new ArrayList<>();
ids.add(identifier);
- BufferedReader br = null;
try
{
- URL url = getUrl(identifier);
- if (url != null)
- {
- br = getHttpResponse(url, ids);
- if (br != null)
- {
- result = parseResponse(br);
- }
- }
- } catch (IOException e)
- {
- // ignore
- } finally
- {
- if (br != null)
- {
- try
- {
- br.close();
- } catch (IOException e)
- {
- // ignore
- }
- }
- }
-
- return result;
- }
-
- /**
- * Parses "primary_id" and "dbname" values from the JSON response and
- * constructs a DBRefEntry. Returns a list of the DBRefEntry created. Note we
- * don't parse "synonyms" as they appear to be either redirected or obsolete
- * in Uniprot.
- *
- * @param br
- * @return
- * @throws IOException
- */
- protected List<DBRefEntry> parseResponse(BufferedReader br)
- throws IOException
- {
- JSONParser jp = new JSONParser();
- List<DBRefEntry> result = new ArrayList<>();
- try
- {
- JSONArray responses = (JSONArray) jp.parse(br);
- Iterator rvals = responses.iterator();
+ Iterator<Object> rvals = (Iterator<Object>) getJSON(getUrl(identifier), ids, -1, MODE_ITERATOR, null);
while (rvals.hasNext())
{
- JSONObject val = (JSONObject) rvals.next();
+ Map<String, Object> val = (Map<String, Object>) rvals.next();
String db = val.get("dbname").toString();
String id = val.get("primary_id").toString();
if (db != null && id != null
result.add(dbref);
}
}
- } catch (ParseException e)
+ } catch (ParseException | IOException e)
{
// ignore
}
return result;
}
+// /**
+// * Parses "primary_id" and "dbname" values from the JSON response and
+// * constructs a DBRefEntry. Returns a list of the DBRefEntry created. Note we
+// * don't parse "synonyms" as they appear to be either redirected or obsolete
+// * in Uniprot.
+// *
+// * @param br
+// * @return
+// * @throws IOException
+// */
+// @SuppressWarnings("unchecked")
+//protected List<DBRefEntry> parseResponse(BufferedReader br)
+// throws IOException
+// {
+// return result;
+// }
+//
private String xrefVersion = "ENSEMBL:0";
/**
*/
package jalview.ext.paradise;
+import jalview.util.JSONUtils;
import jalview.util.MessageManager;
import jalview.ws.HttpClientUtils;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
import org.json.simple.parser.ContentHandler;
import org.json.simple.parser.ParseException;
}
+ /**
+ * @param respons
+ * @return
+ * @throws Exception
+ */
public static Iterator<Reader> processJsonResponseFor(Reader respons)
throws Exception
{
- org.json.simple.parser.JSONParser jp = new org.json.simple.parser.JSONParser();
+ // BH 2019 never called?
try
{
- final JSONArray responses = (JSONArray) jp.parse(respons);
- final Iterator rvals = responses.iterator();
+ @SuppressWarnings("unchecked")
+ final Iterator<Object> rvals = ((List<Object>) JSONUtils.parse(respons)).iterator();
return new Iterator<Reader>()
{
@Override
return rvals.hasNext();
}
- @Override
+ @SuppressWarnings("unchecked")
+ @Override
public Reader next()
{
- JSONObject val = (JSONObject) rvals.next();
+ Map<String, Object> val = (Map<String, Object>) rvals.next();
Object sval = null;
try
sval = "";
}
- return new StringReader((sval instanceof JSONObject)
- ? ((JSONObject) sval).toString()
- : sval.toString());
+ return new StringReader(sval.toString());
}
import jalview.fts.core.FTSRestClient;
import jalview.fts.core.FTSRestRequest;
import jalview.fts.core.FTSRestResponse;
+import jalview.util.JSONUtils;
import jalview.util.MessageManager;
import java.net.URI;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import javax.ws.rs.core.MediaType;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import com.sun.jersey.api.client.Client;
* the JSON string containing error message from the server
* @return the processed error message from the JSON string
*/
- public static String parseJsonExceptionString(String jsonErrorResponse)
+ @SuppressWarnings("unchecked")
+public static String parseJsonExceptionString(String jsonErrorResponse)
{
StringBuilder errorMessage = new StringBuilder(
"\n============= PDB Rest Client RunTime error =============\n");
//
try
{
- JSONParser jsonParser = new JSONParser();
- JSONObject jsonObj = (JSONObject) jsonParser.parse(jsonErrorResponse);
- JSONObject errorResponse = (JSONObject) jsonObj.get("error");
+ Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils.parse(jsonErrorResponse);
+ Map<String, Object> errorResponse = (Map<String, Object>) jsonObj.get("error");
- JSONObject responseHeader = (JSONObject) jsonObj
+ Map<String, Object> responseHeader = (Map<String, Object>) jsonObj
.get("responseHeader");
- JSONObject paramsObj = (JSONObject) responseHeader.get("params");
+ Map<String, Object> paramsObj = (Map<String, Object>) responseHeader.get("params");
String status = responseHeader.get("status").toString();
String message = errorResponse.get("msg").toString();
String query = paramsObj.get("q").toString();
List<FTSData> result = null;
try
{
- JSONParser jsonParser = new JSONParser();
- JSONObject jsonObj = (JSONObject) jsonParser
- .parse(pdbJsonResponseString);
-
- JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
- String queryTime = ((JSONObject) jsonObj.get("responseHeader"))
+ Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils.parse(pdbJsonResponseString);
+ Map<String, Object> pdbResponse = (Map<String, Object>) jsonObj.get("response");
+ String queryTime = ((Map<String, Object>) jsonObj.get("responseHeader"))
.get("QTime").toString();
int numFound = Integer
.valueOf(pdbResponse.get("numFound").toString());
if (numFound > 0)
{
result = new ArrayList<FTSData>();
- JSONArray docs = (JSONArray) pdbResponse.get("docs");
- for (Iterator<JSONObject> docIter = docs.iterator(); docIter
+ List<Object> docs = (List<Object>) pdbResponse.get("docs");
+ for (Iterator<Object> docIter = docs.iterator(); docIter
.hasNext();)
{
- JSONObject doc = docIter.next();
+ Map<String, Object> doc = (Map<String, Object>) docIter.next();
result.add(getFTSData(doc, pdbRestRequest));
}
searchResult.setNumberOfItemsFound(numFound);
return searchResult;
}
- public static FTSData getFTSData(JSONObject pdbJsonDoc,
+ public static FTSData getFTSData(Map<String, Object> pdbJsonDoc,
FTSRestRequest request)
{
return allDefaultDisplayedStructureDataColumns;
}
- public static void main(String[] args) {
+ @SuppressWarnings("unchecked")
+public static void main(String[] args) {
// check for transpiler fix associated with JSONParser yylex.java use of charAt()
int z = c ^ 5;
String result = s +x + y + z;
assert (result == "e103982102");
- JSONParser jsonParser = new JSONParser();
try
{
- JSONObject jsonObj = (JSONObject) jsonParser.parse("{\"a\":3}");
+ Map<String, Object> jsonObj = (Map<String, Object>) JSONUtils.parse("{\"a\":3}");
System.out.println(jsonObj);
} catch (ParseException e)
{
{
File selectedFile = chooser.getSelectedFile();
setProjectFile(selectedFile);
- final String choice = selectedFile.getAbsolutePath();
+ String choice = selectedFile.getAbsolutePath();
Cache.setProperty("LAST_DIRECTORY", selectedFile.getParent());
new Thread(new Runnable()
{
}
else
{
- new jalview.project.Jalview2XML().loadJalviewAlign(choice);
+ new jalview.project.Jalview2XML().loadJalviewAlign(selectedFile);
}
} catch (OutOfMemoryError oom)
{
mouseOverSequence(sequence, column, pos);
}
- tooltipText.setLength(6); // Cuts the buffer back to <html>
+ tooltipText.setLength(0);
SequenceGroup[] groups = av.getAlignment().findAllGroups(sequence);
if (groups != null)
seqARep.appendFeatures(tooltipText, pos, features,
this.ap.getSeqPanel().seqCanvas.fr);
}
- if (tooltipText.length() == 6) // <html>
+ if (tooltipText.length() == 0) // <html>
{
setToolTipText(null);
lastTooltip = null;
{
formattedTooltipText = JvSwingUtils.wrapTooltip(true,
textString);
- setToolTipText(formattedTooltipText);
-
+ setToolTipText(formattedTooltipText);
lastTooltip = textString;
}
}
import jalview.schemes.ResidueColourScheme;
import jalview.util.ColorUtils;
import jalview.util.Format;
+import jalview.util.JSONUtils;
import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
import java.awt.Color;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Vector;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-
public class JSONFile extends AlignFile implements ComplexAlignFile
{
private static String version = new BuildDetails().getVersion();
jsonAlignmentPojo.getSeqGroups().add(seqGrpPojo);
}
}
- org.json.JSONObject generatedJSon = new org.json.JSONObject(
- jsonAlignmentPojo);
+ org.json.JSONObject generatedJSon = new org.json.JSONObject(jsonAlignmentPojo);
jsonOutput = generatedJSon.toString();
return jsonOutput.replaceAll("xstart", "xStart").replaceAll("xend",
"xEnd");
{
try
{
- JSONParser jsonParser = new JSONParser();
- JSONObject alignmentJsonObj = (JSONObject) jsonParser
- .parse(jsonAlignmentString);
- JSONArray seqJsonArray = (JSONArray) alignmentJsonObj.get("seqs");
- JSONArray alAnnotJsonArray = (JSONArray) alignmentJsonObj
+ Map<String, Object> alignmentJsonObj = (Map<String, Object>) JSONUtils.parse(jsonAlignmentString);
+ List<Object> seqJsonArray = (List<Object>) alignmentJsonObj.get("seqs");
+ List<Object> alAnnotJsonArray = (List<Object>) alignmentJsonObj
.get("alignAnnotation");
- JSONArray jsonSeqArray = (JSONArray) alignmentJsonObj
+ List<Object> jsonSeqArray = (List<Object>) alignmentJsonObj
.get("seqFeatures");
- JSONArray seqGrpJsonArray = (JSONArray) alignmentJsonObj
+ List<Object> seqGrpJsonArray = (List<Object>) alignmentJsonObj
.get("seqGroups");
- JSONObject jvSettingsJsonObj = (JSONObject) alignmentJsonObj
+ Map<String, Object> jvSettingsJsonObj = (Map<String, Object>) alignmentJsonObj
.get("appSettings");
if (jvSettingsJsonObj != null)
hiddenSequences = new ArrayList<>();
seqMap = new Hashtable<>();
- for (Iterator<JSONObject> sequenceIter = seqJsonArray
- .iterator(); sequenceIter.hasNext();)
+ for (Iterator<Object> sequenceIter = seqJsonArray.iterator(); sequenceIter.hasNext();)
{
- JSONObject sequence = sequenceIter.next();
+ Map<String, Object> sequence = (Map<String, Object>) sequenceIter.next();
String sequcenceString = sequence.get("seq").toString();
String sequenceName = sequence.get("name").toString();
String seqUniqueId = sequence.get("id").toString();
parseFeatures(jsonSeqArray);
- for (Iterator<JSONObject> seqGrpIter = seqGrpJsonArray
- .iterator(); seqGrpIter.hasNext();)
+ for (Iterator<Object> seqGrpIter = seqGrpJsonArray.iterator(); seqGrpIter.hasNext();)
{
- JSONObject seqGrpObj = seqGrpIter.next();
+ Map<String, Object> seqGrpObj = (Map<String, Object>)seqGrpIter.next();
String grpName = seqGrpObj.get("groupName").toString();
String colourScheme = seqGrpObj.get("colourScheme").toString();
String description = (seqGrpObj.get("description") == null) ? null
int startRes = Integer
.valueOf(seqGrpObj.get("startRes").toString());
int endRes = Integer.valueOf(seqGrpObj.get("endRes").toString());
- JSONArray sequenceRefs = (JSONArray) seqGrpObj.get("sequenceRefs");
+ List<Object> sequenceRefs = (List<Object>) seqGrpObj.get("sequenceRefs");
ArrayList<SequenceI> grpSeqs = new ArrayList<>();
if (sequenceRefs.size() > 0)
{
- Iterator<String> seqHashIter = sequenceRefs.iterator();
+ Iterator<Object> seqHashIter = sequenceRefs.iterator();
while (seqHashIter.hasNext())
{
- String seqHash = seqHashIter.next();
- Sequence sequence = seqMap.get(seqHash);
+ Sequence sequence = seqMap.get(seqHashIter.next());
if (sequence != null)
{
grpSeqs.add(sequence);
}
- for (Iterator<JSONObject> alAnnotIter = alAnnotJsonArray
- .iterator(); alAnnotIter.hasNext();)
+ for (Iterator<Object> alAnnotIter = alAnnotJsonArray.iterator(); alAnnotIter.hasNext();)
{
- JSONObject alAnnot = alAnnotIter.next();
- JSONArray annotJsonArray = (JSONArray) alAnnot.get("annotations");
+ Map<String, Object> alAnnot = (Map<String, Object>) alAnnotIter.next();
+ List<Object> annotJsonArray = (List<Object>) alAnnot.get("annotations");
Annotation[] annotations = new Annotation[annotJsonArray.size()];
int count = 0;
- for (Iterator<JSONObject> annotIter = annotJsonArray
- .iterator(); annotIter.hasNext();)
+ for (Iterator<Object> annotIter = annotJsonArray.iterator(); annotIter.hasNext();)
{
- JSONObject annot = annotIter.next();
+ Map<String, Object> annot = (Map<String, Object>) annotIter.next();
if (annot == null)
{
annotations[count] = null;
alignAnnot.graph = (alAnnot.get("graphType") == null) ? 0
: Integer.valueOf(alAnnot.get("graphType").toString());
- JSONObject diplaySettings = (JSONObject) alAnnot
+ Map<String, Object> diplaySettings = (Map<String, Object>) alAnnot
.get("annotationSettings");
if (diplaySettings != null)
{
return this;
}
- public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson)
+ public void parseHiddenSeqRefsAsList(Map<String, Object> jvSettingsJson)
{
hiddenSeqRefs = new ArrayList<>();
String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs");
}
}
- public void parseHiddenCols(JSONObject jvSettingsJson)
+ public void parseHiddenCols(Map<String, Object> jvSettingsJson)
{
String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
if (hiddenCols != null && !hiddenCols.isEmpty())
}
@SuppressWarnings("unchecked")
- private void parseFeatures(JSONArray jsonSeqFeatures)
+ private void parseFeatures(List<Object> jsonSeqFeatures)
{
if (jsonSeqFeatures != null)
{
displayedFeatures = new FeaturesDisplayed();
- for (Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures
+ for (Iterator<Object> seqFeatureItr = jsonSeqFeatures
.iterator(); seqFeatureItr.hasNext();)
{
- JSONObject jsonFeature = seqFeatureItr.next();
+ Map<String, Object> jsonFeature = (Map<String, Object>) seqFeatureItr.next();
Long begin = (Long) jsonFeature.get("xStart");
Long end = (Long) jsonFeature.get("xEnd");
String type = (String) jsonFeature.get("type");
SequenceFeature sequenceFeature = new SequenceFeature(type,
description, featureBegin, featureEnd, score, featureGrp);
- JSONArray linksJsonArray = (JSONArray) jsonFeature.get("links");
+ List<Object> linksJsonArray = (List<Object>) jsonFeature.get("links");
if (linksJsonArray != null && linksJsonArray.size() > 0)
{
- Iterator<String> linkList = linksJsonArray.iterator();
+ Iterator<Object> linkList = linksJsonArray.iterator();
while (linkList.hasNext())
{
- String link = linkList.next();
- sequenceFeature.addLink(link);
+ sequenceFeature.addLink((String) linkList.next());
}
}
--- /dev/null
+package jalview.javascript.json;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ *
+ * A rudimentary JSON converter/iterator that uses the browser's native AJAX
+ * json data type delivery mechanism.
+ *
+ * Arrays are delivered as ArrayList<Object> where Object may be Boolean,
+ * String, Long, Double, ArrayList, and "Map-like object".
+ *
+ * For speed, the maps returned are just JavaScript maps with a few added
+ * methods for extracting data. [get(), contains(), probably should add keySet,
+ * valueSet, and entrySet].
+ *
+ * @author hansonr Bob Hanson St. Olaf College 1/24/2019
+ *
+ */
+public class JSON {
+
+ /**
+ * A privately initialized class that allows us to do the object
+ * conversion from JavaScript to "Java" on the fly.
+ *
+ * @author hansonr
+ *
+ */
+ @SuppressWarnings("serial")
+ public static class JSONList extends ArrayList<Object> {
+
+
+ static ListIterator iter;
+
+ JSONList(Object[] a) {
+ super();
+ /**
+ * @j2sNative
+ *
+ * this.elementData = a;
+ * this.size = a.length;
+ */
+ }
+
+ public Object get(int i) {
+ Object o = null;
+ /**
+ * @j2sNative
+ *
+ * o = this.elementData[i];
+ *
+ */
+ return JSON.toObject(o);
+ }
+
+
+ @Override
+ public Iterator<Object> iterator() {
+ if (iter == null)
+ iter = new ListIterator();
+ iter.pt = 0;
+ iter.list = this;
+ return iter;
+ }
+
+
+ /**
+ *
+ * @author hansonr
+ *
+ */
+ public static class ListIterator implements Iterator<Object> {
+
+ ListIterator() {/* restricted */}
+
+ public JSONList list;
+ int pt = -1;
+
+ @Override
+ public boolean hasNext() {
+ @SuppressWarnings("unused")
+ boolean more;
+ /**
+ * @j2sNative
+ *
+ * more = this.list && (this.pt < this.list.size);
+ * if (!more) {
+ * this.list = null;
+ * this.pt = -1;
+ * }
+ * return more;
+ */
+ {
+ return pt < list.size();
+ }
+ }
+
+ @Override
+ public Object next() {
+ Object o = null;
+ /**
+ * @j2sNative o = this.list.elementData[this.pt++];
+ *
+ */
+
+ return toObject(o);
+ }
+ }
+ }
+
+ /**
+ * A simple encoding of sequential key/value pairs for a jQuery.ajax call. If
+ * the first key is "url" and the second is an object, then the ajax object is
+ * attached to that url as well, just for transport purposes within the system.
+ *
+ * @param keyValues assumed to be simple String,Object pairs. String objects
+ * will be surrounded by double quotes.
+ */
+ public static Object setAjax(Object... keyValues) {
+ Object ajax = null;
+ /**
+ * @j2sNative ajax = {}; if (keyValues[0] == "url" && typeof keyValues[1] ==
+ * "object") { ajax = keyValues[1].ajax || (keyValues[1].ajax = ajax); }
+ *
+ * for (var i = 0; i < keyValues.length;) { var key = keyValues[i++];
+ * var val = keyValues[i++]; ajax[key] = val; }
+ */
+ return ajax;
+ }
+
+ public static void setAjax(URL url) {
+ setAjax("url", url, "dataType", "json", "async", Boolean.FALSE);
+ }
+
+ public static BufferedReader getJSONReader(InputStream is) {
+ return new JSONReader(is);
+ }
+
+ public static class JSONReader extends BufferedReader {
+ Object data;
+
+ public JSONReader(InputStream in) {
+ super((Reader) (Object) in);
+ // could be buffered
+ data = toObject(/** @j2sNative $in._ajaxData || $in.$in && $in.$in._ajaxData || */ null);
+
+ }
+
+ public JSONReader(Reader in) {
+ super(in);
+ // could be buffered
+ data = toObject(/** @j2sNative $in._ajaxData || $in.$in && $in.$in._ajaxData || */ null);
+ }
+
+ public JSONReader(String json) {
+ super((Reader) (Object) "");
+ data = toObject(/** @j2sNative swingjs.JSUtil.parseJSON$S(json)|| */null);
+ }
+
+ @Override
+ public void close() {
+ data = null;
+ try {
+ super.close();
+ } catch (IOException e) {
+ // ignore, especially if we set $in to a string!
+ }
+ }
+ }
+
+ @SuppressWarnings("resource")
+ public static Object parse(String json) {
+ return new JSONReader(json).data;
+ }
+
+ public static Object parse(Reader br) {
+ return ((JSONReader) br).data;
+ }
+
+ /**
+ * Get an object in the JSON associative array.
+ * @param br
+ * @param key
+ * @return
+ */
+ @SuppressWarnings("unused")
+ public static Object toObject(Object o) {
+ if (o == null)
+ return null;
+ String type = /** @j2sNative (typeof o) + */"";
+ switch (type) {
+ case "string":
+ return o;
+ case "number":
+ double n = 0;
+ if (/** @j2sNative (n = o) == (n|0) || */false)
+ return Long.valueOf((long) n);
+ return Double.valueOf(n);
+ case "boolean":
+ return Boolean.valueOf(/** @j2sNative !!o || */false);
+ case "object":
+ boolean isArray = /** @j2sNative o instanceof Array || */false;
+ if (isArray) {
+ return toList((Object[]) o);
+ }
+ return toMap(o);
+ default:
+ return o;
+ }
+ }
+
+ Object get(String key) {
+ /**
+ * @j2sNative
+ *
+ * return C$.toObject$O(this[key]);
+ */
+ {
+ return null;
+ }
+ }
+ boolean contains(String key) {
+ /**
+ * @j2sNative
+ *
+ * return typeof this[key] != "undefined"
+ */
+ {
+ return false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private static Hashtable<String, Object> toMap(Object map) {
+ /**
+ * @j2sNative
+ * map.get$O = C$.prototype.get$S;
+ * map.contains$O = C$.prototype.contains$S;
+ */
+ return (Hashtable<String, Object>) map;
+ }
+
+ private static List<Object> toList(Object[] a) {
+ return new JSONList(a);
+ }
+
+}
*/
package jalview.json.binding.biojs;
+import jalview.util.JSONUtils;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.Objects;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class BioJSRepositoryPojo
{
Objects.requireNonNull(jsonString,
"Supplied jsonString must not be null");
- JSONParser jsonParser = new JSONParser();
- JSONObject JsonObj = (JSONObject) jsonParser.parse(jsonString);
+ Map<String, Object> JsonObj = (Map<String, Object>) JSONUtils.parse(jsonString);
this.description = (String) JsonObj.get("description");
this.latestReleaseVersion = (String) JsonObj
.get("latestReleaseVersion");
- JSONArray repositoriesJsonArray = (JSONArray) JsonObj.get("releases");
- for (Iterator<JSONObject> repoIter = repositoriesJsonArray
+ List<Object> repositoriesJsonArray = (List<Object>) JsonObj.get("releases");
+ for (Iterator<Object> repoIter = repositoriesJsonArray
.iterator(); repoIter.hasNext();)
{
- JSONObject repoObj = repoIter.next();
+ Map<String, Object> repoObj = (Map<String, Object>) repoIter.next();
BioJSReleasePojo repo = new BioJSReleasePojo();
repo.setType((String) repoObj.get("type"));
repo.setUrl((String) repoObj.get("url"));
import static jalview.util.UrlConstants.DELIM;
import static jalview.util.UrlConstants.SEP;
+import jalview.util.JSONUtils;
import jalview.util.UrlLink;
-import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.StringTokenizer;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
* name of identifiers.org download file
* @return hashmap of identifiers.org data, keyed by MIRIAM id
*/
- private HashMap<String, UrlLink> readIdentifiers(String idFileName)
+ @SuppressWarnings("unchecked")
+private HashMap<String, UrlLink> readIdentifiers(String idFileName)
{
- JSONParser parser = new JSONParser();
-
// identifiers.org data
HashMap<String, UrlLink> idData = new HashMap<String, UrlLink>();
String errorMessage = null;
try
{
+ // NOTE: THIS WILL FAIL IN SWINGJS BECAUSE IT INVOLVES A FILE READER
+
FileReader reader = new FileReader(idFileName);
String key = "";
- JSONObject obj = (JSONObject) parser.parse(reader);
+ Map<String, Object> obj = (Map<String, Object>) JSONUtils.parse(reader);
if (obj.containsKey(ID_ORG_KEY))
{
key = ID_ORG_KEY;
return idData;
}
- JSONArray jsonarray = (JSONArray) obj.get(key);
+ List<Object> jsonarray = (List<Object>) obj.get(key);
// loop over each entry in JSON array and build HashMap entry
for (int i = 0; i < jsonarray.size(); i++)
{
- JSONObject item = (JSONObject) jsonarray.get(i);
+ Map<String, Object> item = (Map<String, Object>) jsonarray.get(i);
String url = (String) item.get("url") + "/" + DELIM + DB_ACCESSION
+ DELIM;
package jalview.util;
-import org.json.simple.JSONArray;
+import jalview.javascript.json.JSON;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.List;
+
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
public class JSONUtils
{
* @param jsonArray
* @return
*/
- public static String arrayToList(JSONArray jsonArray)
+ public static String arrayToStringList(List<Object> jsonArray)
{
- if (jsonArray == null)
+ int n;
+
+ if (jsonArray == null || (n = jsonArray.size()) == 0)
{
return null;
}
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < jsonArray.size(); i++)
+ /**
+ * @j2sNative
+ *
+ * return jsonArray.elementData.slice(0, n).join(",");
+ */
{
- if (i > 0)
- {
- sb.append(",");
- }
- sb.append(jsonArray.get(i).toString());
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < n; i++)
+ {
+ if (i > 0)
+ {
+ sb.append(",");
+ }
+ sb.append(jsonArray.get(i).toString());
+ }
+ return sb.toString();
}
- return sb.length() == 0 ? null : sb.toString();
+ }
+
+ /**
+ * The method all JSON parsing must go through for JavaScript.
+ * @param r a BufferedReader or a javascript.json.JSON.JSONReader
+ * @return
+ * @throws IOException
+ * @throws ParseException
+ */
+ public static Object parse(Reader r) throws IOException, ParseException
+ {
+ // Using a file reader is not currently supported in SwingJS JavaScript
+
+ if (r == null)
+ return null;
+//
+// Platform.timeCheck("JSONUtils.parse0 ", Platform.TIME_MARK);
+
+ Object ret;
+ if (Platform.isJS())
+ {
+ if (r instanceof FileReader)
+ {
+ throw new IOException("StringJS does not support FileReader parsing for JSON -- but it could...");
+ }
+ return JSON.parse(r);
+ } else {
+ ret = new JSONParser().parse(r);
+ }
+// Platform.timeCheck("JSONUtils.parse1 ", Platform.TIME_MARK);
+ return ret;
+ }
+
+ public static Object parse(String json) throws ParseException
+ {
+ return (Platform.isJS() ? JSON.parse(json) : new JSONParser().parse(json));
}
}
{
return !isMac();
}
+
+ public final static int TIME_RESET = 0;
+ public final static int TIME_MARK = 1;
+
+ public static long time, mark;
+
+ public static void timeCheck(String msg, int mode) {
+ switch (mode) {
+ case TIME_RESET:
+ time = mark = System.currentTimeMillis();
+ System.err.println("Platform: timer reset\t\t\t" + msg);
+ break;
+ case TIME_MARK:
+ long t = System.currentTimeMillis();
+ if (time == 0)
+ time = mark = t;
+ System.err.println("Platform: timer mark\t" + ((t - time)/1000f) + "\t" + ((t - mark)/1000f) + "\t" + msg);
+ mark = t;
+ break;
+ }
+ }
+
}
-20190122081203
+20190125031511
-20190122081203
+20190125031511