Package org.geoforge.appogcecl.actioncontroller

Source Code of org.geoforge.appogcecl.actioncontroller.GfrAcrSpcAppMainOgcAbs

/*
*  Copyright (C) 2011-2014 GeoForge Project
*
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU Lesser General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.geoforge.appogcecl.actioncontroller;

import java.io.File;
import java.util.Collection;
import java.util.HashSet;
import java.util.logging.Logger;
import org.geoforge.basusrspcdat.io.GfrPrpNamingBasGrpChl;
import org.geoforge.basusrspcdat.table.GfrBasTblGrpProjects;
import org.geoforge.basusrspcdsp.io.GfrPrpNamingBasDspUsr;
import org.geoforge.basusrspcdsp.table.GfrBasTblUsrSpcPrtHistoryAbs;
import org.geoforge.basusrspcdsp.table.GfrBasTblUsrSpcPrtHistoryWork;
import org.geoforge.guillc.GfrAppSpcAbs;
import org.geoforge.guillc.action.ActionPluginSetLicense;
import org.geoforge.guillc.actioncontroller.GfrAcrSpcAppMainAbs;
import org.geoforge.guillc.actionmanager.GfrAmrAppMainAbs;
import org.geoforge.guillc.optionpane.GfrOptionPaneAbs;
import org.geoforge.java.util.logging.filehandler.FileHandlerLogger;
import org.geoforge.java.lang.string.GfrUtlString;
import org.geoforge.mgrplg.handler.IGfrHandlerLicensingPlugin;
import org.geoforge.mgrplg.handler.IGfrHandlerPlugin;
import org.geoforge.mgrplg.impl.GfrPlgImplAbs;
import org.geoforge.mgrplg.model.GfrMdlPlg;
import org.geoforge.wrpbasspcdatogcecl.root.GfrWrpBasDatSpcRoot;
import org.geoforge.wrpbasusr.GfrValueDateHistory;
import org.geoforge.wrpbasusr.GfrWrpUsrSpcDspPrtAppRoot;
import org.geoforge.wrpbasusr.GfrWrpUsrSpcDspPrtAppWork;
import org.geoforge.wrpsql.GfrWrpSqlGetTableRecordingsTarget;
import org.geoforge.wrpsql.GfrWrpSqlRemoveRecordingKeyValue;

/**
*
* @author bantchao
*
* email: bantchao_AT_gmail.com ... please remove "_AT_" from the above string
* to get the right email address
*
*/
abstract public class GfrAcrSpcAppMainOgcAbs extends GfrAcrSpcAppMainAbs
{
   // ----
   // begin: instantiate logger for this class
   final private static Logger _LOGGER_ = Logger.getLogger(GfrAcrSpcAppMainOgcAbs.class.getName());

   static
   {
      GfrAcrSpcAppMainOgcAbs._LOGGER_.addHandler(FileHandlerLogger.s_getInstance());
   }
   // end: instantiate logger for this class
   // ----
  
   protected GfrAcrSpcAppPrtRootOgcEclAbs _acrActive = null;
  
   abstract public void managePluginsHandler();
   abstract public void addPluginHandler();
   abstract public void deletePluginHandler();
   abstract public void deletePluginsHandler();
  
  
   abstract public void aboutPluginHandler();
  
   // at launching time
   abstract protected void _activateLicensedPluginsAtLaunchTime();


   protected GfrAcrSpcAppMainOgcAbs(GfrAppSpcAbs app, GfrAmrAppMainAbs amr) throws Exception
   {
      super(app, amr);
   }
  
