2012-11-06 15:59:08 +00:00
/ *
* To change this template , choose Tools | Templates
* and open the template in the editor .
* /
package com.jme3.gde.welcome ;
2013-02-01 15:58:25 +00:00
import java.io.BufferedReader ;
2012-11-06 15:59:08 +00:00
import java.io.IOException ;
2013-02-01 15:58:25 +00:00
import java.io.InputStreamReader ;
2012-11-06 15:59:08 +00:00
import java.net.URL ;
2013-01-31 17:40:35 +00:00
import java.net.URLConnection ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
2012-11-06 15:59:08 +00:00
import javax.swing.event.HyperlinkEvent ;
import javax.swing.event.HyperlinkListener ;
import org.netbeans.api.settings.ConvertAsProperties ;
import org.openide.awt.ActionID ;
import org.openide.awt.ActionReference ;
import org.openide.util.Exceptions ;
2013-01-26 04:31:25 +00:00
import org.openide.util.HelpCtx ;
2012-11-06 15:59:08 +00:00
import org.openide.windows.TopComponent ;
import org.openide.util.NbBundle.Messages ;
2013-01-31 17:40:35 +00:00
import org.openide.util.NbPreferences ;
import org.openide.windows.WindowManager ;
2012-11-07 02:10:11 +00:00
import sun.swing.SwingUtilities2 ;
2012-11-06 15:59:08 +00:00
/ * *
* Top component which displays something .
* /
@ConvertAsProperties (
dtd = " -//com.jme3.gde.welcome//WelcomeScreen//EN " ,
autostore = false )
@TopComponent.Description (
preferredID = " WelcomeScreenTopComponent " ,
//iconBase="SET/PATH/TO/ICON/HERE",
2013-02-01 15:58:25 +00:00
persistenceType = TopComponent . PERSISTENCE_ALWAYS )
2012-11-06 15:59:08 +00:00
@TopComponent.Registration ( mode = " editor " , openAtStartup = true )
@ActionID ( category = " Window " , id = " com.jme3.gde.welcome.WelcomeScreenTopComponent " )
@ActionReference ( path = " Menu/Window " /*, position = 333 */ )
@TopComponent.OpenActionRegistration (
displayName = " #CTL_WelcomeScreenAction " ,
preferredID = " WelcomeScreenTopComponent " )
@Messages ( {
2012-11-07 02:10:11 +00:00
" CTL_WelcomeScreenAction=Info Screen " ,
" CTL_WelcomeScreenTopComponent=Info Screen " ,
" HINT_WelcomeScreenTopComponent=Shows news and information about your SDK "
2012-11-06 15:59:08 +00:00
} )
public final class WelcomeScreenTopComponent extends TopComponent implements HyperlinkListener {
2013-01-31 17:40:35 +00:00
private static final Logger logger = Logger . getLogger ( WelcomeScreenTopComponent . class . getName ( ) ) ;
private static final HelpCtx ctx = new HelpCtx ( " com.jme3.gde.core.about " ) ;
2013-01-25 22:16:30 +00:00
// private final RssFeedParser parser = new RssFeedParser(org.openide.util.NbBundle.getMessage(WelcomeScreenTopComponent.class, "WelcomeScreenTopComponent.rss.link"));
2012-11-06 15:59:08 +00:00
public WelcomeScreenTopComponent ( ) {
initComponents ( ) ;
2012-11-07 02:10:11 +00:00
setName ( Bundle . CTL_WelcomeScreenTopComponent ( ) ) ;
setToolTipText ( Bundle . HINT_WelcomeScreenTopComponent ( ) ) ;
2012-11-06 15:59:08 +00:00
jScrollPane2 . setOpaque ( false ) ;
jScrollPane2 . getViewport ( ) . setOpaque ( false ) ;
2013-01-31 23:22:36 +00:00
jEditorPane1 . putClientProperty ( SwingUtilities2 . AA_TEXT_PROPERTY_KEY , SwingUtilities2 . AATextInfo . getAATextInfo ( true ) ) ;
jEditorPane1 . addHyperlinkListener ( this ) ;
2012-11-06 15:59:08 +00:00
}
2013-01-31 17:40:35 +00:00
public void loadPage ( ) {
try {
URL startUrl = new URL ( org . openide . util . NbBundle . getMessage ( WelcomeScreenTopComponent . class , " WelcomeScreenTopComponent.http.link " ) ) ;
2013-02-01 15:58:25 +00:00
long lastMod = getModified ( startUrl ) ;
2013-01-31 17:40:35 +00:00
NbPreferences . forModule ( getClass ( ) ) . putLong ( " LAST_PAGE_UPDATE " , lastMod ) ;
jEditorPane1 . setPage ( startUrl ) ;
} catch ( IOException ex ) {
2013-02-01 15:58:25 +00:00
logger . log ( Level . INFO , " Loading welcome page from web failed " , ex ) ;
2013-01-31 17:40:35 +00:00
try {
jEditorPane1 . setPage ( new URL ( org . openide . util . NbBundle . getMessage ( WelcomeScreenTopComponent . class , " WelcomeScreenTopComponent.local.link " ) ) ) ;
} catch ( IOException ex1 ) {
logger . log ( Level . SEVERE , " Could not open local help page! " , ex1 ) ;
}
}
}
public static void checkOpen ( ) {
2013-02-01 15:58:25 +00:00
checkOpen ( 0 ) ;
}
public static void checkOpen ( long lastMod ) {
2013-01-31 17:40:35 +00:00
try {
long lastCheck = NbPreferences . forModule ( WelcomeScreenTopComponent . class ) . getLong ( " LAST_PAGE_UPDATE " , 0 ) ;
URL startUrl = new URL ( org . openide . util . NbBundle . getMessage ( WelcomeScreenTopComponent . class , " WelcomeScreenTopComponent.http.link " ) ) ;
2013-02-01 15:58:25 +00:00
if ( lastMod = = 0 ) {
lastMod = getModified ( startUrl ) ;
}
logger . log ( Level . INFO , " Checking page id {0} vs stored id {1} " , new Object [ ] { lastMod , lastCheck } ) ;
2013-01-31 17:40:35 +00:00
if ( lastCheck ! = lastMod ) {
WelcomeScreenTopComponent tc = ( WelcomeScreenTopComponent ) WindowManager . getDefault ( ) . findTopComponent ( " WelcomeScreenTopComponent " ) ;
if ( tc ! = null ) {
tc . open ( ) ;
tc . requestActive ( ) ;
2013-01-31 22:55:55 +00:00
} else {
logger . log ( Level . WARNING , " Did not find Welcome Screen window " ) ;
2013-01-31 17:40:35 +00:00
}
}
} catch ( IOException ex ) {
Exceptions . printStackTrace ( ex ) ;
}
}
2013-01-31 23:22:36 +00:00
public void hyperlinkUpdate ( HyperlinkEvent he ) {
if ( he . getEventType ( ) = = HyperlinkEvent . EventType . ACTIVATED ) {
try {
jEditorPane1 . setPage ( he . getURL ( ) ) ;
} catch ( IOException ex ) {
logger . log ( Level . INFO , " Loading page failed " , ex ) ;
try {
logger . log ( Level . WARNING , " Could not open web page! " ) ;
URL startUrl = new URL ( org . openide . util . NbBundle . getMessage ( WelcomeScreenTopComponent . class , " WelcomeScreenTopComponent.local.link " ) ) ;
jEditorPane1 . setPage ( startUrl ) ;
} catch ( IOException ex1 ) {
logger . log ( Level . SEVERE , " Could not open local help page! " , ex1 ) ;
}
}
}
}
2013-02-01 15:58:25 +00:00
private static long getModified ( URL url ) {
try {
URLConnection conn = url . openConnection ( ) ;
long lastMod = conn . getLastModified ( ) ;
if ( lastMod ! = 0 ) {
logger . log ( Level . INFO , " Found getLastModified of {0} " , lastMod ) ;
return lastMod ;
} else {
logger . log ( Level . INFO , " Returning hash code of content " , lastMod ) ;
String content = getContent ( conn ) ;
return content . hashCode ( ) ;
}
} catch ( IOException ex ) {
logger . log ( Level . INFO , " Loading welcome page modified date from web failed " , ex ) ;
}
return 0 ;
}
private static String getContent ( URLConnection connection ) {
BufferedReader in = null ;
try {
in = new BufferedReader (
new InputStreamReader (
connection . getInputStream ( ) ) ) ;
StringBuilder response = new StringBuilder ( ) ;
String inputLine ;
while ( ( inputLine = in . readLine ( ) ) ! = null ) {
response . append ( inputLine ) ;
}
in . close ( ) ;
return response . toString ( ) ;
} catch ( IOException ex ) {
logger . log ( Level . INFO , " Reading welcome page content from web failed " , ex ) ;
} finally {
try {
in . close ( ) ;
} catch ( IOException ex ) {
logger . log ( Level . INFO , " Closing reader for welcome page content from web failed " , ex ) ;
}
}
return " " ;
}
2012-11-06 15:59:08 +00:00
/ * *
* 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 ( ) {
jPanel1 = new GradPanel ( ) ;
jScrollPane2 = new javax . swing . JScrollPane ( ) ;
jEditorPane1 = new javax . swing . JEditorPane ( ) ;
setBackground ( java . awt . Color . white ) ;
jPanel1 . setBackground ( new java . awt . Color ( 255 , 255 , 255 ) ) ;
2012-11-07 02:10:11 +00:00
jScrollPane2 . setBorder ( javax . swing . BorderFactory . createEmptyBorder ( 1 , 1 , 1 , 1 ) ) ;
2012-11-06 15:59:08 +00:00
jScrollPane2 . setOpaque ( false ) ;
jEditorPane1 . setEditable ( false ) ;
2012-11-07 02:10:11 +00:00
jEditorPane1 . setBorder ( javax . swing . BorderFactory . createEmptyBorder ( 1 , 1 , 1 , 1 ) ) ;
jEditorPane1 . setContentType ( " text/html " ) ; // NOI18N
2012-11-06 15:59:08 +00:00
jEditorPane1 . setCaretColor ( new java . awt . Color ( 255 , 255 , 255 ) ) ;
jEditorPane1 . setOpaque ( false ) ;
jScrollPane2 . setViewportView ( jEditorPane1 ) ;
javax . swing . GroupLayout jPanel1Layout = new javax . swing . GroupLayout ( jPanel1 ) ;
jPanel1 . setLayout ( jPanel1Layout ) ;
jPanel1Layout . setHorizontalGroup (
jPanel1Layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addGroup ( jPanel1Layout . createSequentialGroup ( )
. addContainerGap ( )
2013-01-25 21:57:27 +00:00
. addComponent ( jScrollPane2 , javax . swing . GroupLayout . DEFAULT_SIZE , 491 , Short . MAX_VALUE )
2012-11-06 15:59:08 +00:00
. addContainerGap ( ) )
) ;
jPanel1Layout . setVerticalGroup (
jPanel1Layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
2012-11-07 02:10:11 +00:00
. addGroup ( jPanel1Layout . createSequentialGroup ( )
2012-11-06 15:59:08 +00:00
. addContainerGap ( )
2013-01-25 21:57:27 +00:00
. addComponent ( jScrollPane2 , javax . swing . GroupLayout . DEFAULT_SIZE , 432 , Short . MAX_VALUE )
2012-11-06 15:59:08 +00:00
. addContainerGap ( ) )
) ;
javax . swing . GroupLayout layout = new javax . swing . GroupLayout ( this ) ;
this . setLayout ( layout ) ;
layout . setHorizontalGroup (
layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addComponent ( jPanel1 , javax . swing . GroupLayout . DEFAULT_SIZE , javax . swing . GroupLayout . DEFAULT_SIZE , Short . MAX_VALUE )
) ;
layout . setVerticalGroup (
layout . createParallelGroup ( javax . swing . GroupLayout . Alignment . LEADING )
. addComponent ( jPanel1 , javax . swing . GroupLayout . DEFAULT_SIZE , javax . swing . GroupLayout . DEFAULT_SIZE , Short . MAX_VALUE )
) ;
} // </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax . swing . JEditorPane jEditorPane1 ;
private javax . swing . JPanel jPanel1 ;
private javax . swing . JScrollPane jScrollPane2 ;
// End of variables declaration//GEN-END:variables
@Override
public void componentOpened ( ) {
2013-01-31 17:40:35 +00:00
loadPage ( ) ;
2012-11-06 15:59:08 +00:00
}
2013-01-26 04:31:25 +00:00
@Override
public HelpCtx getHelpCtx ( ) {
return ctx ;
}
2012-11-06 15:59:08 +00:00
@Override
public void componentClosed ( ) {
// TODO add custom code on component closing
}
void writeProperties ( java . util . Properties p ) {
// better to version settings since initial version as advocated at
// http://wiki.apidesign.org/wiki/PropertyFiles
p . setProperty ( " version " , " 1.0 " ) ;
// TODO store your settings
}
void readProperties ( java . util . Properties p ) {
String version = p . getProperty ( " version " ) ;
// TODO read your settings according to their version
}
}