Author: saces
Date: 2008-08-20 18:00:30 +0000 (Wed, 20 Aug 2008)
New Revision: 22054

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/pluginmanager/FredPluginThemed.java
   trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
   trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
   trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java
Log:
plugin look&feel integration

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2008-08-20 17:58:52 UTC (rev 
22053)
+++ trunk/freenet/src/freenet/node/Node.java    2008-08-20 18:00:30 UTC (rev 
22054)
@@ -217,6 +217,7 @@
                        } catch (MissingResourceException e) {
                                throw new 
InvalidConfigValueException(e.getLocalizedMessage());
                        }
+                       PluginManager.setLanguage(L10n.getSelectedLanguage());
                }

                public void setPossibleValues(String[] val) {

Modified: trunk/freenet/src/freenet/pluginmanager/FredPluginThemed.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/FredPluginThemed.java       
2008-08-20 17:58:52 UTC (rev 22053)
+++ trunk/freenet/src/freenet/pluginmanager/FredPluginThemed.java       
2008-08-20 18:00:30 UTC (rev 22054)
@@ -3,6 +3,8 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package freenet.pluginmanager;

+import freenet.clients.http.PageMaker.THEME;
+
 /**
  * Interface that has to be implemented for plugins that wants to use
  * nodes html look (css theme) but not PageMaker.<br /> 
@@ -14,6 +16,6 @@
  */
 public interface FredPluginThemed {

-       public void setTheme(String theme);
+       public void setTheme(THEME theme);

 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2008-08-20 
17:58:52 UTC (rev 22053)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2008-08-20 
18:00:30 UTC (rev 22054)
@@ -20,7 +20,7 @@
         * @param plug
         */
        public static PluginInfoWrapper startPlugin(PluginManager pm, String 
filename, FredPlugin plug, PluginRespirator pr) {
-               final PluginInfoWrapper pi = new PluginInfoWrapper(plug, 
filename);
+               final PluginInfoWrapper pi = new PluginInfoWrapper(pr, plug, 
filename);
                final PluginStarter ps = new PluginStarter(pr, pi);
                ps.setPlugin(pm, plug);
                // We must start the plugin *after startup has finished*

Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2008-08-20 17:58:52 UTC (rev 22053)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2008-08-20 18:00:30 UTC (rev 22054)
@@ -13,6 +13,7 @@
        private final String className;
        private Thread thread;
        private final long start;
+       final PluginRespirator pr;
        private final String threadName;
        final FredPlugin plug;
        private final boolean isPproxyPlugin;
@@ -27,11 +28,14 @@
        private HashSet<String> toadletLinks = new HashSet<String>();
        private volatile boolean stopping = false;
        private volatile boolean unregistered = false;
+       private final boolean isThemedPlugin;
+       private final boolean isL10nPlugin;

-       public PluginInfoWrapper(FredPlugin plug, String filename) {
+       public PluginInfoWrapper(PluginRespirator pr, FredPlugin plug, String 
filename) {
                this.plug = plug;
                className = plug.getClass().toString();
                this.filename = filename;
+               this.pr = pr;
                threadName = 'p' + className.replaceAll("^class ", "") + '_' + 
hashCode();
                start = System.currentTimeMillis();
                fedPluginThread = true;
@@ -43,6 +47,8 @@
                isMultiplePlugin = (plug instanceof FredPluginMultiple);
                isFCPPlugin = (plug instanceof FredPluginFCP);
                isVersionedPlugin = (plug instanceof FredPluginVersioned);
+               isThemedPlugin = (plug instanceof FredPluginThemed);
+               isL10nPlugin = (plug instanceof FredPluginL10n);
        }

        void setThread(Thread ps) {
@@ -179,6 +185,13 @@
        public boolean isFCPPlugin() {
                return isFCPPlugin;
        }
+       
+       public boolean isThemedPlugin() {
+               return isThemedPlugin;
+       }
+       public boolean isL10nPlugin() {
+               return isL10nPlugin;
+       }

        public synchronized boolean isStopping() {
                return stopping;

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2008-08-20 
17:58:52 UTC (rev 22053)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2008-08-20 
18:00:30 UTC (rev 22054)
@@ -25,10 +25,12 @@
 import java.util.zip.ZipException;

 import freenet.client.HighLevelSimpleClient;
+import freenet.clients.http.PageMaker.THEME;
 import freenet.config.InvalidConfigValueException;
 import freenet.config.SubConfig;
 import freenet.keys.FreenetURI;
 import freenet.l10n.L10n;
+import freenet.l10n.L10n.LANGUAGE;
 import freenet.node.Node;
 import freenet.node.NodeClientCore;
 import freenet.node.RequestStarter;
@@ -38,10 +40,12 @@
 import freenet.support.HexUtil;
 import freenet.support.JarClassLoader;
 import freenet.support.Logger;
+import freenet.support.SerialExecutor;
 import freenet.support.api.HTTPRequest;
 import freenet.support.api.StringArrCallback;
 import freenet.support.io.Closer;
 import freenet.support.io.FileUtil;
+import freenet.support.io.NativeThread;

 public class PluginManager {

@@ -65,9 +69,14 @@
        private boolean logMINOR;
        private boolean logDEBUG;
        private final HighLevelSimpleClient client;
+       
+       private static PluginManager selfinstance = null;

+       private THEME fproxyTheme;
+       
+       private final SerialExecutor executor;
+
        public PluginManager(Node node) {
-
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
                logDEBUG = Logger.shouldLog(Logger.DEBUG, this);
                // config 
@@ -85,7 +94,10 @@

                client = 
core.makeClient(RequestStarter.INTERACTIVE_PRIORITY_CLASS, true);

-
+               // callback executor
+               executor = new SerialExecutor(NativeThread.NORM_PRIORITY);
+               executor.start(node.executor, "PM callback executor");
+               
                pmconfig = new SubConfig("pluginmanager", node.config);
 //             pmconfig.register("configfile", "fplugins.ini", 9, true, true, 
"PluginConfig.configFile", "PluginConfig.configFileLong",
 //                             new StringCallback() {
@@ -140,6 +152,9 @@
                                startPluginAuto(name, false);

                pmconfig.finishedInitialization();
+               
+               fproxyTheme = 
THEME.themeFromName(node.config.get("fproxy").getString("css"));
+               selfinstance = this;
        }

        private String[] getConfigLoadString() {
@@ -204,7 +219,7 @@
        }

        public void startPluginFreenet(final String filename, boolean store) {
-               realStartPlugin(new PluginDownLoaderFreenet(client), filename, 
true);
+               realStartPlugin(new PluginDownLoaderFreenet(client), filename, 
store);
        }

        private void realStartPlugin(final PluginDownLoader pdl, final String 
filename, final boolean store) {
@@ -222,7 +237,7 @@
                                try {
                                        plug = loadPlugin(pdl, filename);
                                        
pluginProgress.setProgress(PluginProgress.STARTING);
-                                       PluginInfoWrapper pi = 
PluginHandler.startPlugin(PluginManager.this, filename, plug, new 
PluginRespirator(node, PluginManager.this));
+                                       PluginInfoWrapper pi = 
PluginHandler.startPlugin(PluginManager.this, filename, plug, new 
PluginRespirator(node, PluginManager.this, plug));
                                        synchronized(pluginWrappers) {
                                                pluginWrappers.add(pi);
                                        }
@@ -845,4 +860,52 @@
                        return "PluginProgress[name=" + name + ",startingTime=" 
+ startingTime + ",progress=" + pluginProgress + "]";
                }
        }
+
+       public void setFProxyTheme(final THEME cssName) {
+               //if (fproxyTheme.equals(cssName)) return;
+               fproxyTheme = cssName;
+               synchronized(pluginWrappers) {
+                       for(PluginInfoWrapper pi: pluginWrappers) {
+                               pi.pr.getPageMaker().setTheme(cssName);
+                               if(pi.isThemedPlugin()) {
+                                       final FredPluginThemed plug = 
(FredPluginThemed)(pi.plug);
+                                       executor.execute(new Runnable() {
+                                               public void run() {
+                                                       try {
+                                                               
plug.setTheme(cssName);
+                                                       } catch (Throwable t) {
+                                                               
Logger.error(this, "Cought Trowable in Callback", t);
+                                                       }
+                                               }}, "Callback");
+                               }
+                       }
+               }
+       }
+
+       public static void setLanguage(LANGUAGE lang) {
+               if (selfinstance == null) return;
+               selfinstance.setPluginLanguage(lang);
+       }
+
+       private void setPluginLanguage(final LANGUAGE lang) {
+               synchronized(pluginWrappers) {
+                       for(PluginInfoWrapper pi: pluginWrappers) {
+                               if(pi.isL10nPlugin()) {
+                                       final FredPluginL10n plug = 
(FredPluginL10n)(pi.plug);
+                                       executor.execute(new Runnable() {
+                                               public void run() {
+                                                       try {
+                                                               
plug.setLanguage(lang);
+                                                       } catch (Throwable t) {
+                                                               
Logger.error(this, "Cought Trowable in Callback", t);
+                                                       }
+                                               }}, "Callback");
+                               }
+                       }
+               }
+       }
+
+       public THEME getFProxyTheme() {
+               return fproxyTheme;
+       }
 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java       
2008-08-20 17:58:52 UTC (rev 22053)
+++ trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java       
2008-08-20 18:00:30 UTC (rev 22054)
@@ -14,11 +14,18 @@
        private final HighLevelSimpleClient hlsc;
        private final Node node;
        private final PageMaker pageMaker;
+       private final FredPlugin plugin;
+       private final PluginManager pluginManager;

-       public PluginRespirator(Node node, PluginManager pm) {
+       public PluginRespirator(Node node, PluginManager pm, FredPlugin plug) {
                this.node = node;
                this.hlsc = 
node.clientCore.makeClient(RequestStarter.INTERACTIVE_PRIORITY_CLASS);
-               this.pageMaker = new PageMaker("clean");
+               this.plugin = plug;
+               this.pluginManager = pm;
+               if (plugin instanceof FredPluginL10n)
+                       pageMaker = new PageMaker((FredPluginL10n)plugin, 
pluginManager.getFProxyTheme());
+               else
+                       pageMaker = new PageMaker(null, 
pluginManager.getFProxyTheme());
        }

        //public HighLevelSimpleClient getHLSimpleClient() throws 
PluginSecurityException {


Reply via email to