   protected void _activateLicensedPluginsAtLaunchTime(Collection<IGfrHandlerPlugin> colPlg)
   {
       if (colPlg==null || colPlg.isEmpty())
           return;
      
       // ---
       for (IGfrHandlerPlugin plgCur: colPlg)
       {
           if (! (plgCur instanceof IGfrHandlerLicensingPlugin))
               continue;
          
           try
           {
               String strNamePlgCur = plgCur.getNamePlugin();
               String strVersionPlgCur = plgCur.getVersionThisPlugin();

               String strPathAbsLicPlgCur = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getPathAbsoluteLicPlugin(strNamePlgCur, strVersionPlgCur);
              
               if (strPathAbsLicPlgCur==null || strPathAbsLicPlgCur.length()<1)
                  continue;
              
              
               IGfrHandlerLicensingPlugin hndPlgLic = (IGfrHandlerLicensingPlugin) plgCur;
      
                if (! hndPlgLic.doJobStoredFileLicensePlugin(strPathAbsLicPlgCur))
                {
                    String strWarning = "! hndPlgLic.doJobStoredFileLicensePlugin(strPathAbsLicPlgCur)";
                    strWarning += "\n" + ". strNamePlgCur=" + strNamePlgCur;
                    strWarning += "\n" + ". strVersionPlgCur=" + strVersionPlgCur;
                    strWarning += "\n" + ". strPathAbsLicPlgCur=" + strPathAbsLicPlgCur;
                    //strWarning += "\n" + "\n" + "... cleaning-up DB";
                   
                    throw new Exception(strWarning);
                }

               GfrMdlPlg.getInstance().setActive((GfrPlgImplAbs) plgCur, true);
           }
          
           catch(Exception exc)
           {
               exc.printStackTrace();
               String strWarning = exc.getMessage();
               strWarning += "\n ... ignoring";
               GfrAcrSpcAppMainOgcAbs._LOGGER_.warning(strWarning);
           }
       }
   }
  
   protected void _addPluginHandler(IGfrHandlerPlugin plg) throws Exception
   {
       if (plg == null)
             return;
         
        String strOk = "Successfully added plugin named\n   " + "\"" + plg.getNamePlugin() + "\"";
        GfrAcrSpcAppMainOgcAbs._LOGGER_.info(strOk);

        if (plg instanceof IGfrHandlerLicensingPlugin)
        {
            strOk += "\n\n" + "This plug-in requires license to get it working";
            GfrOptionPaneAbs.s_showDialogInfo(null, strOk);
           
            IGfrHandlerLicensingPlugin hndPlgLic = (IGfrHandlerLicensingPlugin) plg;
      
            if (! hndPlgLic.doJobOpenFileLicensePlugin())
            {
                String strWarning = "! hndPlgLic.openFileLicensePlugin()";
                GfrAcrSpcAppMainOgcAbs._LOGGER_.warning(strWarning);

                return;
            }

            GfrMdlPlg.getInstance().setActive((GfrPlgImplAbs) plg, true);
        }
   }
  
 
   public void setLicensePluginHandler()
   {
       IGfrHandlerPlugin plg = ActionPluginSetLicense.s_getInstance().getPlugin();
      
       if (plg == null)
       {
          String strError = "plg == null";
          GfrAcrSpcAppMainOgcAbs._LOGGER_.severe(strError);
          GfrOptionPaneAbs.s_showDialogError(null, strError);
          return; // do not exit coz tbrl could comes from outside application (ie. 3rd party plugin)
       }
      
       if (! (plg instanceof IGfrHandlerLicensingPlugin))
       {
           String strError = "Dev coding error: ! (plg instanceof IGfrHandlerLicensingPlugin)";
           GfrAcrSpcAppMainOgcAbs._LOGGER_.severe(strError);
           GfrOptionPaneAbs.s_showDialogError(null, strError);
           return; // ??? exit ???
       }
      
      
       // beg check license
       /*
        * if wrong:
        * message dialog: either corrupted or wrong file
        * delete path to file in DB
        * Q: abort?
        */
      
       IGfrHandlerLicensingPlugin hndPlgLic = (IGfrHandlerLicensingPlugin) plg;
      
       if (! hndPlgLic.doJobOpenFileLicensePlugin())
       {
          String strWarning = "! hndPlgLic.openFileLicensePlugin()";
           GfrAcrSpcAppMainOgcAbs._LOGGER_.warning(strWarning);
           // ??? dialog ???
           return;
       }

       GfrMdlPlg.getInstance().setActive((GfrPlgImplAbs) plg, true);
   }
  
  

   /*
    * first run
    *
    */
   @Override
   public boolean init()
   {
      if (!super.init())
         return false;
     
      _checkAndCleanupIfNeededHistories_(); // DONE IN A HURRY !!! to be optimized
     
     
      _activateLicensedPluginsAtLaunchTime();

      if (!this._acrActive.init())
         return false;

      return true;
   }

