⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agoracastnewsrc.java

📁 CroftSoft Code Library是一个开源的可移植的纯Java游戏库
💻 JAVA
字号:
     package com.croftsoft.agoracast.c2p;

     import java.io.*;
     import java.util.*;

     import com.croftsoft.core.io.SerializableLib;
     import com.croftsoft.core.lang.NullArgumentException;
     import com.croftsoft.core.lang.StringLib;
     import com.croftsoft.core.net.news.UsenetMessage;
     import com.croftsoft.core.text.sml.*;

     /*********************************************************************
     *
     * <p />
     *
     * @version
     *   2001-09-12
     * @since
     *   2001-07-31
     * @author
     *   <a href="http://croftsoft.com/">David Wallace Croft</a>
     *********************************************************************/

     public final class  AgoracastNewsrc
     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////
     {

     private final Map  serverToGroupToLastMap;

     //

     private transient boolean  isDirty;

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public static AgoracastNewsrc  load ( String  filename )
       throws IOException
     //////////////////////////////////////////////////////////////////////
     {
       return fromSmlNode ( SmlNodeLib.load ( filename, false ) );
     }

     public static AgoracastNewsrc  fromSmlNode ( SmlNode  smlNode )
     //////////////////////////////////////////////////////////////////////
     {
       if ( !"agoracast-newsrc".equals ( smlNode.getName ( ) ) )
       {
         throw new IllegalArgumentException ( "agoracast-newsrc" );
       }

       Map  serverToGroupToLastMap = new HashMap ( );

       SmlNode  serversSmlNode = smlNode.getChildNode ( "servers" );

       if ( serversSmlNode != null )
       {
         SmlNode [ ]  serverNodes
           = serversSmlNode.getChildNodes ( "server" );

         for ( int  i = 0; i < serverNodes.length; i++ )
         {
           SmlNode  serverNode = serverNodes [ i ];

           String  serverName = StringLib.trimToNull (
             serverNode.getString ( "name" ) );

           if ( serverName == null )
           {
             continue;
           }

           SmlNode  groupsSmlNode = serverNode.getChildNode ( "groups" );

           if ( groupsSmlNode == null )
           {
             continue;
           }

           SmlNode [ ]  groupNodes
             = groupsSmlNode.getChildNodes ( "group" );

           for ( int  j = 0; j < groupNodes.length; j++ )
           {
             SmlNode  groupNode = groupNodes [ j ];

             String  groupName = StringLib.trimToNull (
               groupNode.getString ( "name" ) );

             if ( groupName == null )
             {
               continue;
             }

             long  last = groupNode.getLong ( "last", -1 );

             if ( last > -1 )
             {
               Map  groupToLastMap
                 = ( Map ) serverToGroupToLastMap.get ( serverName );

               if ( groupToLastMap == null )
               {
                 groupToLastMap = new HashMap ( );

                 serverToGroupToLastMap.put (
                   serverName, groupToLastMap );
               }

               groupToLastMap.put ( groupName, new Long ( last ) );
             }               
           }                          
         }
       }

       return new AgoracastNewsrc ( serverToGroupToLastMap );
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public  AgoracastNewsrc (
       Map  serverToGroupToLastMap )
     //////////////////////////////////////////////////////////////////////
     {
       NullArgumentException.check (
         this.serverToGroupToLastMap = serverToGroupToLastMap );
     }

     public  AgoracastNewsrc ( )
     //////////////////////////////////////////////////////////////////////
     {
       this ( new HashMap ( ) );
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public synchronized long  getLastArticleNumber (
       String  server,
       String  newsgroupName )
     //////////////////////////////////////////////////////////////////////
     {
       Map  nameToLastMap
         = ( Map ) serverToGroupToLastMap.get ( server );

       if ( nameToLastMap == null )
       {
         return -1;
       }

       Long  last = ( Long ) nameToLastMap.get ( newsgroupName );

       if ( last == null )
       {
         return -1;
       }

       return last.longValue ( );
     }

     public synchronized void  setLastArticleNumber (
       String  server,
       String  group,
       long    lastArticleNumber )
     //////////////////////////////////////////////////////////////////////
     {
       Long  last = new Long ( lastArticleNumber );

       Map  nameToLastMap = ( Map ) serverToGroupToLastMap.get ( server );

       if ( nameToLastMap == null )
       {
         nameToLastMap = new HashMap ( );

         serverToGroupToLastMap.put ( server, nameToLastMap );
       }

       nameToLastMap.put ( group, last );

       isDirty = true;
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////

     public synchronized boolean  saveIfDirty ( String  filename )
       throws IOException
     //////////////////////////////////////////////////////////////////////
     {
       if ( isDirty )
       {
         SmlNodeLib.save ( filename, toSmlNode ( ) );

         isDirty = false;

         return true;
       }

       return false;
     }

     public synchronized SmlNode  toSmlNode ( )
     //////////////////////////////////////////////////////////////////////
     {
       SmlNode  rootSmlNode = new SmlNode ( "agoracast-newsrc" );

       SmlNode  serversSmlNode = new SmlNode ( "servers" );

       rootSmlNode.add ( serversSmlNode );

       Iterator  iterator = serverToGroupToLastMap.keySet ( ).iterator ( );

       while ( iterator.hasNext ( ) )
       {
         SmlNode  serverSmlNode = new SmlNode ( "server" );

         serversSmlNode.add ( serverSmlNode );

         String  serverName = ( String ) iterator.next ( );

         serverSmlNode.add ( new SmlNode ( "name", serverName ) );

         Map  groupToLastMap
           = ( Map ) serverToGroupToLastMap.get ( serverName );

         if ( groupToLastMap == null )
         {
           continue;
         }

         SmlNode  groupsSmlNode = new SmlNode ( "groups" );

         serverSmlNode.add ( groupsSmlNode );

         Iterator  groupIterator = groupToLastMap.keySet ( ).iterator ( );

         while ( groupIterator.hasNext ( ) )
         {
           SmlNode  groupSmlNode = new SmlNode ( "group" );

           groupsSmlNode.add ( groupSmlNode );

           String  groupName = ( String ) groupIterator.next ( );

           groupSmlNode.add ( new SmlNode ( "name", groupName ) );

           Long  last = ( Long ) groupToLastMap.get ( groupName );

           if ( last == null )
           {
             continue;
           }

           groupSmlNode.add ( new SmlNode ( "last", last.toString ( ) ) );
         }         
       }

       return rootSmlNode;
     }

     //////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -