What is the specific procedure to call a NetBeans plugin?

  • Thread starter Ramon F Herrera
  • Start date
R

Ramon F Herrera

I have been using this "application" as a tutorial to learn the
capabilities of the OpenOffice API/SDK.

http://platform.netbeans.org/tutorials/nbm-open-office.html

My problem is that the package described in that page was not written
as an application, but as a plugin extension to NetBeans. My goal
seems very simple; to have a main like this:


public class SheetMaker {
public static void main(String[] args) {
new JavaLobbyTopComponent.ResolvableHelper().readResolve();
}
}


(the above attempt is as close as I have been to success, it compiles,
but fails at run time).

which I will build in several different (non-NB) IDEs and make an
executable *.jar.

The next post contains the source of the full class
("JavaLobbyTopComponent") that I am trying to execute.

-Ramon
 
R

Ramon F Herrera

I have been using this "application" as a tutorial to learn the
capabilities of the OpenOffice API/SDK.

http://platform.netbeans.org/tutorials/nbm-open-office.html

My problem is that the package described in that page was not written
as an application, but as a plugin extension to NetBeans. My goal
seems very simple; to have a main like this:

public class SheetMaker {
public static void main(String[] args) {
new JavaLobbyTopComponent.ResolvableHelper().readResolve();
}

}

(the above attempt is as close as I have been to success, it compiles,
but fails at run time).

which I will build in several different (non-NB) IDEs and make an
executable *.jar.

The next post contains the source of the full class
("JavaLobbyTopComponent") that I am trying to execute.

-Ramon



package org.netbeans.modules.javalobbymodule;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
import javax.swing.JFileChooser;
import org.openide.ErrorManager;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
import org.openide.util.Utilities;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
import com.sun.star.lang.XComponent;
import com.sun.star.sheet.XSpreadsheet;
import com.sun.star.sheet.XSpreadsheetDocument;