   private String[] _getWorkspaceChildrenHistory_(String strPathAbsWorkSpace) throws Exception
   {

      String strPathAbsDb = strPathAbsWorkSpace;
      strPathAbsDb += java.io.File.separator;
      strPathAbsDb += GfrPrpNamingBasDspUsr.STR_NAME_FILE_DB_SPACEWORK;

      String[] strs = GfrWrpSqlGetTableRecordingsTarget.s_getInstance().doJob(
              "",
              "",
              strPathAbsDb,
              GfrBasTblUsrSpcPrtHistoryWork.s_getInstance(),
              GfrBasTblUsrSpcPrtHistoryWork.FLD_VAR_CHAR_CHILD_VALUE);

      return strs;
   }

   private String[] _getWorkspaceChildrenList_(String strPathAbsWorkSpace) throws Exception
   {
      String strPathAbsDb = strPathAbsWorkSpace;
      strPathAbsDb += java.io.File.separator;
      strPathAbsDb += GfrPrpNamingBasGrpChl.STR_NAME_FILE_DB_SPACEWORK;


      String[] strs = GfrWrpSqlGetTableRecordingsTarget.s_getInstance().doJob(
              "",
              "",
              strPathAbsDb,
              GfrBasTblGrpProjects.s_getInstance(),
              GfrBasTblGrpProjects.FLD_VAR_CHAR_NAME);

      return strs;
   }

   private void _checkAndCleanupIfNeededHistories_()
   {
      try
      {
         String[] strsValueListWorkspaces = null;
        
         // ---
         strsValueListWorkspaces = GfrWrpBasDatSpcRoot.getInstance().getSortedPathsAbsolute();
        
         _checkAndCleanupupIfNeededListRoot_(strsValueListWorkspaces);
        
         // TODO cleanUp workspaces' projects in list if needed
        
         strsValueListWorkspaces = GfrWrpBasDatSpcRoot.getInstance().getSortedPathsAbsolute();

         _checkAndCleanupIfNeededHistoriesRoot_(strsValueListWorkspaces);
         _checkAndCleanupIfNeededHistoriesWorks_(strsValueListWorkspaces);
      }
      catch (Exception exc)
      {
         exc.printStackTrace();
         GfrAcrSpcAppMainOgcAbs._LOGGER_.info("exc caught, don't care"); // !!! not sure about that !!!
      }
   }
  
   private void _checkAndCleanupupIfNeededListRoot_(String[] strsValueListWorkOri) throws Exception
   {
      if (strsValueListWorkOri == null)
         return;
     
      if (strsValueListWorkOri.length < 1)
         return;
     
      HashSet<String> setCleaned = new HashSet<String>();
      // TODO
     
      for (int i=0; i<strsValueListWorkOri.length; i++)
      {
         File fleCur = new File(strsValueListWorkOri[i]);
        
         if (! fleCur.exists())
         {
            setCleaned.add(strsValueListWorkOri[i]);
            continue;
         }

         if (! fleCur.canRead())
         {
            setCleaned.add(strsValueListWorkOri[i]);
            continue;
         }
        
         if (! fleCur.isDirectory())
         {
            setCleaned.add(strsValueListWorkOri[i]);
            continue;
         }
      }
     
      if (setCleaned.isEmpty())
      {
         setCleaned = null;
         return;
      }
     
     
      String[] strsToDelete = setCleaned.toArray(new String[setCleaned.size()]);
     
      GfrWrpBasDatSpcRoot.getInstance().delete(strsToDelete);
     
      setCleaned.clear();
      setCleaned = null;

   }

   private void _checkAndCleanupIfNeededHistoriesWorks_(String[] strsValueListWorkspace) throws Exception
   {
      if (strsValueListWorkspace == null || strsValueListWorkspace.length == 0)
         return;


      for (int i = 0; i < strsValueListWorkspace.length; i++)
      {
         // get list projects
         String[] strsWorkspaceChildrenList = _getWorkspaceChildrenList_(strsValueListWorkspace[i]);
         // get history projects
         String[] strsWorkspaceChildrenHistory = _getWorkspaceChildrenHistory_(strsValueListWorkspace[i]);

         // ---

         if (strsWorkspaceChildrenHistory==null || strsWorkspaceChildrenHistory.length<1)
         {
            continue;
         }

         HashSet<String> setValuesToDelete = new HashSet<String>();
        
         for (int j=0; j<strsWorkspaceChildrenHistory.length; j++)
         {
            // inside list?
            if (strsWorkspaceChildrenList == null || strsWorkspaceChildrenList.length < 1)
            {
               setValuesToDelete.add(strsWorkspaceChildrenHistory[j]);
               continue;
            }

            if (!GfrUtlString.s_contains(strsWorkspaceChildrenList, strsWorkspaceChildrenHistory[j]))
            {
               setValuesToDelete.add(strsWorkspaceChildrenHistory[j]);
               continue;
            }
         }
        
         for (String strValueToDelete : setValuesToDelete)
         {
            _deleteChildProjectFromHistory(strsValueListWorkspace[i], strValueToDelete);
         }
        

         // ---
      }
   }
  
