You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by po...@apache.org on 2017/09/03 17:33:18 UTC
[25/51] [partial] incubator-netbeans-jackpot30 git commit:
INFRA-15006 Import for http://bits.netbeans.org/download/apache-donation
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/IndexPanel.java
----------------------------------------------------------------------
diff --git a/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/IndexPanel.java b/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/IndexPanel.java
new file mode 100644
index 0000000..45f50f5
--- /dev/null
+++ b/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/IndexPanel.java
@@ -0,0 +1,370 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2011 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.remotingapi.options;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.AbstractTableModel;
+import org.netbeans.api.progress.aggregate.AggregateProgressFactory;
+import org.netbeans.api.progress.aggregate.AggregateProgressHandle;
+import org.netbeans.api.progress.aggregate.ProgressContributor;
+import org.netbeans.modules.jackpot30.remoting.api.LocalServer;
+import org.netbeans.modules.jackpot30.remoting.api.RemoteIndex;
+import org.netbeans.modules.jackpot30.remoting.api.RemoteIndex.UseLocalCache;
+import org.openide.DialogDescriptor;
+import org.openide.DialogDisplayer;
+import org.openide.execution.ExecutionEngine;
+import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
+import org.openide.windows.InputOutput;
+
+final class IndexPanel extends javax.swing.JPanel {
+
+ private final IndexOptionsPanelController controller;
+
+ IndexPanel(IndexOptionsPanelController controller) {
+ this.controller = controller;
+ initComponents();
+ indices.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+ public void valueChanged(ListSelectionEvent e) {
+ enableDisable();
+ }
+ });
+ JComboBox cacheEditor = new JComboBox(UseLocalCache.values());
+ indices.setDefaultEditor(UseLocalCache.class, new DefaultCellEditor(cacheEditor));
+ enableDisable();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
+ indices = new javax.swing.JTable();
+ addButton = new javax.swing.JButton();
+ removeButton = new javax.swing.JButton();
+ editButton = new javax.swing.JButton();
+ synchronizeOffline = new javax.swing.JButton();
+
+ indices.setModel(new javax.swing.table.DefaultTableModel(
+ new Object [][] {
+ {null, null, null, null},
+ {null, null, null, null},
+ {null, null, null, null},
+ {null, null, null, null}
+ },
+ new String [] {
+ "Title 1", "Title 2", "Title 3", "Title 4"
+ }
+ ));
+ jScrollPane1.setViewportView(indices);
+
+ org.openide.awt.Mnemonics.setLocalizedText(addButton, org.openide.util.NbBundle.getMessage(IndexPanel.class, "IndexPanel.addButton.text")); // NOI18N
+ addButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ addButtonActionPerformed(evt);
+ }
+ });
+
+ org.openide.awt.Mnemonics.setLocalizedText(removeButton, org.openide.util.NbBundle.getMessage(IndexPanel.class, "IndexPanel.removeButton.text")); // NOI18N
+ removeButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ removeButtonActionPerformed(evt);
+ }
+ });
+
+ org.openide.awt.Mnemonics.setLocalizedText(editButton, org.openide.util.NbBundle.getMessage(IndexPanel.class, "IndexPanel.editButton.text")); // NOI18N
+ editButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ editButtonActionPerformed(evt);
+ }
+ });
+
+ org.openide.awt.Mnemonics.setLocalizedText(synchronizeOffline, org.openide.util.NbBundle.getMessage(IndexPanel.class, "IndexPanel.synchronizeOffline.text", new Object[] {})); // NOI18N
+ synchronizeOffline.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ synchronizeOfflineActionPerformed(evt);
+ }
+ });
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 263, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(removeButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(addButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(editButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(synchronizeOffline, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(addButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(editButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(removeButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(synchronizeOffline)))
+ .addContainerGap())
+ );
+ }// </editor-fold>//GEN-END:initComponents
+
+ private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
+ addEditIndex(false);
+ }//GEN-LAST:event_addButtonActionPerformed
+
+ private void editButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editButtonActionPerformed
+ addEditIndex(true);
+ }//GEN-LAST:event_editButtonActionPerformed
+
+ private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
+ TableModelImpl model = (TableModelImpl) indices.getModel();
+
+ model.indices.remove(indices.getSelectedRow());
+ model.fireTableDataChanged();
+ }//GEN-LAST:event_removeButtonActionPerformed
+
+ private void synchronizeOfflineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_synchronizeOfflineActionPerformed
+ ExecutionEngine.getDefault().execute("Synchronizing remote indices", new Runnable() {
+ @Override public void run() {
+ TableModelImpl model = (TableModelImpl) indices.getModel();
+ Collection<RemoteIndex> indices = new ArrayList<RemoteIndex>(model.indices);
+
+ for (Iterator<RemoteIndex> it = indices.iterator(); it.hasNext();) {
+ if (it.next().useLocalCache == UseLocalCache.NEVER) {
+ it.remove();
+ }
+ }
+
+ ProgressContributor[] contributors = new ProgressContributor[indices.size()];
+
+ for (int i = 0; i < indices.size(); i++) {
+ contributors[i] = AggregateProgressFactory.createProgressContributor(String.valueOf(i));
+ }
+
+ AggregateProgressHandle h = AggregateProgressFactory.createHandle("Synchronizing remote indices", contributors, null, null);
+
+ h.start();
+
+ try {
+ int i = 0;
+
+ for (RemoteIndex idx : indices) {
+ try {
+ Lookup.getDefault().lookup(LocalServer.class).downloadIndex(idx, contributors[i++]);
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+ } finally {
+ h.finish();
+ }
+ }
+ }, InputOutput.NULL);
+
+ }//GEN-LAST:event_synchronizeOfflineActionPerformed
+
+ private void addEditIndex(boolean edit) {
+ JButton okButton = new JButton("OK");
+ CustomizeRemoteIndex panel = new CustomizeRemoteIndex(okButton);
+ DialogDescriptor dd = new DialogDescriptor(panel, edit ? "Edit Index" : "Add Index", true, new Object[] {okButton, DialogDescriptor.CANCEL_OPTION}, okButton, DialogDescriptor.DEFAULT_ALIGN, null, null);
+
+ dd.setClosingOptions(null);
+ panel.setNotificationSupport(dd.createNotificationLineSupport());
+
+ TableModelImpl model = (TableModelImpl) indices.getModel();
+
+ if (edit) {
+ panel.setIndex(model.indices.get(indices.getSelectedRow()));
+ }
+
+ if (DialogDisplayer.getDefault().notify(dd) == okButton) {
+ RemoteIndex remoteIndex = panel.getIndex();
+
+ if (edit) {
+ int index = indices.getSelectedRow();
+
+ model.indices.remove(index);
+ model.indices.add(index, remoteIndex);
+ } else {
+ model.indices.add(remoteIndex);
+ }
+
+ model.fireTableDataChanged();
+ }
+ }
+
+ private void enableDisable() {
+ if (indices.getSelectedRow() != (-1)) {
+ editButton.setEnabled(true);
+ removeButton.setEnabled(true);
+ } else {
+ editButton.setEnabled(false);
+ removeButton.setEnabled(false);
+ }
+
+ if (indices.getModel() instanceof TableModelImpl) {
+ TableModelImpl model = (TableModelImpl) indices.getModel();
+ boolean enableDownload = false;
+
+ for (RemoteIndex idx : model.indices) {
+ enableDownload |= idx.useLocalCache != UseLocalCache.NEVER;
+ }
+
+ synchronizeOffline.setEnabled(enableDownload);
+ }
+ }
+
+ void load() {
+ TableModelImpl model = new TableModelImpl();
+
+ for (RemoteIndex idx : RemoteIndex.loadIndices(true)) {
+ model.indices.add(idx);
+ }
+
+ indices.setModel(model);
+ model.fireTableStructureChanged();
+ }
+
+ void store() {
+ TableModelImpl model = (TableModelImpl) indices.getModel();
+
+ RemoteIndex.saveIndices(model.indices);
+ }
+
+ boolean valid() {
+ // TODO check whether form is consistent and complete
+ return true;
+ }
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton addButton;
+ private javax.swing.JButton editButton;
+ private javax.swing.JTable indices;
+ private javax.swing.JButton removeButton;
+ private javax.swing.JButton synchronizeOffline;
+ // End of variables declaration//GEN-END:variables
+
+ private static final class TableModelImpl extends AbstractTableModel {
+
+ private final List<RemoteIndex> indices = new ArrayList<RemoteIndex>();
+
+ public int getRowCount() {
+ return indices.size();
+ }
+
+ public int getColumnCount() {
+ return 5;
+ }
+
+ public String getColumnName(int columnIndex) {
+ switch (columnIndex) {
+ case 0: return "";
+ case 1: return "Local folder";
+ case 2: return "Remote URL";
+ case 3: return "Remote project";
+ case 4: return "Use local cache";
+ default: throw new IllegalStateException();
+ }
+ }
+
+ public Class<?> getColumnClass(int columnIndex) {
+ return columnIndex == 0 ? Boolean.class : columnIndex != 4 ? String.class : UseLocalCache.class;
+ }
+
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ RemoteIndex idx = indices.get(rowIndex);
+
+ switch (columnIndex) {
+ case 0: return idx.enabled;
+ case 1:
+ URL localFolder = idx.getLocalFolder();
+ return localFolder != null ? Utils.toDisplayName(localFolder) : "";
+ case 2: return idx.remote.toExternalForm();
+ case 3: return idx.remoteSegment;
+ case 4: return idx.useLocalCache;
+ default: throw new IllegalStateException();
+ }
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ RemoteIndex idx = indices.get(rowIndex);
+
+ if (columnIndex == 0) {
+ idx = RemoteIndex.create(aValue instanceof Boolean ? (Boolean) aValue : true, idx.useLocalCache, idx.getLocalFolder(), idx.remote, idx.remoteSegment);
+ } else {
+ idx = RemoteIndex.create(idx.enabled, aValue instanceof UseLocalCache ? (UseLocalCache) aValue : UseLocalCache.NEVER, idx.getLocalFolder(), idx.remote, idx.remoteSegment);
+ }
+ indices.set(rowIndex, idx);
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return columnIndex == 0 || columnIndex == 4;
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/Utils.java
----------------------------------------------------------------------
diff --git a/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/Utils.java b/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/Utils.java
new file mode 100644
index 0000000..a7234ee
--- /dev/null
+++ b/remoting/ide/api/src/org/netbeans/modules/jackpot30/remotingapi/options/Utils.java
@@ -0,0 +1,90 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2011 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2011 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.remotingapi.options;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+/**
+ *
+ * @author lahvac
+ */
+public class Utils {
+
+ public static String toDisplayName(URL url) {
+ if ("file".equals(url.getProtocol())) {
+ return url.getPath();
+ } else {
+ return url.toExternalForm();
+ }
+ }
+
+ public static URL fromDisplayName(String path) {
+ try {
+ return new URL(path);
+ } catch (MalformedURLException ex) {
+ try {
+ if (path.isEmpty()) return File.listRoots()[0].toURI().toURL();
+ //local FS path?
+ return new URL("file://" + path);
+ } catch (MalformedURLException ex1) {
+ try {
+ //no handler?
+ return new URL(null, path, new FakeURLStreamHandler());
+ } catch (MalformedURLException ex2) {
+ //giving up
+ throw new IllegalStateException(ex2);
+ }
+ }
+ }
+ }
+
+ private static final class FakeURLStreamHandler extends URLStreamHandler {
+ @Override protected URLConnection openConnection(URL u) throws IOException {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/build.xml
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/build.xml b/remoting/ide/browsing/build.xml
new file mode 100644
index 0000000..90c61ff
--- /dev/null
+++ b/remoting/ide/browsing/build.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+
+Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+Other names may be trademarks of their respective owners.
+
+The contents of this file are subject to the terms of either the GNU
+General Public License Version 2 only ("GPL") or the Common
+Development and Distribution License("CDDL") (collectively, the
+"License"). You may not use this file except in compliance with the
+License. You can obtain a copy of the License at
+http://www.netbeans.org/cddl-gplv2.html
+or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+specific language governing permissions and limitations under the
+License. When distributing the software, include this License Header
+Notice in each file and include the License file at
+nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+particular file as subject to the "Classpath" exception as provided
+by Oracle in the GPL Version 2 section of the License file that
+accompanied this code. If applicable, add the following below the
+License Header, with the fields enclosed by brackets [] replaced by
+your own identifying information:
+"Portions Copyrighted [year] [name of copyright owner]"
+
+Contributor(s):
+
+The Original Software is NetBeans. The Initial Developer of the Original
+Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+Microsystems, Inc. All Rights Reserved.
+
+If you wish your version of this file to be governed by only the CDDL
+or only the GPL Version 2, indicate your decision by adding
+"[Contributor] elects to include this software in this distribution
+under the [CDDL or GPL Version 2] license." If you do not indicate a
+single choice of license, a recipient has the option to distribute
+your version of this file under either the CDDL, the GPL Version 2 or
+to extend the choice of license to its licensees as provided above.
+However, if you add GPL Version 2 code and therefore, elected the GPL
+Version 2 license, then the option applies only if the new code is
+made subject to such option by the copyright holder.
+-->
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="org.netbeans.modules.jackpot30.ide.browsing" default="netbeans" basedir=".">
+ <description>Builds, tests, and runs the project org.netbeans.modules.jackpot30.ide.browsing.</description>
+ <import file="nbproject/build-impl.xml"/>
+ <import file="${suite.dir}/../../findbugs-import.xml"/>
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/manifest.mf
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/manifest.mf b/remoting/ide/browsing/manifest.mf
new file mode 100644
index 0000000..5a53398
--- /dev/null
+++ b/remoting/ide/browsing/manifest.mf
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+OpenIDE-Module: org.netbeans.modules.jackpot30.ide.browsing
+OpenIDE-Module-Install: org/netbeans/modules/jackpot30/ide/browsing/Installer.class
+OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/jackpot30/ide/browsing/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.0
+AutoUpdate-Show-In-Client: false
+
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/nbproject/build-impl.xml
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/nbproject/build-impl.xml b/remoting/ide/browsing/nbproject/build-impl.xml
new file mode 100644
index 0000000..89b234e
--- /dev/null
+++ b/remoting/ide/browsing/nbproject/build-impl.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+
+Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+Other names may be trademarks of their respective owners.
+
+The contents of this file are subject to the terms of either the GNU
+General Public License Version 2 only ("GPL") or the Common
+Development and Distribution License("CDDL") (collectively, the
+"License"). You may not use this file except in compliance with the
+License. You can obtain a copy of the License at
+http://www.netbeans.org/cddl-gplv2.html
+or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+specific language governing permissions and limitations under the
+License. When distributing the software, include this License Header
+Notice in each file and include the License file at
+nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+particular file as subject to the "Classpath" exception as provided
+by Oracle in the GPL Version 2 section of the License file that
+accompanied this code. If applicable, add the following below the
+License Header, with the fields enclosed by brackets [] replaced by
+your own identifying information:
+"Portions Copyrighted [year] [name of copyright owner]"
+
+Contributor(s):
+
+The Original Software is NetBeans. The Initial Developer of the Original
+Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+Microsystems, Inc. All Rights Reserved.
+
+If you wish your version of this file to be governed by only the CDDL
+or only the GPL Version 2, indicate your decision by adding
+"[Contributor] elects to include this software in this distribution
+under the [CDDL or GPL Version 2] license." If you do not indicate a
+single choice of license, a recipient has the option to distribute
+your version of this file under either the CDDL, the GPL Version 2 or
+to extend the choice of license to its licensees as provided above.
+However, if you add GPL Version 2 code and therefore, elected the GPL
+Version 2 license, then the option applies only if the new code is
+made subject to such option by the copyright holder.
+-->
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT ***
+*** EDIT ../build.xml INSTEAD ***
+-->
+<project name="org.netbeans.modules.jackpot30.ide.browsing-impl" basedir="..">
+ <fail message="Please build using Ant 1.7.1 or higher.">
+ <condition>
+ <not>
+ <antversion atleast="1.7.1"/>
+ </not>
+ </condition>
+ </fail>
+ <property file="nbproject/private/suite-private.properties"/>
+ <property file="nbproject/suite.properties"/>
+ <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
+ <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
+ <property file="${suite.dir}/nbproject/platform.properties"/>
+ <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="name"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{name}" value="${@{value}}"/>
+ </sequential>
+ </macrodef>
+ <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
+ <attribute name="property"/>
+ <attribute name="value"/>
+ <sequential>
+ <property name="@{property}" value="@{value}"/>
+ </sequential>
+ </macrodef>
+ <property file="${user.properties.file}"/>
+ <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+ <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+ <condition>
+ <not>
+ <contains string="${cluster.path.evaluated}" substring="platform"/>
+ </not>
+ </condition>
+ </fail>
+ <import file="${harness.dir}/build.xml"/>
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/nbproject/genfiles.properties
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/nbproject/genfiles.properties b/remoting/ide/browsing/nbproject/genfiles.properties
new file mode 100644
index 0000000..e346218
--- /dev/null
+++ b/remoting/ide/browsing/nbproject/genfiles.properties
@@ -0,0 +1,49 @@
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+#
+# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+# Other names may be trademarks of their respective owners.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common
+# Development and Distribution License("CDDL") (collectively, the
+# "License"). You may not use this file except in compliance with the
+# License. You can obtain a copy of the License at
+# http://www.netbeans.org/cddl-gplv2.html
+# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+# specific language governing permissions and limitations under the
+# License. When distributing the software, include this License Header
+# Notice in each file and include the License file at
+# nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the GPL Version 2 section of the License file that
+# accompanied this code. If applicable, add the following below the
+# License Header, with the fields enclosed by brackets [] replaced by
+# your own identifying information:
+# "Portions Copyrighted [year] [name of copyright owner]"
+#
+# Contributor(s):
+#
+# The Original Software is NetBeans. The Initial Developer of the Original
+# Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+# Microsystems, Inc. All Rights Reserved.
+#
+# If you wish your version of this file to be governed by only the CDDL
+# or only the GPL Version 2, indicate your decision by adding
+# "[Contributor] elects to include this software in this distribution
+# under the [CDDL or GPL Version 2] license." If you do not indicate a
+# single choice of license, a recipient has the option to distribute
+# your version of this file under either the CDDL, the GPL Version 2 or
+# to extend the choice of license to its licensees as provided above.
+# However, if you add GPL Version 2 code and therefore, elected the GPL
+# Version 2 license, then the option applies only if the new code is
+# made subject to such option by the copyright holder.
+build.xml.data.CRC32=d895a237
+build.xml.script.CRC32=461c092a
+build.xml.stylesheet.CRC32=a56c6a5b@2.61
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=7c98b9cd
+nbproject/build-impl.xml.script.CRC32=3911055f
+nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.70
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/nbproject/project.properties b/remoting/ide/browsing/nbproject/project.properties
new file mode 100644
index 0000000..b92aeb5
--- /dev/null
+++ b/remoting/ide/browsing/nbproject/project.properties
@@ -0,0 +1,43 @@
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+#
+# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+# Other names may be trademarks of their respective owners.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common
+# Development and Distribution License("CDDL") (collectively, the
+# "License"). You may not use this file except in compliance with the
+# License. You can obtain a copy of the License at
+# http://www.netbeans.org/cddl-gplv2.html
+# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+# specific language governing permissions and limitations under the
+# License. When distributing the software, include this License Header
+# Notice in each file and include the License file at
+# nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the GPL Version 2 section of the License file that
+# accompanied this code. If applicable, add the following below the
+# License Header, with the fields enclosed by brackets [] replaced by
+# your own identifying information:
+# "Portions Copyrighted [year] [name of copyright owner]"
+#
+# Contributor(s):
+#
+# The Original Software is NetBeans. The Initial Developer of the Original
+# Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+# Microsystems, Inc. All Rights Reserved.
+#
+# If you wish your version of this file to be governed by only the CDDL
+# or only the GPL Version 2, indicate your decision by adding
+# "[Contributor] elects to include this software in this distribution
+# under the [CDDL or GPL Version 2] license." If you do not indicate a
+# single choice of license, a recipient has the option to distribute
+# your version of this file under either the CDDL, the GPL Version 2 or
+# to extend the choice of license to its licensees as provided above.
+# However, if you add GPL Version 2 code and therefore, elected the GPL
+# Version 2 license, then the option applies only if the new code is
+# made subject to such option by the copyright holder.
+javac.source=1.6
+javac.compilerargs=-Xlint -Xlint:-serial
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/nbproject/project.xml
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/nbproject/project.xml b/remoting/ide/browsing/nbproject/project.xml
new file mode 100644
index 0000000..64e6a55
--- /dev/null
+++ b/remoting/ide/browsing/nbproject/project.xml
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+
+Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+
+Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+Other names may be trademarks of their respective owners.
+
+The contents of this file are subject to the terms of either the GNU
+General Public License Version 2 only ("GPL") or the Common
+Development and Distribution License("CDDL") (collectively, the
+"License"). You may not use this file except in compliance with the
+License. You can obtain a copy of the License at
+http://www.netbeans.org/cddl-gplv2.html
+or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+specific language governing permissions and limitations under the
+License. When distributing the software, include this License Header
+Notice in each file and include the License file at
+nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+particular file as subject to the "Classpath" exception as provided
+by Oracle in the GPL Version 2 section of the License file that
+accompanied this code. If applicable, add the following below the
+License Header, with the fields enclosed by brackets [] replaced by
+your own identifying information:
+"Portions Copyrighted [year] [name of copyright owner]"
+
+Contributor(s):
+
+The Original Software is NetBeans. The Initial Developer of the Original
+Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+Microsystems, Inc. All Rights Reserved.
+
+If you wish your version of this file to be governed by only the CDDL
+or only the GPL Version 2, indicate your decision by adding
+"[Contributor] elects to include this software in this distribution
+under the [CDDL or GPL Version 2] license." If you do not indicate a
+single choice of license, a recipient has the option to distribute
+your version of this file under either the CDDL, the GPL Version 2 or
+to extend the choice of license to its licensees as provided above.
+However, if you add GPL Version 2 code and therefore, elected the GPL
+Version 2 license, then the option applies only if the new code is
+made subject to such option by the copyright holder.
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+ <type>org.netbeans.modules.apisupport.project</type>
+ <configuration>
+ <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+ <code-name-base>org.netbeans.modules.jackpot30.ide.browsing</code-name-base>
+ <suite-component/>
+ <module-dependencies>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>3</release-version>
+ <specification-version>1.70.0.5.21.40</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.lib</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>3</release-version>
+ <specification-version>3.33.0.21.40</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.lib2</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.71.0.40</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.mimelookup</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.29</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.editor.settings</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.46</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.netbeans.modules.jackpot30.remoting.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>1.11</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.awt</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.55</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.dialogs</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.28</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.filesystems</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>8.5</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.loaders</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.44</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.modules</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.39</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.nodes</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>7.33</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.text</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>6.54</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.util</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>8.29</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.util.lookup</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>8.19</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.util.ui</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>9.3</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.openide.windows</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>6.60</specification-version>
+ </run-dependency>
+ </dependency>
+ </module-dependencies>
+ <public-packages/>
+ </data>
+ </configuration>
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/nbproject/suite.properties
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/nbproject/suite.properties b/remoting/ide/browsing/nbproject/suite.properties
new file mode 100644
index 0000000..942e12b
--- /dev/null
+++ b/remoting/ide/browsing/nbproject/suite.properties
@@ -0,0 +1,42 @@
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+#
+# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+# Other names may be trademarks of their respective owners.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common
+# Development and Distribution License("CDDL") (collectively, the
+# "License"). You may not use this file except in compliance with the
+# License. You can obtain a copy of the License at
+# http://www.netbeans.org/cddl-gplv2.html
+# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+# specific language governing permissions and limitations under the
+# License. When distributing the software, include this License Header
+# Notice in each file and include the License file at
+# nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the GPL Version 2 section of the License file that
+# accompanied this code. If applicable, add the following below the
+# License Header, with the fields enclosed by brackets [] replaced by
+# your own identifying information:
+# "Portions Copyrighted [year] [name of copyright owner]"
+#
+# Contributor(s):
+#
+# The Original Software is NetBeans. The Initial Developer of the Original
+# Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+# Microsystems, Inc. All Rights Reserved.
+#
+# If you wish your version of this file to be governed by only the CDDL
+# or only the GPL Version 2, indicate your decision by adding
+# "[Contributor] elects to include this software in this distribution
+# under the [CDDL or GPL Version 2] license." If you do not indicate a
+# single choice of license, a recipient has the option to distribute
+# your version of this file under either the CDDL, the GPL Version 2 or
+# to extend the choice of license to its licensees as provided above.
+# However, if you add GPL Version 2 code and therefore, elected the GPL
+# Version 2 license, then the option applies only if the new code is
+# made subject to such option by the copyright holder.
+suite.dir=${basedir}/..
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Bundle.properties
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Bundle.properties b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Bundle.properties
new file mode 100644
index 0000000..ce8bc9f
--- /dev/null
+++ b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Bundle.properties
@@ -0,0 +1,42 @@
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+#
+# Copyright 2009-2017 Oracle and/or its affiliates. All rights reserved.
+#
+# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+# Other names may be trademarks of their respective owners.
+#
+# The contents of this file are subject to the terms of either the GNU
+# General Public License Version 2 only ("GPL") or the Common
+# Development and Distribution License("CDDL") (collectively, the
+# "License"). You may not use this file except in compliance with the
+# License. You can obtain a copy of the License at
+# http://www.netbeans.org/cddl-gplv2.html
+# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+# specific language governing permissions and limitations under the
+# License. When distributing the software, include this License Header
+# Notice in each file and include the License file at
+# nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the GPL Version 2 section of the License file that
+# accompanied this code. If applicable, add the following below the
+# License Header, with the fields enclosed by brackets [] replaced by
+# your own identifying information:
+# "Portions Copyrighted [year] [name of copyright owner]"
+#
+# Contributor(s):
+#
+# The Original Software is NetBeans. The Initial Developer of the Original
+# Software is Sun Microsystems, Inc. Portions Copyright 2009-2010 Sun
+# Microsystems, Inc. All Rights Reserved.
+#
+# If you wish your version of this file to be governed by only the CDDL
+# or only the GPL Version 2, indicate your decision by adding
+# "[Contributor] elects to include this software in this distribution
+# under the [CDDL or GPL Version 2] license." If you do not indicate a
+# single choice of license, a recipient has the option to distribute
+# your version of this file under either the CDDL, the GPL Version 2 or
+# to extend the choice of license to its licensees as provided above.
+# However, if you add GPL Version 2 code and therefore, elected the GPL
+# Version 2 license, then the option applies only if the new code is
+# made subject to such option by the copyright holder.
+OpenIDE-Module-Name=Jackpot 3.0 Remote Browsing
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/ColoringManager.java
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/ColoringManager.java b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/ColoringManager.java
new file mode 100644
index 0000000..9529def
--- /dev/null
+++ b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/ColoringManager.java
@@ -0,0 +1,181 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * Contributor(s):
+ *
+ * The Original Software is NetBeans. The Initial Developer of the Original
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
+ * Microsystems, Inc. All Rights Reserved.
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ */
+package org.netbeans.modules.jackpot30.ide.browsing;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.text.AttributeSet;
+import org.netbeans.api.editor.mimelookup.MimeLookup;
+import org.netbeans.api.editor.mimelookup.MimePath;
+import org.netbeans.api.editor.settings.AttributesUtilities;
+import org.netbeans.api.editor.settings.FontColorSettings;
+
+/**Copied from java.editor.
+ *
+ * @author Jan Lahoda
+ */
+public final class ColoringManager {
+
+ public static final String KEY_MARK_OCCURRENCES = "MARK_OCCURRENCES".toLowerCase();
+ private static final Map<Set<String>, String> type2Coloring;
+
+ static {
+ type2Coloring = new LinkedHashMap<Set<String>, String>();
+
+ put("mod-type-parameter-use", "TYPE_PARAMETER_USE");
+ put("mod-type-parameter-declaration", "TYPE_PARAMETER_DECLARATION");
+ put("mod-enum-declaration", "ENUM", "DECLARATION");
+ put("mod-annotation-type-declaration", "ANNOTATION_TYPE", "DECLARATION");
+ put("mod-interface-declaration", "INTERFACE", "DECLARATION");
+ put("mod-class-declaration", "CLASS", "DECLARATION");
+ put("mod-constructor-declaration", "CONSTRUCTOR", "DECLARATION");
+ put("mod-method-declaration", "METHOD", "DECLARATION");
+ put("mod-parameter-declaration", "PARAMETER", "DECLARATION");
+ put("mod-local-variable-declaration", "LOCAL_VARIABLE", "DECLARATION");
+ put("mod-field-declaration", "FIELD", "DECLARATION");
+ put("mod-enum", "ENUM");
+ put("mod-annotation-type", "ANNOTATION_TYPE");
+ put("mod-interface", "INTERFACE");
+ put("mod-class", "CLASS");
+ put("mod-constructor", "CONSTRUCTOR");
+ put("mod-method", "METHOD");
+ put("mod-parameter", "PARAMETER");
+ put("mod-local-variable", "LOCAL_VARIABLE");
+ put("mod-field", "FIELD");
+ put("mod-public", "PUBLIC");
+ put("mod-protected", "PROTECTED");
+ put("mod-package-private", "PACKAGE_PRIVATE");
+ put("mod-private", "PRIVATE");
+ put("mod-static", "STATIC");
+ put("mod-abstract", "ABSTRACT");
+ put("mod-deprecated", "DEPRECATED");
+ put("mod-undefined", "UNDEFINED");
+ put("mod-unused", "UNUSED");
+ put("javadoc-identifier", "JAVADOC_IDENTIFIER");
+ put("mark-occurrences", KEY_MARK_OCCURRENCES);
+ }
+
+ private static void put(String coloring, String... attributes) {
+ for (int i = 0; i < attributes.length; i++) {
+ attributes[i] = attributes[i].toLowerCase();
+ }
+ type2Coloring.put(new HashSet<String>(Arrays.asList(attributes)), coloring);
+ }
+
+ public static AttributeSet getColoringImpl(String coloringSpec) {
+ FontColorSettings fcs = MimeLookup.getLookup(MimePath.get("text/x-java")).lookup(FontColorSettings.class);
+
+ if (fcs == null) {
+ //in tests:
+ return AttributesUtilities.createImmutable();
+ }
+
+ assert fcs != null;
+
+ List<AttributeSet> attribs = new ArrayList<AttributeSet>();
+
+ Set<String> spec = new HashSet<String>(Arrays.asList(coloringSpec.split(" ")));
+
+ for (Entry<Set<String>, String> attribs2Colorings : type2Coloring.entrySet()) {
+ if (spec.containsAll(attribs2Colorings.getKey())) {
+ String key = attribs2Colorings.getValue();
+
+ spec.removeAll(attribs2Colorings.getKey());
+
+ if (key != null) {
+ AttributeSet colors = fcs.getTokenFontColors(key);
+
+ if (colors == null) {
+ Logger.getLogger(ColoringManager.class.getName()).log(Level.SEVERE, "no colors for: {0}", key);
+ continue;
+ }
+
+ attribs.add(adjustAttributes(colors));
+ }
+ }
+ }
+
+ for (String tokenSpec : spec) {
+ AttributeSet colors = fcs.getTokenFontColors(tokenSpec);
+
+ if (colors != null) {
+ attribs.add(adjustAttributes(colors));
+ }
+ }
+
+ Collections.reverse(attribs);
+
+ AttributeSet result = AttributesUtilities.createComposite(attribs.toArray(new AttributeSet[0]));
+
+ return result;
+ }
+
+ private static AttributeSet adjustAttributes(AttributeSet as) {
+ Collection<Object> attrs = new LinkedList<Object>();
+
+ for (Enumeration<?> e = as.getAttributeNames(); e.hasMoreElements(); ) {
+ Object key = e.nextElement();
+ Object value = as.getAttribute(key);
+
+ if (value != Boolean.FALSE) {
+ attrs.add(key);
+ attrs.add(value);
+ }
+ }
+
+ return AttributesUtilities.createImmutable(attrs.toArray());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Highlighting.java
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Highlighting.java b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Highlighting.java
new file mode 100644
index 0000000..69c9470
--- /dev/null
+++ b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Highlighting.java
@@ -0,0 +1,223 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2013 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.ide.browsing;
+
+import org.netbeans.modules.jackpot30.remoting.api.Utilities;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.swing.event.CaretEvent;
+import javax.swing.event.CaretListener;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+import org.codeviation.pojson.Pojson;
+import org.netbeans.api.editor.EditorRegistry;
+import org.netbeans.api.editor.mimelookup.MimeRegistration;
+import org.netbeans.modules.jackpot30.remoting.api.Utilities.RemoteSourceDescription;
+import org.netbeans.modules.jackpot30.remoting.api.RemoteIndex;
+import org.netbeans.modules.jackpot30.remoting.api.WebUtilities;
+import org.netbeans.spi.editor.highlighting.HighlightsLayer;
+import org.netbeans.spi.editor.highlighting.HighlightsLayerFactory;
+import org.netbeans.spi.editor.highlighting.ZOrder;
+import org.netbeans.spi.editor.highlighting.support.OffsetsBag;
+import org.openide.util.Exceptions;
+import org.openide.util.RequestProcessor;
+
+/**
+ *
+ * @author lahvac
+ */
+public class Highlighting {
+
+ @MimeRegistration(mimeType = "text/x-rjava", service = HighlightsLayerFactory.class)
+ public static class Factory implements HighlightsLayerFactory {
+ @Override
+ public HighlightsLayer[] createLayers(Context context) {
+ return new HighlightsLayer[] {
+ HighlightsLayer.create(Highlighting.class.getName() + ".coloring", ZOrder.SYNTAX_RACK, true, getColoringBag(context.getDocument())),
+ HighlightsLayer.create(Highlighting.class.getName() + ".occurrences", ZOrder.CARET_RACK, true, getOccurrencesBag(context.getDocument()))
+ };
+ }
+ }
+
+ private static final RequestProcessor WORKER = new RequestProcessor(Highlighting.class.getName(), 10, false, false);
+
+ public static void highlight(final Document doc) {
+ final RemoteSourceDescription rsd = Utilities.remoteSource(doc);
+
+ if (rsd == null) return ;
+
+ WORKER.post(new Runnable() {
+ @Override public void run() {
+ doHighlight(doc, rsd.idx, rsd.relative);
+ }
+ });
+ }
+
+ private static void doHighlight(Document doc, RemoteIndex idx, String relativePath) {
+ OffsetsBag target = new OffsetsBag(doc);
+
+ try {
+ URI sourceURI = new URI(idx.remote.toExternalForm() + "/ui/highlightData?path=" + WebUtilities.escapeForQuery(idx.remoteSegment) + "&relative=" + WebUtilities.escapeForQuery(relativePath));
+ HighlightData highlightData = Pojson.load(HighlightData.class, sourceURI.toURL().openStream());
+ int o = 0;
+ Iterator<String> categoriesIt = highlightData.categories.iterator();
+ Iterator<Long> spansIt = highlightData.spans.iterator();
+
+ while (categoriesIt.hasNext() && spansIt.hasNext()) {
+ Long span = spansIt.next();
+ target.addHighlight(o, (int) (o + span), ColoringManager.getColoringImpl(categoriesIt.next()));
+ o += span;
+ }
+ } catch (MalformedURLException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (URISyntaxException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+
+ getColoringBag(doc).setHighlights(target);
+ }
+
+ private static OffsetsBag getColoringBag(Document doc) {
+ OffsetsBag bag = (OffsetsBag) doc.getProperty(Highlighting.class);
+
+ if (bag == null) {
+ doc.putProperty(Highlighting.class, bag = new OffsetsBag(doc));
+ }
+
+ return bag;
+ }
+
+ private static final Object KEY_OCCURRENCES_BAG = new Object();
+ private static OffsetsBag getOccurrencesBag(Document doc) {
+ OffsetsBag bag = (OffsetsBag) doc.getProperty(KEY_OCCURRENCES_BAG);
+
+ if (bag == null) {
+ doc.putProperty(KEY_OCCURRENCES_BAG, bag = new OffsetsBag(doc));
+ }
+
+ return bag;
+ }
+
+ public static final class HighlightData {
+ final List<String> categories;
+ final List<Long> spans;
+ public HighlightData(List<String> cats, List<Long> spans) {
+ this.categories = cats;
+ this.spans = spans;
+ }
+
+ public HighlightData() {
+ this(null, null);
+ }
+
+ }
+
+ public static void registerComponentListener() {
+ EditorRegistry.addPropertyChangeListener(L);
+ }
+
+ private static final PropertyChangeListener L = new PropertyChangeListener() {
+ private JTextComponent old;
+ private CaretListener caret;
+ @Override public void propertyChange(PropertyChangeEvent evt) {
+ JTextComponent current = EditorRegistry.focusedComponent();
+
+ if (current == old) return ;
+
+ if (old != null) {
+ old.removeCaretListener(caret);
+ }
+
+ if (current != null) {
+ final Document doc = current.getDocument();
+ final RemoteSourceDescription rsd = Utilities.remoteSource(doc);
+
+ if (rsd != null) {
+ current.addCaretListener(caret = new CaretListener() {
+ @Override public void caretUpdate(CaretEvent e) {
+ final int caret = e.getDot();
+
+ WORKER.post(new Runnable() {
+ @Override public void run() {
+ try {
+ URI sourceURI = new URI(rsd.idx.remote.toExternalForm() + "/ui/target?path=" + WebUtilities.escapeForQuery(rsd.idx.remoteSegment) + "&relative=" + WebUtilities.escapeForQuery(rsd.relative) + "&position=" + caret);
+ Map<Object, Object> targetData = Pojson.load(HashMap.class, sourceURI.toURL().openStream());
+ Object signature = targetData.get("signature");
+
+ if (signature instanceof String) {
+ URI localUsagesURI = new URI(rsd.idx.remote.toExternalForm() + "/ui/localUsages?path=" + WebUtilities.escapeForQuery(rsd.idx.remoteSegment) + "&relative=" + WebUtilities.escapeForQuery(rsd.relative) + "&signature=" + WebUtilities.escapeForQuery(String.valueOf(signature)) + "&usages=true");
+ long[][] spans = Pojson.load(long[][].class, localUsagesURI.toURL().openStream());
+ OffsetsBag bag = new OffsetsBag(doc);
+
+ for (long[] span : spans) {
+ bag.addHighlight((int) span[0], (int) span[1], ColoringManager.getColoringImpl(ColoringManager.KEY_MARK_OCCURRENCES));
+ }
+
+ getOccurrencesBag(doc).setHighlights(bag);
+ }
+ } catch (URISyntaxException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+ }, 300);//should reuse one task...
+ }
+ });
+
+ }
+ }
+
+ old = current;
+ }
+ };
+}
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/HyperlinkProviderImpl.java
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/HyperlinkProviderImpl.java b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/HyperlinkProviderImpl.java
new file mode 100644
index 0000000..62c0c1c
--- /dev/null
+++ b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/HyperlinkProviderImpl.java
@@ -0,0 +1,236 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2013 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.ide.browsing;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.StyledDocument;
+import org.codeviation.pojson.Pojson;
+import org.netbeans.api.editor.mimelookup.MimeRegistration;
+import org.netbeans.editor.BaseDocument;
+import org.netbeans.editor.Utilities;
+import org.netbeans.lib.editor.hyperlink.spi.HyperlinkProviderExt;
+import org.netbeans.lib.editor.hyperlink.spi.HyperlinkType;
+import org.netbeans.modules.editor.NbEditorUtilities;
+import org.netbeans.modules.jackpot30.remoting.api.Utilities.RemoteSourceDescription;
+import org.netbeans.modules.jackpot30.remoting.api.RemoteIndex;
+import org.netbeans.modules.jackpot30.remoting.api.WebUtilities;
+import org.openide.DialogDisplayer;
+import org.openide.NotifyDescriptor;
+import org.openide.cookies.EditorCookie;
+import org.openide.cookies.LineCookie;
+import org.openide.cookies.OpenCookie;
+import org.openide.filesystems.FileObject;
+import org.openide.loaders.DataObject;
+import org.openide.text.Line;
+import org.openide.text.Line.ShowOpenType;
+import org.openide.text.Line.ShowVisibilityType;
+import org.openide.text.NbDocument;
+import org.openide.util.Exceptions;
+import org.openide.util.NbBundle.Messages;
+import org.openide.util.UserQuestionException;
+
+/**
+ *
+ * @author lahvac
+ */
+@MimeRegistration(mimeType = "text/x-rjava", service = HyperlinkProviderExt.class)
+public class HyperlinkProviderImpl implements HyperlinkProviderExt {
+
+ private static final Logger LOG = Logger.getLogger(HyperlinkProviderImpl.class.getName());
+
+ @Override
+ public Set<HyperlinkType> getSupportedHyperlinkTypes() {
+ return EnumSet.of(HyperlinkType.GO_TO_DECLARATION);
+ }
+
+ @Override
+ public boolean isHyperlinkPoint(Document doc, int offset, HyperlinkType type) {
+ return getHyperlinkSpan(doc, offset, type) != null;
+ }
+
+ @Override
+ public int[] getHyperlinkSpan(Document doc, int offset, HyperlinkType type) {
+ try {
+ int[] span = Utilities.getIdentifierBlock((BaseDocument) doc, offset);
+
+ return span;
+ } catch (BadLocationException ex) {
+ return null;
+ }
+ }
+
+ @Override
+ public void performClickAction(Document doc, int offset, HyperlinkType type) {
+ RemoteSourceDescription rsd = org.netbeans.modules.jackpot30.remoting.api.Utilities.remoteSource(doc);
+ FileObject file = NbEditorUtilities.getFileObject(doc);
+
+ if (rsd != null && file != null) {
+ try {
+ URI sourceURI = new URI(rsd.idx.remote.toExternalForm() + "/ui/target?path=" + WebUtilities.escapeForQuery(rsd.idx.remoteSegment) + "&relative=" + WebUtilities.escapeForQuery(rsd.relative) + "&position=" + offset);
+ Map<Object, Object> targetData = Pojson.load(HashMap.class, sourceURI.toURL().openStream());
+
+ if (targetData.containsKey("position")) {
+ open(file, Integer.parseInt(String.valueOf(targetData.get("position"))));
+ } else if (targetData.containsKey("source")) {
+ RemoteIndex targetIDX = null;
+ for (RemoteIndex i : RemoteIndex.loadIndices()) {
+ if (i.remote.equals(rsd.idx.remote) && i.remoteSegment.equals(targetData.get("path"))) {
+ targetIDX = i;
+ }
+ }
+
+ if (targetIDX == null) {
+ //TODO
+ } else {
+ String relativePath = (String) targetData.get("source");
+ URI declarationSpanURI = new URI(targetIDX.remote.toExternalForm() + "/ui/declarationSpan?path=" + WebUtilities.escapeForQuery(targetIDX.remoteSegment) + "&relative=" + WebUtilities.escapeForQuery(relativePath) + "&signature=" + WebUtilities.escapeForQuery(String.valueOf(targetData.get("signature"))));
+ List<Long> span = Pojson.update(new ArrayList<Long>(), declarationSpanURI.toURL().openStream());
+ //TODO: if the target is on disk, should use standard way to open:
+ open(targetIDX.getFile(relativePath), (int) (long) span.get(2));
+ }
+ }
+ } catch (URISyntaxException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+ }
+
+ @Override
+ public String getTooltipText(Document doc, int offset, HyperlinkType type) {
+ return null;
+ }
+
+ public @Deprecated static boolean open(final FileObject fo, final int offset) {
+ return doOpen(fo, offset);
+ }
+
+ @Messages("TXT_Question=Question")
+ private static boolean doOpen(FileObject fo, int offset) {
+ try {
+ DataObject od = DataObject.find(fo);
+ EditorCookie ec = od.getLookup().lookup(EditorCookie.class);
+ LineCookie lc = od.getLookup().lookup(LineCookie.class);
+
+ if (ec != null && lc != null && offset != -1) {
+ StyledDocument doc = null;
+ try {
+ doc = ec.openDocument();
+ } catch (UserQuestionException uqe) {
+ final Object value = DialogDisplayer.getDefault().notify(
+ new NotifyDescriptor.Confirmation(uqe.getLocalizedMessage(),
+ Bundle.TXT_Question(),
+ NotifyDescriptor.YES_NO_OPTION));
+ if (value != NotifyDescriptor.YES_OPTION) {
+ return false;
+ }
+ uqe.confirmed();
+ doc = ec.openDocument();
+ }
+ if (doc != null) {
+ int line = NbDocument.findLineNumber(doc, offset);
+ int lineOffset = NbDocument.findLineOffset(doc, line);
+ int column = offset - lineOffset;
+
+ if (line != -1) {
+ Line l = lc.getLineSet().getCurrent(line);
+
+ if (l != null) {
+ doShow( l, column);
+ return true;
+ }
+ }
+ }
+ }
+
+ OpenCookie oc = od.getLookup().lookup(OpenCookie.class);
+
+ if (oc != null) {
+ doOpen(oc);
+ return true;
+ }
+ } catch (IOException e) {
+ if (LOG.isLoggable(Level.INFO))
+ LOG.log(Level.INFO, e.getMessage(), e);
+ }
+
+ return false;
+ }
+
+ private static void doShow(final Line l, final int column) {
+ if (SwingUtilities.isEventDispatchThread()) {
+ l.show(ShowOpenType.OPEN, ShowVisibilityType.FOCUS, column);
+ } else {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ l.show(ShowOpenType.OPEN, ShowVisibilityType.FOCUS, column);
+ }
+ });
+ }
+ }
+
+ private static void doOpen(final OpenCookie oc) {
+ if (SwingUtilities.isEventDispatchThread()) {
+ oc.open();
+ } else {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ oc.open();
+ }
+ });
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Installer.java
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Installer.java b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Installer.java
new file mode 100644
index 0000000..1064501
--- /dev/null
+++ b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/Installer.java
@@ -0,0 +1,53 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2013 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.ide.browsing;
+
+import org.openide.modules.ModuleInstall;
+
+public class Installer extends ModuleInstall {
+
+ @Override
+ public void restored() {
+ Highlighting.registerComponentListener();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-netbeans-jackpot30/blob/9ed0a377/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/RemoteEditorKit.java
----------------------------------------------------------------------
diff --git a/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/RemoteEditorKit.java b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/RemoteEditorKit.java
new file mode 100644
index 0000000..4731be6
--- /dev/null
+++ b/remoting/ide/browsing/src/org/netbeans/modules/jackpot30/ide/browsing/RemoteEditorKit.java
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
+ *
+ * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ * Other names may be trademarks of their respective owners.
+ *
+ * The contents of this file are subject to the terms of either the GNU
+ * General Public License Version 2 only ("GPL") or the Common
+ * Development and Distribution License("CDDL") (collectively, the
+ * "License"). You may not use this file except in compliance with the
+ * License. You can obtain a copy of the License at
+ * http://www.netbeans.org/cddl-gplv2.html
+ * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
+ * specific language governing permissions and limitations under the
+ * License. When distributing the software, include this License Header
+ * Notice in each file and include the License file at
+ * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the GPL Version 2 section of the License file that
+ * accompanied this code. If applicable, add the following below the
+ * License Header, with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * If you wish your version of this file to be governed by only the CDDL
+ * or only the GPL Version 2, indicate your decision by adding
+ * "[Contributor] elects to include this software in this distribution
+ * under the [CDDL or GPL Version 2] license." If you do not indicate a
+ * single choice of license, a recipient has the option to distribute
+ * your version of this file under either the CDDL, the GPL Version 2 or
+ * to extend the choice of license to its licensees as provided above.
+ * However, if you add GPL Version 2 code and therefore, elected the GPL
+ * Version 2 license, then the option applies only if the new code is
+ * made subject to such option by the copyright holder.
+ *
+ * Contributor(s):
+ *
+ * Portions Copyrighted 2013 Sun Microsystems, Inc.
+ */
+package org.netbeans.modules.jackpot30.ide.browsing;
+
+import org.netbeans.modules.jackpot30.remoting.api.Utilities;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Document;
+import javax.swing.text.EditorKit;
+import org.netbeans.api.editor.mimelookup.MimeRegistration;
+import org.netbeans.editor.GuardedDocument;
+import org.netbeans.modules.editor.NbEditorKit;
+import org.netbeans.modules.jackpot30.remoting.api.Utilities.RemoteSourceDescription;
+import org.netbeans.modules.jackpot30.remoting.api.WebUtilities;
+
+/**
+ *
+ * @author lahvac
+ */
+@MimeRegistration(mimeType = "text/x-rjava", service = EditorKit.class)
+public class RemoteEditorKit extends NbEditorKit {
+
+ @Override
+ public String getContentType() {
+ return "text/x-rjava";
+ }
+
+ @Override
+ public void read(Reader in, Document doc, int pos) throws IOException, BadLocationException {
+ RemoteSourceDescription rsd = Utilities.remoteSource(doc);
+ if (rsd != null) {
+ //TODO: cache the content?
+ try {
+ URI sourceURI = new URI(rsd.idx.remote.toExternalForm() + "/source/cat?path=" + WebUtilities.escapeForQuery(rsd.idx.remoteSegment) + "&relative=" + WebUtilities.escapeForQuery(rsd.relative));
+
+ in = new InputStreamReader(sourceURI.toURL().openStream(), "UTF-8");
+ } catch (URISyntaxException ex) {
+ throw new IOException(ex);
+ }
+ }
+
+ super.read(in, doc, pos);
+
+ if (doc instanceof GuardedDocument) {
+ //XXX: bypassing the standard APIs
+ ((GuardedDocument) doc).getGuardedBlockChain().addBlock(0, doc.getLength() + 1, true);
+ }
+
+ Highlighting.highlight(doc);
+ }
+
+}