/**
* Top component which displays something.
*/
final class JavaLobbyTopComponent extends TopComponent {

//These are for determining whether user
//wants to see "Most Replies" and/or "Least Replies":
private boolean mostRepliesShown = true;
private boolean leastRepliesShown = false;
private int clickOnMostRepliesShown = 0;
private int clickOnLeastRepliesShown = 1;

//These are for calculating highest and lowest
//number of replies (in final column):
private int mostRepliesSoFar = 0;
private int leastRepliesSoFar = 0;
private int index_most = 0;
private int index_least = 0;
private String mostAuthor;
private String leastAuthor;
private String totalNumber;

private static JavaLobbyTopComponent instance;
/** path to the icon used by the component and its open action */
// static final String ICON_PATH = "SET/PATH/TO/ICON/HERE";

private static final String PREFERRED_ID =
"JavaLobbyTopComponent";

private JavaLobbyTopComponent() {
initComponents();
setName(NbBundle.getMessage(JavaLobbyTopComponent.class,
"CTL_JavaLobbyTopComponent"));

setToolTipText(NbBundle.getMessage(JavaLobbyTopComponent.class,
"HINT_JavaLobbyTopComponent"));
// setIcon(Utilities.loadImage(ICON_PATH, true));
}

/** 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
">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
ReportButton = new javax.swing.JButton();
jRadioButton1 = new javax.swing.JRadioButton();
jRadioButton2 = new javax.swing.JRadioButton();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();

jScrollPane1.setHorizontalScrollBar(null);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"How do we do", "6/32", "Pedro", "5"},
{"Something else", "6/1", "Juan", "23"},
{"The shadow of your smile", "5/17", "Humberto", "4"},
{"Just wait for me", "8/22", "Foncho", "12"},
{"Don't cry for me Argentina", "11/14", "Torcuato",
"11"},
{"Voyage to the bottom of the Sea", "12/2",
"Filomeno", "4"},
{"Mars, Jupiter and next...", "10/7", "Alain", "7"},
{"Neil Armstrong", "5/31", "Rosalind", "11"},
{"Flatfish++", "6/28", "Lunaro", "13"},
{"When I saw your face", "12/21", "George W", "18"},
{"The first time", "9/18", "Kennedy", "2"},
{"Form Here to Eternity", "1/30", "NIcholson", "9"},
{"For Whom the Bells Toll", "3/16", "Hemingway", "11"}
},
new String [] {
"Javalobby Title", "Date", "Author", "Reply"
}
));
jScrollPane1.setViewportView(jTable1);

org.openide.awt.Mnemonics.setLocalizedText(ReportButton,
"Generate Report");
ReportButton.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
evt) {
ReportButtonActionPerformed(evt);
}
});

jRadioButton1.setSelected(true);
org.openide.awt.Mnemonics.setLocalizedText(jRadioButton1,
"Most Replied");

jRadioButton1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,
0, 0, 0));
jRadioButton1.setMargin(new java.awt.Insets(0, 0, 0, 0));
jRadioButton1.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
evt) {
jRadioButton1ActionPerformed(evt);
}
});

org.openide.awt.Mnemonics.setLocalizedText(jRadioButton2,
"Least Replied");

jRadioButton2.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,
0, 0, 0));
jRadioButton2.setMargin(new java.awt.Insets(0, 0, 0, 0));
jRadioButton2.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
evt) {
jRadioButton2ActionPerformed(evt);
}
});


jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
"Executable:");

org.openide.awt.Mnemonics.setLocalizedText(jButton2,
"Browse...");
jButton2.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent
evt) {
jButton2ActionPerformed(evt);
}
});

org.jdesktop.layout.GroupLayout jPanel1Layout = new
org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(

jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.add(jLabel1)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jTextField1,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jButton2)
.add(16, 16, 16))
);
jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.add(19, 19, 19)
.add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel1)
.add(jTextField1,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jButton2))
.addContainerGap(19, Short.MAX_VALUE))
);

org.jdesktop.layout.GroupLayout layout = new
org.jdesktop.layout.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(

layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING,
layout.createSequentialGroup()
.addContainerGap(188, Short.MAX_VALUE)
.add(jRadioButton1)
.add(70, 70, 70)
.add(jRadioButton2)
.add(168, 168, 168))
.add(layout.createSequentialGroup()
.add(41, 41, 41)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING,
false)
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 502,
Short.MAX_VALUE))
.addContainerGap(37, Short.MAX_VALUE))
.add(layout.createSequentialGroup()
.add(242, 242, 242)
.add(ReportButton,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 129,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(215, Short.MAX_VALUE))
);
layout.setVerticalGroup(

layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(jScrollPane1,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 231,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(29, 29, 29)
.add(jPanel1,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED,
20, Short.MAX_VALUE)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jRadioButton2)
.add(jRadioButton1))
.add(14, 14, 14)
.add(ReportButton,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 32,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(36, 36, 36))
);
}// </editor-fold>

private void
ReportButtonActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
OOoHelper oooHelper = new OOoHelper();

//Here we select a cell in the first column (column "0"),
//so that we know for sure where we are
//when we start doing all the calculations of what is in which
cell:
int row = 0;
int col = 0;
boolean toggle = false;
boolean extend = false;
jTable1.changeSelection(row, col, toggle, extend);

jTextField1.setText("C:/Program Files/OpenOffice.org 2.3/
program/soffice.exe");

try {

//Here a call is made to the method that
//bootstraps our OpenOffice.org executable:
Object desktop =
oooHelper.simpleBootstrap(jTextField1.getText());
if (desktop == null) {
return;
}

//Here the spreadsheet document is created:
XComponent xSpreadsheetComponent =
oooHelper.getSpreadsheetComponent(desktop,
"private:factory/scalc");
XSpreadsheetDocument xSpreadsheetDocument =

oooHelper.getXSpreadsheetDocument(xSpreadsheetComponent);

//Here we name our spreadsheet and set it as active
//(as discussed above, we could also delete the three
default spreadsheets,
//which would make our spreadsheet the only spreadsheet,
//which would therefore
//also be the active spreadsheet):
XSpreadsheet xSpreadsheet =
oooHelper.getXSpreadsheet(xSpreadsheetDocument,
"Javalobby Article Analyzer");
XSpreadsheet xActiveSpreadsheet =
oooHelper.getXActiveSpreadsheet
(xSpreadsheetComponent, xSpreadsheet);

//Here we set the text content (and text color, as well as
ALL the cells's
//border line color & width)
//of all the cells in the first row of the table (the
header):
oooHelper.setHeaders(xSpreadsheet, "A1", "Javalobby
Title");
oooHelper.setHeaders(xSpreadsheet, "B1", "Date");
oooHelper.setHeaders(xSpreadsheet, "C1", "Author");
oooHelper.setHeaders(xSpreadsheet, "D1", "Reply");

//Here we find the value of the currently selected cell,
//which is forced to be the one in the top left, thanks to
the
//first few lines of this ActionPerformed event,
//and then we find the value of the columns to the right,
//which we send to a new method where a column and row are
//assigned to the value
//and where a background color is set for even rows.
for (int i = 0; i < jTable1.getRowCount(); i++) {

jTable1.setRowSelectionInterval(i,i);
int position = 1 + i;

//Get value from table and send to helper method for
rendering:
String selectedValue = (String) jTable1.getValueAt

(jTable1.getSelectedRow(),jTable1.getSelectedColumn());
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
0, position,
selectedValue);
oooHelper.setColumnWidth(xSpreadsheet, 0, 10000);

//Get value from table and send to helper method for
rendering:
String firstNextToSelectedCell = (String)
jTable1.getValueAt
(jTable1.getSelectedRow(),1);
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
1, position,
firstNextToSelectedCell);

//Get value from table and send to helper method for
rendering:
String secondNextToSelectedCell = (String)
jTable1.getValueAt
(jTable1.getSelectedRow(),2);
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
2, position,
secondNextToSelectedCell);
oooHelper.setColumnWidth(xSpreadsheet, 2, 3500);

//Get value from table and send to helper method for
rendering:
String thirdNextToSelectedCell = (String)
jTable1.getValueAt
(jTable1.getSelectedRow(),3);
oooHelper.setNumValueOfXCellAtPosition(xSpreadsheet,
3, position,
Integer.parseInt(thirdNextToSelectedCell));
oooHelper.setColumnWidth(xSpreadsheet, 3, 1000);

//Choose all even numbered rows:
if (position%2 == 0) {
//Then set them to a distinct color (orange).
oooHelper.setColorRow(xSpreadsheet, position,
0xFF9933);
}
}

//Formula for total calculated and sent for rendering:
int realRowCount = jTable1.getRowCount() + 1;
oooHelper.setFormulaOfXCellAtPosition(xSpreadsheet, 3,
realRowCount, "=sum(D1:D" + realRowCount +")");

//This section is about finding highest and lowest
replies.
//Here we select D1, (the first cell in the Replies
column),
//as our starting point, from where we find the highest
value,
//by comparing the current highest value with the next
selected value.
//We then identify the cell containing that value and the
author of the article.
//With some variation, we also calculate the lowest value,
cell, and author.
//We also add up all the values and calculate the total
value,
//as the standard way of doing this, although we also have
an OOo formula.
int repliesCol = 3;
int repliesRow = 1;
boolean toggle1 = false;
boolean extend1 = false;
jTable1.changeSelection(repliesRow, repliesCol, toggle1,
extend1);
index_most = -1; //No records looked at yet.
index_least = -1; //No records looked at yet.
mostRepliesSoFar = 0;
leastRepliesSoFar = 0;
for (int i = 0; i < jTable1.getRowCount(); i++) {
jTable1.setRowSelectionInterval(i,i);
String selectedValue = (String)
jTable1.getValueAt(jTable1.getSelectedRow(),
jTable1.getSelectedColumn()); //E.g: 16
int selectedValueAsInt =
Integer.parseInt(selectedValue);
if (selectedValueAsInt > mostRepliesSoFar) {
mostRepliesSoFar = selectedValueAsInt;
if (leastRepliesSoFar == 0){
leastRepliesSoFar = mostRepliesSoFar;
}
index_most = i;
mostAuthor = (String) jTable1.getValueAt(i,2);
} else if (selectedValueAsInt < leastRepliesSoFar){
leastRepliesSoFar = selectedValueAsInt;
index_least = i;
leastAuthor = (String) jTable1.getValueAt(i,2);
}
//Alternative way (that is, the standard non OOo way)
//of adding up number of replies to a total.
totalNumber = totalNumber + selectedValueAsInt;
}

//If user wants to see "Most Replies",
//color the row with most replies green
//and, below the table, add a cell containing the author
of that article,
//and color that cell the same green color.
if (mostRepliesShown == true) {
oooHelper.setColorRow(xSpreadsheet, index_most+1,
0x008000);
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
1,
jTable1.getRowCount()+5, "Most replies:");
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
2,
jTable1.getRowCount()+5, mostAuthor);
oooHelper.setColorCell(xSpreadsheet, 2,
jTable1.getRowCount()+5, 0x008000);
}

//If user wants to see "Least Replies",
//color the row with least replies red
//and, below the table, add a cell containing
//the author of that article,
//and color that cell the same red color.
if (leastRepliesShown == true) {
oooHelper.setColorRow(xSpreadsheet, index_least+1,
0x800000);
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
1,
jTable1.getRowCount()+6, "Least replies:");
oooHelper.setTextValueOfXCellAtPosition(xSpreadsheet,
2,
jTable1.getRowCount()+6, leastAuthor);
oooHelper.setColorCell(xSpreadsheet, 2,
jTable1.getRowCount()+6, 0x800000);
}

} catch (Exception ex) {
ex.printStackTrace();
}

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
jTextField1.setText("C:/Program Files/OpenOffice.org 2.3/
program/soffice.exe");
JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
jTextField1.setText(fc.getSelectedFile().toString());
jTextField1.setText("C:/Program Files/OpenOffice.org 2.3/
program/soffice.exe");
}
}

private void
jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
clickOnLeastRepliesShown = clickOnLeastRepliesShown + 1;

if (clickOnLeastRepliesShown == 1) {
leastRepliesShown = false;
clickOnLeastRepliesShown = clickOnLeastRepliesShown + 1;

} else if (clickOnLeastRepliesShown > 1) {
leastRepliesShown = true;
clickOnLeastRepliesShown = 0;
}
}

private void
jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
clickOnMostRepliesShown = clickOnMostRepliesShown + 1;
//By default, the "Most Replies" line is shown in the spreadsheet.
//First time we click this, we want to NOT show this line.
//So, when it is set to 1, we do NOT want to see the line.
//So, we increase the variable 1 further, so that next time it will be
2.

if (clickOnMostRepliesShown == 1) {
mostRepliesShown = false;
clickOnMostRepliesShown = clickOnMostRepliesShown + 1;

//Else, when the variable is bigger than 1,
//in other words, when the radiobutton is clicked a 2nd
time,
//we want to show the "Most Replies" line in the
spreadsheet.
//So now the variable is bigger than one.
//We set it back to 0 so that when it is next clicked,
//the first part of the statement is true again,
//because then we will have the variable at 1.
} else if (clickOnMostRepliesShown > 1) {
mostRepliesShown = true;
clickOnMostRepliesShown = 0;
}
}


// Variables declaration - do not modify
private javax.swing.JButton ReportButton;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JRadioButton jRadioButton1;
private javax.swing.JRadioButton jRadioButton2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField jTextField1;
// End of variables declaration

/**
* Gets default instance. Do not use directly: reserved for
*.settings files only,
* i.e. deserialization routines; otherwise you could get a non-
deserialized instance.
* To obtain the singleton instance, use {@link findInstance}.
*/
public static synchronized JavaLobbyTopComponent getDefault() {
if (instance == null) {
instance = new JavaLobbyTopComponent();
}
return instance;
}

/**
* Obtain the JavaLobbyTopComponent instance. Never call {@link
#getDefault} directly!
*/
public static synchronized JavaLobbyTopComponent findInstance() {
TopComponent win =
WindowManager.getDefault().findTopComponent(PREFERRED_ID);
if (win == null) {
ErrorManager.getDefault().log(ErrorManager.WARNING,
"Cannot find JavaLobby component. It will not be located properly in
the window system.");
return getDefault();
}
if (win instanceof JavaLobbyTopComponent) {
return (JavaLobbyTopComponent)win;
}
ErrorManager.getDefault().log(ErrorManager.WARNING, "There
seem to be multiple components with the '" + PREFERRED_ID + "' ID.
That is a potential source of errors and unexpected behavior.");
return getDefault();
}

public int getPersistenceType() {
return TopComponent.PERSISTENCE_ALWAYS;
}

public void componentOpened() {
// TODO add custom code on component opening
}

public void componentClosed() {
// TODO add custom code on component closing
}

/** replaces this in object stream */
public Object writeReplace() {
return new ResolvableHelper();
}

protected String preferredID() {
return PREFERRED_ID;
}

final static class ResolvableHelper implements Serializable {
private static final long serialVersionUID = 1L;
public Object readResolve() {
return JavaLobbyTopComponent.getDefault();
}
}

}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top