   private void _deleteChildProjectFromHistory(String strPathAbsWorkspace, String strValue) throws Exception
   {
     String strPathAbsDb = strPathAbsWorkspace;
         strPathAbsDb += java.io.File.separator;
         strPathAbsDb += GfrPrpNamingBasDspUsr.STR_NAME_FILE_DB_SPACEWORK;
        
      GfrWrpSqlRemoveRecordingKeyValue.s_getInstance().doJob(
              "",
              "",
              strPathAbsDb,
              GfrBasTblUsrSpcPrtHistoryWork.s_getInstance(),
              GfrBasTblUsrSpcPrtHistoryWork.FLD_VAR_CHAR_CHILD_VALUE,
              strValue);
   }

   private void _checkAndCleanupIfNeededHistoriesRoot_(String[] strsValueListWork) throws Exception
   {
      HashSet<String> setValuesToDelete = new HashSet<String>();


      // TODO: get list

      Object[] objs = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getArrayValueDateChildrenFromHistory();

      if (objs == null)
      {
         setValuesToDelete = null;
         return;
      }

      if (objs.length < 1)
      {
         setValuesToDelete = null;
         return;
      }

      for (int i = 0; i < objs.length; i++)
      {
         GfrValueDateHistory vdhCur = (GfrValueDateHistory) objs[i];
         String strValueCur = vdhCur.getValue();

         File fleCur = new File(strValueCur);

         if (!fleCur.exists())
         {
            setValuesToDelete.add(strValueCur);
            continue;
         }

         if (!fleCur.canRead())
         {
            setValuesToDelete.add(strValueCur);
            continue;
         }

         // inside list?
         if (strsValueListWork == null || strsValueListWork.length < 1)
         {
            setValuesToDelete.add(strValueCur);
            continue;
         }

         if (!GfrUtlString.s_contains(strsValueListWork, strValueCur))
         {
            setValuesToDelete.add(strValueCur);
            continue;
         }
      }

      if (setValuesToDelete.size() < 1)
      {
         setValuesToDelete = null;
         return;
      }

      for (String strValueToDelete : setValuesToDelete)
      {
         GfrWrpUsrSpcDspPrtAppRoot.getInstance().deleteChild(strValueToDelete);
      }

      setValuesToDelete.clear();
      setValuesToDelete = null;

   }

   public void displaySpace() throws Exception
   {
      open();

      String strLastSpaceRootVsWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getLast();

      // root
      if (strLastSpaceRootVsWork.compareTo(GfrBasTblUsrSpcPrtHistoryAbs.STR_WHO_LAST_ME) == 0)
      {
         this._acrActive.open();
         return;
      }

      // workspace or project


      String strPathAbsLastAccessedWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();

      if (strPathAbsLastAccessedWork == null || strPathAbsLastAccessedWork.compareTo("") == 0)
      {
         this._acrActive.open();
         return;
      }


      String strLastSpaceWorkVsProject = GfrWrpUsrSpcDspPrtAppWork.getInstance().getLast();

      if (strLastSpaceWorkVsProject.compareTo(GfrBasTblUsrSpcPrtHistoryAbs.STR_WHO_LAST_ME) == 0)
      {
         this._acrActive.displayChild(strPathAbsLastAccessedWork);
         return;
      }

      // ---

      String strNameAccessedProject = GfrWrpUsrSpcDspPrtAppWork.getInstance().getValueLastChildFromHistory();

      if (strNameAccessedProject == null || strNameAccessedProject.compareTo("") == 0)
      {
         this._acrActive.displayChild(strPathAbsLastAccessedWork);
         return;
      }

      this._acrActive.displayGrandChild(strNameAccessedProject);
   }

   @Override
   public void destroy()
   {
      super.destroy();

      if (this._acrActive != null)
      {
         this._acrActive.destroy();
         this._acrActive = null;
      }
   }
}
TOP

Related Classes of org.geoforge.appogcecl.actioncontroller.GfrAcrSpcAppMainOgcAbs

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.